Buffer Pool运行机制理解
Buffer Pool机制理解
一、为什么使用Buffer Pool?
众所周知,磁盘数据是以数据页的形式来去读取的,一个数据页默认大小 16K,也就是说你本意只想读取一行数据,但是它会给你加载一页的数据到buffer pool里面。这样的话就能减少与磁盘的交互次数,从而提升效率。
二、什么是Buffer Pool?
- 是一块内存区域,当数据库操作数据的时候,把磁盘上的数据加载到buffer pool,对buffer pool数据进行增删改查,不直接和磁盘打交道。
- 默认大小 128M
SHOW VARIABLES LIKE '%innodb_buffer_pool_size%'; -- 查看buffer_pool大小 默认128M
SHOW VARIABLES LIKE '%innodb_old_blocks_pct%'; -- LRU链表冷热区域配置 默认3 7
SHOW VARIABLES LIKE '%innodb_old_blocks_time%'; -- LRU链表冷区域的数据隔多久可以放入到热区域
SHOW VARIABLES LIKE '%innodb_file_size%'; -- 单个logfile的大小 默认48M
SHOW VARIABLES LIKE '%innodb_log_file_in_group%'; -- 配置有几个logfile
SHOW VARIABLES LIKE '%innodb_log_buffer_size%'; -- redo log buffer的大小 默认16M
SHOW VARIABLES LIKE '%innodb_flush_log_at_trx_commit%'; -- redo log buffer 中的内容间隔多久刷新到磁盘, 默认1s
三、Buffer Pool运行机制
当我们读取数据的时候,如果buffer pool中不存在则会从磁盘加载到buffer pool,然后一直读取数据就会一直加载,所以buffer pool就会有爆满的时候。这时候就要采取淘汰策略,buffer pool采取的LRU(最近最少使用)淘汰策略。
在此之前先说的是,使用LRU策略淘汰的时候,就会出现下面的所演示的现象(有数据的控制块是不连续的),这时候再读取数据到buffer pool的时候要填充到哪个空白的区域?–就要用到free链表

1. free链表
主要管理空白区域,该链表会有一个基节点用于管理链表有多少空白的控制块,还有两个结点,一个连接头结点,一个连接尾结点。当读取数据到buffer pool的时候,会找free链表的头结点对应的控制块进行填充,当进行控制块淘汰的时候,空白的控制块就会连接free链表的尾结点。
2. flush链表
当我们进行update语句的时候,就会对数据进行修改,此时也是对buffer pool的数据进行修改,有数据进行修改又没刷新到磁盘的这页数据我们称为脏页。mysql后台线程会对这些脏页进行刷盘,但是要刷哪些页?此时就得靠flush链表了。
flush链表主要管理上面所说的脏页区域,该链表会有一个基节点用于管理链表有多少脏页的控制块,同样有两个结点,一个连接头结点,一个连接尾结点。当mysql后台线程进行刷盘的时候就会找到flush链表有哪些是脏页来进行刷盘。
3.lru链表
当我们读取一页的数据到buffer pool的时候,这一页的数据就会信息就会被记录到lru链表,再读取一页数据,后一页的数据的信息会插到之前的页之前。当读取的页又被用的话,也会插到链表的头结点,所以lru链表最靠前就是最近被使用的数据。当buffer pool满的时候,就会进行淘汰lru链表尾部的数据。
但是这样的lru链表是存在问题的:比如我们有那么几页是频繁查询的数据页始终位于lru链表的头部部分,此时我们执行一个查询数据量非常大的sql,首页会淘汰lru链表尾部的数据块,还是不够的话就会淘汰头部那些热点数据块。因此就会影响热点数据,所以要对lru链表进行升级。
4.升级版lru链表

