加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.52wenzhou.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中的changebuffer是啥

发布时间:2022-01-17 13:24:56 所属栏目:MySql教程 来源:互联网
导读:mysql中的change buffer是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 首先:正常insert的时候,也是首先要判断哪个物理页(包括数据页和索引页)可以insert,然后
       mysql中的change buffer是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
 
       首先:正常insert的时候,也是首先要判断哪个物理页(包括数据页和索引页)可以insert,然后把这个物理块读取到buffer pool,然后再在内存执行insert 操作,然后再刷新到磁盘;
 
       综上所述 cahnge buffer 性能的提升在于两点:
 
一:当需要修改的索引页不在buffer pool的时候,不需要先把索引页读取到buffer pool,这里减少了io
 
二:将多个索引叶子的dml操作合并到一个操作里(因为在一个索引页中),批量merge,这里也提高了性能;
 
1)change buffer的内容
 
Change Buffer是一种特殊的数据结构,缓存对二级索引页面的更改并且这些页面不在Buffer Pool中(注意缓存的是对索引叶子的修改,而不是具体的索引叶子)。缓存的changes可能由 Insert 、Delete 和 Update的结果导致。稍后在页面被其他读取操作加载到Buffer Pool的时候合并,
 
简而言之:Change buffer的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果。
 
3)change buffer 只针对辅助索引而言
 
对主键索引无效;对辅助索引叶子节点的更改才可能借助change buffer ,如果该列上没有索引,那么就不会借助change buffer了!
 
4)缓冲池有change buffer 信息固然不错,但他不是单纯是缓存池的一部分,change buffer 和数据页一样,change buffer 是一个B+树,放在共享表空间,默认也就是idbata1,向change buffer 写数据也是需要随机io,但有change buffer后,当buffer 中没有需要修改的叶子块的时候,你不需要把叶子块读进innodb_buffer_cahce中(减少的就是这里的io)只需要把改变写进cahnge buffer即可,然后cahnge buffer中排序最后等待和真正的叶子节点数据合并!批量合并!所以如果更新操作不频繁的时候,并且更新后立马需要读取该页的时候,change buffer 的机制会增加部分io消耗! change buffer 减少了从内存读取硬盘的随机读IO(数据页)操作,换做成批量顺序merge,redo log减少了随机写log操作
 
5).之所以需要满足索引是辅助索引,并且是非唯一的
 
因为在插入缓冲时,数据库并不去查找索引页来判断插入的记录的唯一性,如果去查找肯定又会有离散读取的情况发生(随机io),从而导致change buffer 失去意义!
 
6) change buffer的相关参数
 
1 innodb_change_buffering 默认是all支持所有DML操作
 
2 innodb_change_buffer_max_size,默认是25,即缓冲池的1/4。最大可设置为50,采用默认即可
 
7). 除了数据页被访问,还有哪些场景会触发刷写缓冲中的数据呢?
 
还有这么几种情况,会刷写缓冲中的数据:
 
(1)有一个后台线程,会认为数据库空闲时;
 
(2)数据库缓冲池不够用时;
 
(3)数据库正常关闭时;
 
(4)redo log写满时;
 
画外音:几乎不会出现redo log写满,此时整个数据库处于无法写入的不可用状态。
 
10)什么业务场景,适合开启InnoDB的写缓冲机制?
 
先说什么时候不适合,如上文分析,当:
 
(1)数据库都是唯一索引;
 
(2)或者,写入一个数据后,会立刻读取它;
 
这两类场景,在写操作进行时(进行后),本来就要进行进行页读取,本来相应页面就要入缓冲池,此时写缓存反倒成了负担,增加了复杂度。
 
什么时候适合使用写缓冲,如果:
 
(1)数据库大部分是非唯一索引;
 
(2)业务是写多读少,或者不是写后立刻读取;
 
可以使用写缓冲,将原本每次写入都需要进行磁盘IO的SQL,优化定期批量写磁盘。
 
画外音:例如,账单流水业务。
 
看完上述内容是否对您有帮助呢?

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读