
MySQL 8.0中InnoDB buffer pool size进度更透明
MySQL 8.0 up up up~
从MySQL 5.7开始,支持在线动态调整 innodb buffer pool,并为此新增了一个状态变量 Innodb_buffer_pool_resize_status
,可以通过观察它了解调整buffer pool过程中的一些状态,例如 Resizing also other hash tables.
或 Completed resizing buffer pool at 230131 15:57:03.
。
从8.0.31开始,针对innodb buffer pool在线动态resize特性,新增了下面两个状态变量,可以更方便透明观察resize的进度:
状态变量 | 解释 |
Innodb_buffer_pool_resize_status_code | buffer pool resize状态码,共有以下几种不同值: - 0: No Resize operation in progress - 1: Starting Resize - 2: Disabling AHI (Adaptive Hash Index) - 3: Withdrawing Blocks,清除/降低buffer pool pages(主要针对buffer pool缩小的情况) - 4: Acquiring Global Lock - 5: Resizing Pool - 6: Resizing Hash - 7: Resizing Failed |
Innodb_buffer_pool_resize_status_progress | 报告当前resize的进度,用百分比进度条方式展示,数值范围从0-100 |
我们可以通过 Innodb_buffer_pool_resize_status_code
报告的状态码,了解当前的状态,以及是否出现报错等情况。
状态变量 Innodb_buffer_pool_resize_status_progress
可以实时查看当前resize的百分比进度,当有多个buffer pool instance时,每完成一个instance resize,该值就会更新一次。每当 Innodb_buffer_pool_resize_status_code
状态码变化一次,则 progress 的进度百分比会被重置为0,重新开始。当整个buffer pool都resize完成后,最终显示100。
接下来,我们找个正在跑sysbench压测中的实例,对其在线调整buffer pool看看这几个状态变量分别是怎样的。压测期间,在另一个窗口跑下面的命令观察:
此外,还可以从日志文件中查看详细过程:
结合上一篇文章 MySQL 8.0不再担心被垃圾SQL搞爆内存,可以看到MySQL 8.0在各个细节方面做的是越来越好了。
延伸阅读
- Configuring InnoDB Buffer Pool Size,https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool-resize.html
- Changes in MySQL 8.0.31,https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-31.html
- statvar_Innodb_buffer_pool_resize_status_code,https://dev.mysql.com/doc/refman/8.0/en/server-status-variables.html
文章转载自公众号:GreatSQL社区
