点点滴滴 之 Mysql中的Change Buffer和Log Buffer
文章目录
Change Buffer
的作用
Change Buffer
是用来缓存那些在Buffer Pool
中没有的数据页中的二级缓存。Insert
,update
,delete
等操作会触发缓存动作,并且在数据页缓存进Buffer Pool
的时候,会将Change Buffer
中的数据合并到缓存的数据页
中。
Change Buffer
图解
Change Buffer
的大小
-
Change Buffer
默认占用所有缓存的25%
,最高调整到50%
- 如果当前数据库中的二级索引较少,或者数据库是一个只读数据库,可以关闭
Change Buffer
- 相反如果有大量的
update
,Delete
,Insert
操作,可以加大Change Buffer
Change Buffer
中的内容写入硬盘
- 相关数据页和
Change Buffer
合并,稍后更新的数据页会被写入硬盘 - 如果数据库是一个比较空闲的或者缓慢停机的状态,会运行清洗操作,将
change buffer
中的内容写入硬盘,清洗操作往硬盘中写入一系列的索引值
,比每次都写入索引值
更有效率 -
Change Buffer
的写入有可能非常耗时,尤其是众多的行受影响或者二级索引需要更新,在此期间,涉及到硬盘访问的查询
(数据没有被缓存)的查询,会收到很大影响 - 在事务提交之后,服务重启等也会触发
Change Buffer
写入硬盘 - 如果二级索引是倒序的,或者主键中包含降序列,不会被缓存进
Change Buffer
Log Buffer
日志缓存池用来缓存操作日志,会被存储在日志文件中
- 默认大小16M
- 如果Log Buffer足够大,就可以处理大的事务,而不需要在事务提交之前将日志写入磁盘
- 如果有
insert
,update
,delete
很多行,就可以加大Log Buffer,这样可以减少对硬盘的的I/O操