当前位置: 首页 > article >正文

MySQL高手第三章

从磁盘读取数据页到Buffer Pool的时候free链表有什么用我们怎么知道那些缓存是空闲的当我们数据库运行起来的时候肯定会不断的做增删改查将磁盘上读取一个一个数据页放入Buffer Pool中对应的缓存页里去但是从磁盘数据页放入Buffer Pool中的缓存页的时候必然涉及到一个问题那些缓存页是空闲的数据库会设计一个free链表一个双向链表这个free链表里每个节点就是一个空闲的缓存页描述数据块的地址只要你一个缓存页是空闲的那么他的描述数据块就会放入这个free链表中free链表中占用了多少内存空间这个free链表他本身就是由Buffer Pool里的描述数据块组成的可以认为是每个描述数据块里都有两个指针一个是free_pre一个是free_next对于free链表而言只有一个基础节点是不属于Buffer Pool的他是40字节大小的一个节点里面存放着链表头节点的地址尾节点的地址还有free链表里当前有多少个节点如何将磁盘上的页读取到Buffer Pool缓存页中去只要将free链表里获取一个描述数据块然后就可以对应的获取足够描述数据块对应的空闲缓存页怎么知道数据页有没有被缓存数据库有一个哈希表数据结构他会用表空间号数据页号作为一个key然后缓存页的地址作为value当你使用一个数据页的时候通过表空间号数据页号作为这个key去这个哈希表里检查一下如果没有就读取数据页如果有就代表存在当我们更新Buffer Pool数据时flush链表有什么用脏数据页为什么脏我们要更新的数据页都会在Buffer Pool的缓存页里共我们在内存执行增删改操作接下来去更新Buffer Pool缓存页中的数据此时一旦更新了缓存页中的数据那么缓存页里的数据和磁盘上的数据页里的数据就会不一致这个就叫做脏数据脏页哪些缓存页是脏页我们之前学过最终在内存里更新的脏页的数据都是要被刷新回磁盘文件的但是不可能所有缓存页都刷回磁盘的因为有的缓存页可能因为查询的时候被读取到Buffer Pool里去可能没有被修改所有数据库在这里需要引入和free表类似的flush链表其本质就是通过缓存页的数据块中的两个指针让被修改的缓存页的数据块组成一个双向链表凡是被修改的缓存页都会把他的描述数据块加入到flush链表中flush意思是脏数据后续都要刷新flush到磁盘当Buffer Pool的缓冲页不够的时候如何基于LRU算法淘汰部分内存当我们执行CRUD的时候无论是查询数据还是修改数据实际上都会把磁盘的数据页加载到缓存页里来。那么在加载数据到缓存页的时候必然是要加载到空闲的缓存页中所有必须要从free链表中找一个空闲的缓存页然后把磁盘上的缓存页加载到那个空闲的缓存页里去。随着不停把磁盘上的数据页加载到空闲的缓存页中free链表中的空闲缓存页会越来越少迟早有一刻缓存页会满这时候还要加载一个空闲的缓存页该怎么办针对这个问题我们就需要使用淘汰缓存页了缓存命中率概念引入假设现在有两个缓存页一个缓存页的数据经常被修改和查询比如命中100次请求有30次请求都在查询和修改这个缓存页中的数据这样就是这个缓存命中率高另外一个查询和修改在100次请求中就命中1个那么其命中率就很低现在如果我们要腾出空间来选择一个我们肯定会选择第二种方式LRU算法我们怎么知道哪些缓存经常被访问哪些缓存很少被访问这时候就需要LRU链表也就是最近最少使用的意思简单的LRU算法会遇到哪些问题预读机制首先会带来隐患的是MySQL的预读机制当你从磁盘上加载一个数据页的时候他可能会连带着把这个数据页相邻的其他数据页也加载到缓存当中哪些情况下会触发MySQL的预读机制有一个参数innodb_read_ahead_threshold默认是56如果顺序访问一个区里的多个数据页访问的数据页的数量超过了这个阈值此时就会触发预读机制把下一个相邻区域中的所有数据页都加载到缓存里面去如果Buffer Pool里缓存了一个区里的13个连续的数据页而且这些数据页都是比较频繁被访问的此时就会发送预读机制把这个区域中的数据加到缓存中这个机制是由innodb_random_read_ahead来控制的默认是OFF也就是关闭的意思另外一种可能导致频繁被访问的缓存页被淘汰的场景全表扫描会导致一下子将这个表所有的数据页都从磁盘加载到Buffer Pool里面去这时候会导致以前经常访问的缓存页都被淘汰了MySQL是如何基于冷热数据分离方案来优化LRU算法的冷热数据分离前面我们说明了简单的LRU算法带来的问题而MySQL肯定也考虑到了这一点所以他们使用的是冷热数据分离的思想真正的LRU链表是拆分为两部分一部分是热数据一部分是冷数据这个比例是由innodb_old_blocks_pct参数控制的默认是37%也就是冷数据占37%运行流程第一次加载一个缓存页的时候其会先放到冷数据链表的头部MySQL里面设定了一个参数innodb_old_blocks_time默认为1000也就是说一个数据页被加载到缓存页后1s之后访问这个缓存页他才会被挪动到热数据链表的头部解决之前的问题前面我们说到全部扫描这时候不就迎刃而解当全表扫描的时候会将其全部放到冷数据头部的位置而不影响热数据

