(精华)Mysql之ChangeBuffer
2024-01-11 13:57:40 7 举报
登录查看完整内容
ChangeBuffer是MySQL中用于优化InnoDB引擎的一种机制。当对表进行写操作时,ChangeBuffer会记录这些写操作,并将它们缓存起来。这样,在后续的读操作中,如果需要访问到这些被修改的数据页,可以直接从ChangeBuffer中获取,而不需要再从磁盘中读取。这样就大大提高了查询效率。但是,ChangeBuffer的大小是有限的,当缓存满时,新的写操作会将旧的操作替换出去。此外,有些情况下,如事务提交、数据页被刷新到磁盘等,也会清空ChangeBuffer。因此,虽然ChangeBuffer可以提高查询效率,但也需要合理管理其大小和缓存内容。
作者其他创作
大纲/内容
数据页
2、merge操作
SQL插入/更新/删除
缓冲池 innodb buffer pool
磁盘
更改操作
脏数据页
1、未来数据页加载到缓冲区时
Change Buffer (写缓存)
Change Buffer
未缓存数据页
为什么要引入ChangeBuffer?修改数据数据时,如果对应的数据页不在缓存区,就需要把数据页从磁盘加载到缓存区,然后进行修改。对于写多读少的场景,会产生大量的磁盘IO,影响数据库的性能。因此引入了ChangeBuffer。ChangeBufferChangeBuffer会缓存修改操作(不会立马从磁盘页上加载数据到缓存中),等到后面磁盘数据页真正被加载到缓冲区时,再进行merge操作。满足哪些条件才可以使用ChangeBuffer?- 修改的是非唯一索引;- SQL语句不需要返回变更后的数据;- 涉及的数据页不在缓存中;ChangeBuffer什么时候合并到原数据页?- 访问变更操作对应的数据页;- InnoDB后台定期Merge;- 数据库BufferPool空间不足;- 数据库正常关闭时;- RedoLog写满时;注:唯一索引的更新,如果内存中没有,也是先加载到内存中,然后更新,不会写入ChangeBuffer
更改的数据在缓存中,则直接更改数据页
已缓存数据页
更改的数据不在缓存中,则缓存更改操作到Change Buffer中
0 条评论
回复 删除
下一页