MySQL 运维实战课
张新铭(俊达)
云掣科技资深数据库专家,前淘宝网、支付宝数据库专家
918 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 29 讲/共 41 讲
MySQL 运维实战课
15
15
1.0x
00:00/00:00
登录|注册

27|InnoDB Buffer Pool 如何提高数据库性能?(上)

你好,我是俊达。
从前两讲中,我们知道了 InnoDB 表和索引的物理存储格式。执行 Select 语句的时候,最终会从 ibd 文件中获取数据,执行 Insert/Update/Delete 语句的时候,最终会将数据写入到 ibd 文件。读取或修改 ibd 文件中的数据时,都需要先将数据页缓存到 InnoDB Buffer Pool 中。这主要是因为访问内存的响应时间比访问磁盘要低几个数量级,将数据页缓存在 Buffer Pool 中再操作,可以减少磁盘的访问次数,提升性能。
那么数据页是怎么加载到 Buffer Pool 中,又是怎么写回到 ibd 文件中的,缓存页在 Buffer Pool 中是怎么组织的?这就是这一讲中我们要学习的内容。
另外,Buffer Pool 中还有一些用来提升性能和保证数据一致性的结构,包括 Change Buffer、自适应 Hash 索引、Double Write Buffer,对这些结构我们也会做一些介绍。

InnoDB Buffer Pool

InnoDB 将数据存储在表空间中,读取或写入数据时,需要先将数据从文件加载到内存中。InnoDB 分配了专门的内存来缓存表空间中的数据(包括表、索引以及回滚段等),这一块内存称为 Buffer Pool。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. InnoDB Buffer Pool是用来缓存表空间中的数据的专门内存,通过减少磁盘访问次数来提升数据库的读写性能。 2. Buffer Pool中的缓存页和数据页的大小一致,每个缓存页都有一个对应的控制块记录缓存页的相关信息,包括页面编号、访问情况和是否被修改。 3. InnoDB Buffer Pool由1个或多个实例组成,每个实例中存在多个链表结构,包括FREE链表、LRU链表、FLUSH链表等,用于管理缓存页的加载、淘汰和刷新。 4. 引入多个Buffer Pool实例是为了减轻大内存Buffer Pool存在的资源争用,适当增加innodb_buffer_pool_instances可以提高数据库的整体性能。 5. Buffer Pool中的Hash表通过hash算法将页面映射到不同的Hash桶中,每个Hash桶内的链表节点数较少,可以快速查找缓存页。 6. Buffer Pool中还包括一些用来提升性能和保证数据一致性的结构,包括Change Buffer、自适应Hash索引、Double Write Buffer等。 7. InnoDB使用Buffer Pool主要是为了提升数据库性能,合并写入操作,以及保证事务的ACID属性。 8. 首次访问一个数据页时,要分配一个空闲的缓存页,InnoDB空闲页都链接到free链表中。随着数据库持续运行,当所有的页面都已经被使用后,需要淘汰一个现有的缓存页。 9. 首次访问数据页时,需要发起IO操作,从文件读取数据,缓存到Buffer Pool中。InnoDB使用了异步IO读取数据,大致上可以分为几个步骤。 10. 执行DML修改数据时,会先修改Buffer Pool中的缓存页,事务提交时,脏页会异步刷新到磁盘。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • binzhang
    思考题: 对于drop的表和索引没有必要同步刷脏页和清理非脏页。mysql 可以在内存里或者文件头记录该space ID是否被drop了。可以采用异步的方式 刷脏页线程遇见drop table/index的脏页直接抛弃。新创建一个线程专门异步处理lru中的非脏页。 这样drop 超级大的表也可以很快结束。
    2024-10-23归属地:美国
  • binzhang
    思考题: 关于表和索引被drop的时候要不要刷脏页回磁盘。感觉没有必要。数据库可以在内存里或文件头部记录被drop对象的space ID ,刷脏页进程 可以直接抛弃该space ID的内存页。 buffer pool中的非脏页可以设计一个新的后台进程yi
    2024-10-23归属地:美国
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部