相关文章:

MySQL高手第三章

从磁盘读取数据页到Buffer Pool的时候,free链表有什么用?我们怎么知道那些缓存是空闲的?当我们数据库运行起来的时候,肯定会不断的做增删改查,将磁盘上读取一个一个数据页放入Buffer Pool中对应的缓存页里去但是从磁盘…...

实战复盘-Redis连接数爆满引发的生产事故与优化策略

1. 事故背景:一场由促销活动引发的Redis雪崩 那天凌晨三点,我被一阵急促的电话铃声惊醒。电话那头是值班同事焦急的声音:"所有商品页面都打不开了,订单系统也瘫痪了!"我瞬间清醒,抓起电脑就开始…...

C语言诞生秘史:从被逼出到首个编译器的坎坷之路

C语言,是运用C语言自身来进行编译的,这一情况听起来好似那鸡生蛋、蛋生鸡这般,但早年贝尔实验室的那帮人实则真就把它给做成了,并非依靠魔法做到的,而是被逼迫到那种程度才达成的。被逼出来的语言临近1970年的时候 &am…...

4 种可靠的 OPPO 手机联系人备份到电脑的方法

OPPO 手机的全球出货量常年位居前五,足以见得它已经获得了越来越多用户的认可。对于年轻群体而言,入手一款高性价比的 OPPO Reno4 SE 这类机型是非常不错的选择。但日常使用中,误操作、进水等意外都可能导致数据丢失,为了避免这类…...

Qwen3.5-4B-Claude-Opus保姆级教程:Web界面响应延迟归因与优化路径

Qwen3.5-4B-Claude-Opus保姆级教程:Web界面响应延迟归因与优化路径 1. 模型与部署环境概览 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该…...

nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测

nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级但强大的工具在跨境电商领域…...

别再乱选了!Ansys EDA桌面版导入IBIS模型,Pin Import和Buffer Import到底怎么用?

Ansys EDA桌面版IBIS模型导入指南:Pin Import与Buffer Import深度解析 在信号完整性(SI)和电源完整性(PI)仿真领域,IBIS模型的使用一直是工程师们关注的焦点。作为行业标准的Ansys EDA工具链(原E-desktop)提供了强大的SIPI仿真能…...

从源码到上架:手把手教你用Android Studio打包绿豆TVBox APK,并修改Logo、启动图和包名

