change buffer官方说明: https://dev.mysql.com/doc/refman/5.7/en/innodb-change-buffer.html change buffer官方解答: https://dev.mysql.com/doc/refman/5.7/en/faqs-innodb-change-buffer.html
设计背景:
与聚集索引不同,二级索引通常是非唯一的,像delete和update操作的二级索引树中通常都是顺序相对随机不相邻的索引页,
这样会照成大量随机I/O
工作机制:DML(insert,update,delete)操作使用到的二级索引页如果不在buffer pool中,就把它缓存到buffer pool的change buffer中。后续再进行合并操作,批量写回disk(
master thread在服务器空闲时和slow shutdown期间会合并缓冲更改)。可避免大量随机I/O注:change buffer不支持descending index,Clustered indexes,full-text indexes,spatial indexes
控制参数:
innodb_change_buffering :change buffer缓存级别有
innodb_change_buffering values include:
all 默认开启The default value: buffer inserts, delete-marking operations, and purges.
noneDo not buffer any operations.
insertsBuffer insert operations.
deletesBuffer delete-marking operations.
changes (其实update操作就是做的 inserts and delete-marking)Buffer both inserts and delete-marking operations.
purgesBuffer physical deletion operations that happen in the background.
innodb_change_buffer_max_size:change buffer是buffer pool中一块区域,5.6版本后默认大小是buffer pool的25%,参数
innodb_change_buffer_max_size
控制。注:在内存中,
change buffer占用buffer pool的一部分。在磁盘上,
change buffer是system tablespace的一部分,当数据库服务器关闭时,索引更改将在其中缓冲。
使用监控
mysql> SHOW ENGINE INNODB STATUS\G ------------------------------------- INSERT BUFFER AND ADAPTIVE HASH INDEX ------------------------------------- Ibuf: size 1, free list len 0, seg size 2, 0 merges #size:change buffer中使用的页数。change buffer大小等于seg size-(1+free list len) #1+表示change buffer header page使用 seg size:更改缓冲区的大小,以页为单位。 merged operations: insert 0, delete mark 0, delete 0 discarded operations: insert 0, delete mark 0, delete 0 Hash table size 4425293, used cells 32, node heap has 1 buffer(s) 13577.57 hash searches/s, 202.47 non-hash searches/s
change buffer 占用率
mysql> SELECT (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE WHERE PAGE_TYPE LIKE 'IBUF%') AS change_buffer_pages, (SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE) AS total_pages, (SELECT ((change_buffer_pages/total_pages)*100)) AS change_buffer_page_percentage; +---------------------+-------------+-------------------------------+ | change_buffer_pages | total_pages | change_buffer_page_percentage | +---------------------+-------------+-------------------------------+ | 25 | 8192 | 0.3052 | +---------------------+-------------+-------------------------------+
编辑推荐:
- Innodb特性之change buffer03-01
- 16.1.3 使用GTID 配置复制03-01
- MySQL性能测试初试(1)--sysbench03-01
- mydumper使用及原理浅析03-01
- Innodb特性之Read-Ahead(Buffer Pool Prefetching)03-01
- 921A整板03-01
- Mysql系列第二十一讲 mysql索引原理详解03-01
- 7.5 使用binary log 做基于时间点的恢复03-01
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
