广告
返回顶部
首页 > 资讯 > 数据库 >InnoDB Buffer Pool
  • 461
分享到

InnoDB Buffer Pool

InnoDBBufferPool 2021-12-25 04:12:30 461人浏览 才女
摘要

Buffer Pool本质上是InnoDB向操作系统申请的一段连续的内存空间,可以通过innodb_buffer_pool_size来调整它的大小。 Buffer Pool内部组成:Buffer Pool向操作系统申请的连续内存由控制块和缓

InnoDB Buffer Pool

Buffer Pool本质上是InnoDB向操作系统申请的一段连续的内存空间,可以通过innodb_buffer_pool_size来调整它的大小。

Buffer Pool内部组成:Buffer Pool向操作系统申请的连续内存由控制块和缓存页组成,每个控制块和缓存页都是一一对应的,在填充足够多的控制块和缓存页的组合后,Buffer Pool剩余的空间可能产生不够填充一组控制块和缓存页,这部分空间不能被使用,也被称为碎片。InnoDB使用了许多链表来管理Buffer Pool。

Free链表:free链表中每一个节点都代表一个空闲的缓存页,在将磁盘中的页加载到Buffer Pool时,会从free链表中寻找空闲的缓存页。

链表基节点Mysql通过基节点管理free链表,mysql为基节点单独申请了40字节的空间,不包含在Buffer Pool内

缓存页查询与定位:为了快速定位某个页是否被加载到Buffer Pool,使用表空间号 + 页号作为key,缓存页作为value,建立哈希表。

Flush链表:在Buffer Pool中被修改的页称为脏页,脏页并不是立即刷新到磁盘上,而是被加入到flush链表中,待之后的某个时刻同步到磁盘上。

LRU链表:通过最近最少使用原则淘汰缓存页,释放缓存空间,使用到某个缓存页,就把该缓存页调整到LRU链表头部,尾部为最近最少使用缓存页。

InnoDB预读机制

  1. 线性预读,顺序访问某个区的页面超过了系统变量的值,就会触发一次异步读取下一区中全部页面到Buffer Pool的请求。
  2. 随机预读:随机缓存了某个区的13个连续页面,会触发异步读取本区所有页面到Buffer Pool的请求。
  3. 预读可能造成的问题:预读的无用页都加载到了Buffer Pool,导致有用的页被挤到链表尾部淘汰掉了。还有一种可能就是全表扫描,表中记录很多,占用的页很多,导致这些页也加载到Buffer Pool,挤掉有用的缓存页。
  4. 应对方法:LRU链表分为(young区域 | 热数据:使用频率非常高的缓存页)和(old区域 | 冷数据:使用频率不高的缓存页),可以通过innodb_old_bloc ks_pct来调节old区域所占的比例。首次从磁盘上加载到Buffer Pool的页会被放到old区域的头部,在innodb_old_blocks_time间隔时间内访问该页不会把它移动到young区域头部。在Buffer Pool没有可用的空闲缓存页时,会首先淘汰掉old区域的一些页。
  5. 为了减少young链表频繁移动的开销,只有访问的缓存页位于young区域的后四分之三位置才能提升性能。

其他的一些链表

  1. unzip LRU链表:管理解压页
  2. zip clean链表:管理未解压页
  3. zip free数组:每个元素都代表一个链表

数据库后台专门线程负责将LRU链表尾部的部分脏页和Flush链表中的脏页刷新到磁盘。

Buffer Pool特别大且多线程并发访问量高,单一的Buffer Pool可能会影响请求的处理速度,因此当Buffer Pool特别大的时候,可以把它们拆分成若干小的Buffer Pool,可以通过指定innodb_buffer_pool_instances来控制Buffer Pool实例的个数,每个Buffer Pool实例中都有各自独立的链表,互不干扰。

自Mysql 5.7.5版本之后,可以在服务器运行过程中调整Buffer Pool大小。每个Buffer Pool实例由若干个chunk组成,每个chunk的大小可以在服务器启动时通过启动参数调整。由于基节点的原因,实际空间比chunk要大5%。

innodb_buffer_pool_size必须是innodb_buffer_pool_chunk_size × innodb_ buffer_pool_instances的倍数,且MySQL会根据一定的逻辑自动调节大小

查看Buffer Pool的状态信息:SHOW ENGINE INNODB STATUSG

您可能感兴趣的文档:

--结束END--

本文标题: InnoDB Buffer Pool