从零打造个性化TV应用:Android Studio深度定制指南 在流媒体内容消费爆发的时代,拥有一个专属的影视聚合平台成为许多技术爱好者的追求。绿豆TVBox这类开源项目为开发者提供了快速入门的跳板,但真正实现个性化部署需要跨越从源码编译到定制化…...

百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现

百川2-13B模型安全测试:OpenClaw在防御恶意指令方面的表现 1. 为什么需要测试AI助手的安全性 去年我在本地部署了一个自动化助手,本想让它帮我整理文档和收发邮件。结果有次不小心让它执行了一个包含rm -rf的命令,差点把工作目录清空。这次…...

Windows 11终极清理优化指南:用Win11Debloat快速提升系统性能

Windows 11终极清理优化指南:用Win11Debloat快速提升系统性能 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以…...

从 Spotlight 到 Raycast:一个 Mac 效率控的深度迁移与自定义指南

1. 为什么我从 Spotlight 迁移到 Raycast 作为一个用了十年Mac的老用户,我几乎每天都要和Spotlight打交道。从最初的简单文件搜索,到后来的计算器、词典功能,Spotlight确实帮了我不少忙。但直到去年发现Raycast,我才意识到原来Ma…...

ffmpegGUI:让FFmpeg视频处理变得简单的跨平台桌面工具

ffmpegGUI:让FFmpeg视频处理变得简单的跨平台桌面工具 【免费下载链接】ffmpegGUI ffmpeg GUI 项目地址: https://gitcode.com/gh_mirrors/ff/ffmpegGUI ffmpegGUI是一款基于FFmpeg的开源图形界面工具,它将命令行操作转化为直观的可视化交互&…...

如何用PPTist快速创建专业演示文稿:免费在线PPT制作完全指南

如何用PPTist快速创建专业演示文稿:免费在线PPT制作完全指南 【免费下载链接】PPTist 基于 Vue3.x TypeScript 的在线演示文稿(幻灯片)应用,还原了大部分 Office PowerPoint 常用功能,实现在线PPT的编辑、演示。支持导…...

GitHub中文界面终极指南:5分钟让你的GitHub说中文

GitHub中文界面终极指南:5分钟让你的GitHub说中文 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 想象一下,你…...

PromptTemplate和ChatPromptTemplate的区别是什么呢?

