首页 > 其他分享 >BufferPool概念详情+工作流程

BufferPool概念详情+工作流程

时间:2023-09-11 15:35:42浏览次数:63  
标签:BufferPool buffer 流程 查询 详情 MySQL 磁盘 数据 pool

概念详解

MySQL中的buffer pool是用于缓存数据页的内存池,是MySQL中非常重要的组件之一。buffer pool中存储了MySQL中最常用的数据页,包括索引页和数据页,这些数据页被缓存到内存中,以提高查询性能。

下面是buffer pool的一些详细介绍:

  1. buffer pool的作用:buffer pool是MySQL用于缓存数据页的内存池,可以提高查询性能。当查询需要读取某个数据页时,如果该数据页已经在buffer pool中,则可以直接从内存中读取,而不需要从磁盘中读取。这样可以大大减少磁盘I/O操作,提高查询性能。
  2. buffer pool的大小:buffer pool的大小可以通过配置文件或者命令行参数进行设置。在MySQL 5.7版本及以后,buffer pool的默认大小为128MB。通常情况下,buffer pool的大小应该设置为系统可用内存的70%~80%左右,以充分利用内存资源。
  3. buffer pool的工作原理:当需要读取某个数据页时,MySQL会首先检查该数据页是否在buffer pool中。如果在,则直接从内存中读取;如果不在,则需要从磁盘中读取,并将该数据页缓存到buffer pool中。当buffer pool已满时,MySQL会根据一定的算法(LRU算法)来淘汰一些不常用的数据页,以腾出空间来缓存新的数据页。
  4. 如何判断数据页是否在 buffer pool 中呢?
  1. 使用EXPLAIN语句:在执行查询语句时,可以使用EXPLAIN语句来查看查询计划,其中会显示是否需要从磁盘读取数据页。如果查询计划中显示需要从磁盘读取数据页,则说明该数据页不在buffer pool中。
  2. 通常通过Extra列来判断
  1. 具体来说,如果Extra列中显示Using index,则说明查询可以通过索引直接从buffer pool中读取数据,不需要从磁盘中读取数据页。
  2. 如果Extra列中显示Using where,则说明查询需要从磁盘中读取数据页,并且需要进行条件过滤。
  3. 如果查询需要访问的数据页都在buffer pool中,则查询的type列通常为index或ALL,并且Extra列中不会显示Using where等信息。
  4. 如果查询需要访问的数据页大部分在buffer pool中,但有一部分需要从磁盘中读取,则查询的type列通常为range或ref,并且Extra列中可能会显示Using where等信息
  5. 如果查询需要访问的数据页都在buffer pool中,则查询的type列通常为index或ALL,并且Extra列中不会显示Using where等信息。
  6. 如果查询需要访问的数据页大部分在buffer pool中,但有一部分需要从磁盘中读取,则查询的type列通常为range或ref,并且Extra列中可能会显示Using where等信息
  1. 通过EXPLAIN语句来判断不是特别准确。
  1. MySQl中有一个哈希表数据结构,它使用表空间号+数据页号,作为一个key,然后缓冲页对应的控制块作为value。
  2. 当需要访问某个页的数据时,先从哈希表中根据表空间号+页号看看是否存在对应的缓冲页
  3. 如果有,则直接使用;如果没有,就从free链表中选出一个空闲的缓冲页,然后把磁盘中对应的页加载到该缓冲页的位置
  1. buffer pool的监控和调优:可以通过SHOW STATUS命令来监控buffer pool的使用情况,包括缓存命中率、缓存读取次数、缓存写入次数等。如果缓存命中率较低,可以考虑增加buffer pool的大小;如果缓存写入次数较高,可以考虑优化查询语句或者增加内存等。
  2. buffer pool和磁盘I/O操作:buffer pool可以减少磁盘I/O操作,提高查询性能。但是,如果buffer pool的大小不足或者缓存命中率较低,则会增加磁盘I/O操作。因此,在使用MySQL时,需要合理设置buffer pool的大小,并优化查询语句,以提高缓存命中率。

总之,buffer pool是MySQL中非常重要的组件之一,对于提高查询性能和减少磁盘I/O操作都起到了至关重要的作用。因此,在使用MySQL时,需要充分了解和掌握buffer pool的相关知识,并根据具体情况进行监控和调优。

工作流程

BufferPool 读工作流程

  1. 分配内存
  1. MySQL启动时,InnoDB会根据配置文件中的参数(比如innodb_buffer_pool_size)来分配一定大小的内存作为buffer pool。
  2. 此时,buffer pool中没有任何数据页,是空的
  1. 判断数据页是否在buffer pool 中
  1. 不在:从磁盘读取页,并加载到buffer pool中
  1. 判断buffer pool空间是否已经满了
  2. 如果已经满了,根据 LRU 算法,淘汰不常用的数据页
  1. 在:直接从 buffer pool 中读取

BufferPool 更新工作流程

buffer pool的更新工作流程即是 MySQL "多版本并发控制(MVCC)" 机制的实现。

  • 初始化,数据页 在 buffer pool 中仅仅被读取。
  • 这个时候,多个事务可以对同一个数据页进行修改。
  • 具体操作是
  • 首先将原始数据页进行复制,并将复制后的数据页标记为 “脏页”
  • 更新操作将会在复制后的数据页上进行