本文链接: https://www.lsjlt.com/news/6304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • InnoDB Buffer Pool
    Buffer Pool本质上是InnoDB向操作系统申请的一段连续的内存空间,可以通过innodb_buffer_pool_size来调整它的大小。 Buffer Pool内部组成:Buffer Pool向操作系统申请的连续内存由控制块和缓...
    99+
    2021-12-25
    InnoDB Buffer Pool
  • Configuring InnoDB Buffer Pool
    翻译自5.7官方文档InnoDB performs certain tasks in the background, including flushing of dirty pages (those pag...
    99+
    2022-10-18
  • mysql 5.5 -- innodb buffer pool优化
    InnoDB buffer pool 被设为两个SUBLIST:一个是存放大部分查询所需用到的块;另一个是存放小量查询所需用到的块;并可以被回收;[@more@]The InnoDB buffer pool...
    99+
    2022-10-18
  • innodb新特性之buffer pool预热
    背景 innodb buffer pool做为innodb最重要的缓存,其缓存命中率的高低会直接影响数据库的性能。因此在数据库发生变更,比如重启、主备切换实例迁移等等,innodb buffer pool ...
    99+
    2022-10-18
  • MySQL性能优化InnoDB buffer pool flush分析
    这篇文章主要讲解了“MySQL性能优化InnoDB buffer pool flush分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL性能优化I...
    99+
    2022-10-18
  • 怎么给从库热数据innodb buffer pool
    本篇内容介绍了“怎么给从库热数据innodb buffer pool”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2022-10-18
  • MySQL管理之道-笔记-InnoDB Buffer Pool预热改进
    InnoDB Buffer Pool预热改进 InnoDB Buffer Pool预热改进只支持MySQL5.7和Percona5.7数据库重启时,如何将之前频繁访问的数据加载回BUFFER中?MySQL5...
    99+
    2022-10-18
  • mysql的buffer pool 和 change buffer
    线上三张图吧:   一、innodb系统架构图  mysql的buffer pool 和 change buffer原文地址:https://www.cnblogs.com/mmh760/p/13500691.html...
    99+
    2016-11-06
    mysql的buffer pool change buffer 数据库入门 数据库基础教程 数据库 mysql
  • MySql InnoDB存储引擎之Buffer Pool运行原理讲解
    目录1. 前言2. Buffer Pool2.1 Buffer Pool结构2.2 Free链表2.3 缓冲页哈希表2.4 Flush链表2.5 LRU链表2.6 多个实例2.7 Buffer Pool状态信息3. 总结...
    99+
    2023-01-04
    MySql InnoDB存储引擎Buffer Pool MySql InnoDB MySql InnoDB Buffer Pool
  • MySql InnoDB存储引擎之Buffer Pool运行原理讲解
    目录1. 前言2. Buffer Pool2.1 Buffer Pool结构2.2 Free链表2.3 缓冲页哈希表2.4 Flush链表2.5 LRU链表2.6 多个实例2.7 B...
    99+
    2023-01-04
    MySql InnoDB存储引擎Buffer Pool MySql InnoDB MySql InnoDB Buffer Pool
  • InnoDB change buffer
    InnoDB change buffer 一种重要的数据变更日志Change buffer的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果。在MySQL5.5之前...
    99+
    2022-10-18
  • innodb新特性之怎么使用buffer pool动态调整大小
    这篇文章主要介绍“innodb新特性之怎么使用buffer pool动态调整大小”,在日常操作中,相信很多人在innodb新特性之怎么使用buffer pool动态调整大小问题上存在疑惑,小编查阅了各式资料...
    99+
    2022-10-18
  • MySQL Buffer pool里的change buffer是什么
    小编给大家分享一下MySQL Buffer pool里的change buffer是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一...
    99+
    2022-10-18
  • MySQ的Buffer pool是什么
    这篇文章主要介绍“MySQ的Buffer pool是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQ的Buffer pool是什么”文章能帮助大家解决问题...
    99+
    2022-10-19
  • 如何理解MySQL的Buffer Pool
    本篇内容介绍了“如何理解MySQL的Buffer Pool”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前...
    99+
    2022-10-18
  • MySQL的查询缓存和Buffer Pool
    一、Caches - 查询缓存 下图是MySQL官网给出的:MySQL架构体系图。 人们常说的查询缓存就是下图中的Cache部分。 如果将MySQL分成 Server层和存储引擎层两大部分,那么Caches位于Ser...
    99+
    2022-05-22
    MySQL 查询缓存 MySQL buffer pool
  • 怎么配置MySQL内存buffer pool
    本篇内容介绍了“怎么配置MySQL内存buffer pool”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • Mysql 8.0 之调整 innodb buffer
    innodb_buffer_pool_size参数 这是一个内存区域,用来缓存InnoDB存储引擎的表中的数据和索引数据,以便提高对InnoDB存储引擎表中数据的查询访问速度。InnoDB buffer pool 里包含: 数据缓存 Inn...
    99+
    2023-09-25
    数据库 mysql
  • 详解MySQL中的缓冲池(buffer pool)
    Mysql 中数据是要落盘的,这点大家都知道。读写磁盘速度是很慢的,尤其和内存比起来更是没的说。但是,我们平时在执行 SQL 时,无论写操作还是读操作都能很快得到结果,并没有预想中的那么慢。 可能你会说我有索引啊,有...
    99+
    2022-05-16
    MySQL 缓冲池 MySQL buffer pool
  • MySQL中Buffer Pool内存结构详情
    目录1、回顾一下Buffer Pool是个什么东西?1.1 增删改直接操作的是内存还是磁盘?1.2 数据库崩溃了,内存中数据丢了怎么办?1.3 Buffer Pool的一句话总结2、Buffer Pool这个内存数据结构...
    99+
    2022-09-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作