我用最简单、最直白、一看就懂的方式给你讲清楚: PromptTemplate 和 ChatPromptTemplate 的真正区别 一句话总结 PromptTemplate 生成一段普通字符串 给补全模型/简单模型用ChatPromptTemplate 生成一整段聊天对话格式 给**聊天模型(ChatGLM、Qwen、GP…...

新手指南:掌握3MF格式实现Blender高效3D打印工作流

新手指南:掌握3MF格式实现Blender高效3D打印工作流 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 副标题:从格式解析到自动化处理的完整应用方案…...

陶瓷淬火时“啪“一声裂开的瞬间,背后藏着相场模型里的连续损伤演化。今天咱们用Matlab玩个热应力场+相场断裂的耦合计算,看看脆性材料怎么被温度场玩坏

matlab相场热力耦合断裂问题,陶瓷淬火算例,paraview可视化先上主菜——相场控制方程。核心是温度场T与相场d的相爱相杀: % 热传导方程残差计算 function R_T calc_heat_residual(T, d, dt)kappa 1e-5; % 热扩散系数grad_T gradient(T);R_T…...

告别蓝牙!用STM32F103和NRF24L01搭建低成本2.4G无线通信,实测传输距离与稳定性

STM32F103与NRF24L01构建高性能2.4G私有通信系统实战指南 在物联网设备爆发式增长的今天,无线通信模块的选择成为硬件开发者面临的首要难题。面对市面上琳琅满目的蓝牙、Wi-Fi和私有协议模块,如何根据项目需求选择最具性价比的解决方案?本文将…...

为什么AI Coding、Skills、Agent智能体都偏爱Markdown?

为什么AI Coding、Skills、Agent智能体都偏爱Markdown? 更多问题讨论和资料获取,请关注文章最后的微信公众号 从ChatGPT的输出到GitHub Copilot的提示,从Claude的记忆存储到智能体的工作流配置——Markdown无处不在。这不是巧合,…...

Pencil:重新定义设计与开发的边界

🎨 Pencil:重新定义设计与开发的边界 更多问题讨论和资料获取,请关注文章最后的微信公众号 当"设计即代码"成为现实,前端开发者的工作流正在经历一场革命 📖 什么是 Pencil? 如果你是一名前端开…...

手把手教你用51单片机实现蓝牙+WiFi双模控制智能小车(附OLED显示速度)

从零构建51单片机智能小车:双模无线控制与速度显示实战指南 引言 想象一下,当你坐在沙发上,用手机就能遥控一台自制的小车在房间里自由穿梭,同时还能实时查看它的行驶速度——这种极客般的体验其实并不遥远。基于51单片机的智能…...

Qwen-Rapid-AIO终极教程:8秒完成专业级AI图像编辑的完整指南

Qwen-Rapid-AIO终极教程:8秒完成专业级AI图像编辑的完整指南 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 你是否曾经因为AI图像编辑工具操作复杂而头疼?是否厌倦…...

Windows 10/11 下用 Anaconda 和 Hadoop 3.3.6 搞定 PySpark 环境,附赠 Winutils 下载避坑指南

Windows 10/11 下用 Anaconda 和 Hadoop 3.3.6 搞定 PySpark 环境,附赠 Winutils 下载避坑指南 在 Windows 系统上搭建 PySpark 开发环境,对于数据科学家和开发者来说既是一个必经之路,也是一场充满挑战的冒险。不同于 Linux 或 macOS 系统&a…...

FanControl深度应用指南:从噪音溯源到智能散热系统搭建

FanControl深度应用指南:从噪音溯源到智能散热系统搭建 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

3个AI脚本让Illustrator设计效率提升300%:从重复劳动到创意爆发

3个AI脚本让Illustrator设计效率提升300%:从重复劳动到创意爆发 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 作为设计师,你是否每天花费40%以上时间在重复…...

告别WoMic:用VB-Audio Virtual Cable和TCP Socket自建无线麦克风(含参数配置避坑指南)

无线音频传输方案重构:VB-Audio与TCP Socket的工程实践 在音频处理领域,虚拟麦克风技术一直是个既实用又有趣的话题。许多开发者最初接触这一领域是通过WoMic这样的解决方案,但随着项目复杂度提升,人们往往需要更灵活、更可控的自…...

【开发工具】Trae IDE 解决 Windows 下 C 工程无法跳转定义问题

1. 概要 👋 作为 Trae IDE 使用者,在 Windows 环境打开本地 C 工程时,习惯用 Ctrl 鼠标左键 快速跳转函数 / 变量定义却失效,仅能做文本匹配,无法精准定位语义定义。核心原因是 Trae 依赖 LSP(语言服务器协…...

PTA编程题‘Person抽象类’避坑指南:变量命名冲突、多态指针数组与输出格式化的那些坑

PTA编程题‘Person抽象类’避坑指南:变量命名冲突、多态指针数组与输出格式化的那些坑 在C面向对象编程的实战中,抽象类和派生类的设计看似简单,却暗藏诸多陷阱。许多初学者在完成PTA/LeetCode这类编程题时,往往因为一些看似微不足…...

AutoUnipus:重新定义U校园学习效率的智能解决方案

AutoUnipus:重新定义U校园学习效率的智能解决方案 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 还在为U校园平台上堆积如山的网课任务而焦虑吗?每天花费…...

three-tile: 一个为Three.js应用注入真实地形的开源LOD模型库

1. three-tile究竟是什么? 第一次看到three-tile这个名字,很多人会误以为它又是一个WebGIS框架。但实际使用后你会发现,这个开源库的定位非常独特——它本质上是一个专为Three.js设计的LOD地形模型库。所谓LOD(Level of Detail&am…...