注意点一:由于InnoDB使用了“多版本并发控制”(MVCC)机制,因此即使某个事务在读取数据时未对其进行修改,该数据页仍然可能被其他事务修改,因此需要对其进行复制和标记为“脏页”。

注意点二:当buffer pool中的“脏页”数量达到一定阈值时,InnoDB会触发一次“脏页刷新”操作,将所有“脏页”写入磁盘中。 这个阈值可以通过innodb_max_dirty_pages_pct参数进行配置。 同时,在实际应用中,需要根据实际情况来配置buffer pool大小和其他参数。 以充分利用内存资源,减少磁盘I/O操作和“脏页刷新”操作对性能的影响。

标签:BufferPool,buffer,流程,查询,详情,MySQL,磁盘,数据,pool
From: https://blog.51cto.com/u_16079703/7436106

相关文章

  • 改变业务流程的未来力量
    随着人工智能技术的快速发展,生成式AI正在改变着企业的业务流程。生成式AI技术可以利用大量的数据和算法来模拟人类智能,从而在各种业务场景中实现自动化和智能化。本文将详细介绍生成式AI对业务流程的影响以及企业如何应用生成式AI来提升业务流程效率和质量。一、生成式AI对业务流程......
  • Lnton羚通视频分析算法开发平台关于AI智能识别操作行为流程规范识别算法分析展示
    Lnton羚通的算法算力云平台是一款优秀的解决方案,具有突出的特点。它提供高性能、高可靠性、高可扩展性和低成本的特性,使用户能够高效地执行复杂计算任务。此外,平台还提供丰富的算法库和工具,并支持用户上传和部署自定义算法,提升了平台的灵活性和个性化能力。AI工人操作行为流程规范......
  • [框架设计之道(二)]设备、任务设置及业务流程
    目录说明此文档是开发中对设备设置项的管理。因为硬件在使用的过程中涉及大量设置项,因此需要单独开一篇文档说明设备的设置和任务的设置。一、设备设置1.基础接口//////配置文件管理模块///classTSG_ConfigHelper:publicTSG_Framework{public:virtualboolInit......
  • 用vue开发新项目的前期步骤流程
     一、git代码托管平台1)注册登录:Gitee-基于Git的代码托管和研发协作平台2)在码云上传本地已存在项目:编辑编辑3)安装git::https://git-scm.com/4)克隆码云上的项目到本地:gitclone仓库地址5)搭建项目环境6)将代码上传到gitee.com的仓库中:git的使用,查看另外一篇文章二、搭建vue项目环......
  • 腾讯云免费SSL证书申请流程_图文教程
    腾讯云免费SSL证书申请流程,一个腾讯云账号可以申请50张免费SSL证书,免费SSL证书为DV证书,仅支持单一域名,申请腾讯云免费SSL证书3分钟即可申请成功,免费SSL证书品牌为TrustAsia亚洲诚信,腾讯云百科分享腾讯云免费SSL证书申请流程,3分钟搞定:腾讯云免费SSL证书申请流程申请免费SSL证书之前,......
  • nodejs采集淘宝、天猫网商品详情数据以及解决_m_h5_tk令牌及sign签名验证(2023-09-09)
    一、淘宝、天猫sign加密算法淘宝、天猫对于h5的访问采用了和APP客户端不同的方式,由于在h5的js代码中保存appsercret具有较高的风险,mtop采用了随机分配令牌的方式,为每个访问端分配一个token,保存在用户的cookie中,通过cookie带回服务端分配的token,客户端利用分配的token对请求的URL......
  • 浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程
    浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,Controller(控制器)将View(视图、用户客户端)与Model(javaBean:封装数据)分开构成了MVC,今天我们浅聊一下SpringMVC的相关组件以及通过源码了解器执行流程SpringMVC的核心组......
  • appium+python安装配置及代码测试完整流程
    1.appium安装及环境配置2.模拟器安装或者直接连接真机也可以3.手机各配置参数获取platformName'、'platformVersion'、appActivity、deviceName、webdriver.Remote 4.代码运行测试,启动手机应用5.进阶版,代码为POM模式......
  • 借助开源表单设计器,让办公流程化更顺畅!
    什么样的软件可以实现办公流程化发展?这是很多粉丝朋友问到的问题,其实,作为低代码技术平台服务商,建议大家了解下开源表单设计器,它在当前数字化转型发展的潮流中具有可观的利用价值,可以助力不同行业实现流程化发展,创造更高的市场佳绩。传统的表单制作非常单一,而且效率不高,不够灵活,也......
  • 苏宁API接口解析,实现获得suning商品详情
    要解析苏宁API接口并实现获取苏宁商品详情,你需要按照以下步骤进行操作:了解苏宁开放平台:访问苏宁开放平台官网,找到API接口相关的开发者文档、指南等信息。注册开发者账号:在苏宁开放平台上注册一个开发者账号,创建应用并获取API权限。获取API密钥:为了使用苏宁API接口,你需要获取API密钥......