升级版的lru链表会分为热数据区域和冷数据区域,占比为5:3,当我们对数据页进行操作时,会插入冷区域的头部,淘汰也是淘汰冷区域的尾部。那么冷区域的数据什么时候才能进入热区域呢?
首先数据页被访问进入冷区域的时候设为t1,该数据页再次被访问的时候设为t2,t2减去t1大于1s的时候就会被放入热数据区域。这样就能预防类似全表扫描这样的sql,对热数据产生的影响,因为一直替换的是冷区域的数据。
相关文章:
Buffer Pool运行机制理解
Buffer Pool机制理解 一、为什么使用Buffer Pool? 众所周知,磁盘数据是以数据页的形式来去读取的,一个数据页默认大小 16K,也就是说你本意只想读取一行数据,但是它会给你加载一页的数据到buffer pool里面。这样的话就…...
windows配置dns访问git , 加快访问速度保姆级教程
设置 DNS 访问 Git 需要修改电脑的 DNS 配置。下面是具体的操作流程: 第一步:打开命令提示符或终端窗口 在 Windows 系统中,可以按下 Win R 组合键,然后输入 “cmd”,按下 Enter 键打开命令提示符窗口。在 macOS 或 …...
Solidity学习-投票合约示例
以下的合约有一些复杂,但展示了很多Solidity的语言特性。它实现了一个投票合约。 当然,电子投票的主要问题是如何将投票权分配给正确的人员以及如何防止被操纵。 我们不会在这里解决所有的问题,但至少我们会展示如何进行委托投票,…...
前端Vue自定义支付密码输入框键盘与设置弹框组件的设计与实现
摘要 随着信息技术的不断发展,前端开发的复杂性日益加剧。传统的开发方式,即将整个系统构建为一个庞大的整体应用,往往会导致开发效率低下和维护成本高昂。任何微小的改动或新功能的增加都可能引发对整个应用逻辑的广泛影响,这种…...
【QEMU中文文档】1.1 支持的构建平台
本文由 AI 翻译(ChatGPT-4)完成,并由作者进行人工校对。如有任何问题或建议,欢迎联系我。联系方式:jelin-shoutlook.com。 原文:Supported build platforms — QEMU documentation QEMU 旨在支持在多个主机…...
摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版
LrC2024(Lightroom Classic 2024)是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版,具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…...
通关!游戏设计之道Day20
用时20天,《通关!游戏设计之道》也是完结撒花喽。 虽然只是浅显的读了一遍但收获还是很多的。我想在我真正开始做游戏时再回来看,一定会收获更多的。 《通关游戏设计之道》是一本深入探讨游戏设计的专业书籍,它不仅仅是一本理论…...
2024年上半年软件设计师试题及答案(回忆版)--选择题
基础知识选择题 基础知识选择题 1,2,3][4,5,6][1,2,3,4,5,6] (总:1分) (注意:括号内的是截止当前题目总分) vlan不能隔绝内外网 (2分) 链路层使用交换机,…...
5.28.1 使用卷积神经网络检测乳腺癌
深度学习技术正在彻底改变医学图像分析领域,因此在本研究中,我们提出了卷积神经网络 (CNN) 用于乳腺肿块检测,以最大限度地减少手动分析的开销。CNN 架构专为特征提取阶段而设计,并采用了更快的 R-CNN 的区域提议网络 (RPN) 和感兴…...
【JavaScript脚本宇宙】JavaScript日期处理神器: 6款顶级库解析
提升编程效率:六个强大的JavaScript日期时间库介绍 前言 在信息化社会,日期和时间的处理是任何编程语言必不可少的部分。本文将介绍六个优秀的JavaScript日期和时间库,这些库各有特色,可以应对多样的使用场景。 欢迎订阅专栏&am…...
C++基础编程100题-002 OpenJudge-1.1-04 输出保留3位小数的浮点数
更多资源请关注纽扣编程微信公众号 002 OpenJudge-1.1-04 输出保留3位小数的浮点数 http://noi.openjudge.cn/ch0101/04/ 描述 读入一个单精度浮点数,保留3位小数输出这个浮点数。 输入 只有一行,一个单精度浮点数。 输出 也只有一行,…...
Linux挂载硬盘
通过df -h命令后无硬盘信息,但是已经分配了硬盘,需要将硬盘挂载到主机上。 通过命令:lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 492K 0 rom vda 252:0 0 50G 0 disk …...
用户购物性别模型标签(USG)之决策树模型
一、USG模型引入: 首先了解一下,如何通过大数据来确定用户的真实性别, 经常谈论的用户精细化运营,到底是什么? 简单来讲,就是将网站的每个用户标签化,制作一个属于用户自己的网络身份证。然后,运营人员 通…...
Mock的用法
1. 引入unittest包,再从包里引用mock类 import unittest from unittest import Mock 2. mock的作用,做挡板或者用来做一些单元测试过程中复杂的数据的模拟 demo Demo() #把mock的值赋值给demo的get()方法,这样在调用这个方法时࿰…...
内网-win1
一、概述 1、工作组:将不同的计算机按功能(或部门)分别列入不同的工作组 (1)、查看(windows) 查看当前系统中所有用户组:打开命令行--》net localgroup查看组中用户:打开命令行 --》net localgroup 后接组名查看用户…...
中国电子学会(CEIT)2023年09月真题C语言软件编程等级考试三级(含详细解析答案)
中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试三级 2023年09月 编程题五道 总分:100分一、谁是你的潜在朋友(20分) "臭味相投"一这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着 许多共同的兴趣。然而作为…...
golang线程池ants-四种使用方法
目录 1、ants介绍 2、使用方式汇总 3、各种使用方式详解 3.1 默认池 3.2 普通模式 3.3 带参函数 3.4 多池多协程 4、总结 1、ants介绍 众所周知,goroutine相比于线程来说,更加轻量、资源占用更少、无线程上下文切换等优势,但是也不能…...
Flutter开发效率提升1000%,Flutter Quick教程之对组件进行拖拽与接收
1,首先,所有可以选择的组件,都在左边的组件面板里。从里面点击任何一个,按住左键,向右边的手机面板上进行拖拽即可。 2,拖拽后,我们要选择一个接收组件。什么时候可以接收组件,就是当…...
揭秘小程序商城的团购奇迹:独特模式引领盈利新纪元
在数字经济的新纪元里,你是否对那些不张扬却充满潜力的商业模式心生好奇?今天,我要为你揭示一种别出心裁的商业模式,它以其独特的魅力,不仅迅速吸引了大量用户的目光,更在短短一个月内创造了超过600万的惊人…...
ssm_mysql_高校自习室预约系统(源码)
博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
X-UI代理管理工具实战指南:提升80%效率的7个自动化运维技巧
X-UI代理管理工具实战指南:提升80%效率的7个自动化运维技巧 【免费下载链接】x-ui 项目地址: https://gitcode.com/gh_mirrors/xui/x-ui 在服务器管理领域,效率与稳定性始终是运维人员面临的核心挑战。X-UI作为一款开源代理面板管理工具…...
LeetCode 283. Move Zeroes 题解
LeetCode 283. Move Zeroes 题解 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输…...
在 Windows 11 家庭版安装 Docker Desktop解决虚拟化问题
目录 前言 环境说明 架构原理 第一步:启用 Windows 虚拟化功能 第二步:修复 Hypervisor 启动配置 第三步:安装 WSL 2 与 Ubuntu 第四步:启动 Docker Desktop 第五步:验证安装 常见问题 总结 前言 Docker 是目…...
Spring Boot 与 Prometheus 监控实战
Spring Boot 与 Prometheus 监控实战 引言 大家好,今天想和大家聊聊 Spring Boot 与 Prometheus 的监控实践。作为一名 Java 架构师,我深知监控对于生产环境的重要性。Prometheus 作为云原生监控的事实标准,与 Spring Boot 的集成非常顺畅。让…...
Comsol瓦斯抽采:多物理场耦合的奇妙探索
comsol瓦斯抽采 该案例涉及有效应力场,瓦斯渗流场等多物理场耦合。 包括钻孔瓦斯抽采模型,热流固耦合模型,顺层瓦斯抽采模型,注氮驱替瓦斯模型,水力压裂模型,三轴裂隙岩体渗流应力耦合,采空区瓦…...
拯救你的机械键盘:3步告别按键连击烦恼
拯救你的机械键盘:3步告别按键连击烦恼 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经在打字时突然发现屏幕上出…...
别再手动装依赖了!ROS 2 Humble/Foxy下用rosdep一键搞定工作空间所有包的依赖安装
别再手动装依赖了!ROS 2 Humble/Foxy下用rosdep一键搞定工作空间所有包的依赖安装 "又报错了?缺少libxxx-dev?"——这可能是ROS 2开发者最常遇到的崩溃瞬间。当你在深夜赶项目,colcon build却因为缺失依赖而中断时&…...
别再傻傻分不清:Electron-packager和Electron-builder到底怎么选?一份给新手的场景化选择指南
Electron打包工具选型指南:从场景需求看electron-packager与electron-builder的抉择 当你第一次尝试将Electron应用交付给用户时,面对electron-packager和electron-builder这两个主流打包工具,是否感到困惑?它们看似功能相似&…...
在语音对话中,OpenClaw 的语音唤醒词定制化如何实现?
语音唤醒词定制化这件事,听起来像是给机器一个专属的暗号,喊对了它才搭理你。在OpenClaw这类语音对话系统里,实现这个功能,本质上是在解决一个“如何在嘈杂的声音环境里,准确识别出某个特定词汇”的问题。 这和我们平时…...
5大突破解决Android固件提取难题:面向开发者与技术爱好者的全能工具指南
5大突破解决Android固件提取难题:面向开发者与技术爱好者的全能工具指南 【免费下载链接】Firmware_extractor 项目地址: https://gitcode.com/gh_mirrors/fi/Firmware_extractor 问题引入:Android固件提取的碎片化困境 Android生态系统的开放性…...
