前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 8.0中InnoDB buffer pool size进度更透明

MySQL 8.0中InnoDB buffer pool size进度更透明

作者头像
老叶茶馆
发布于 2023-02-18 09:36:14
发布于 2023-02-18 09:36:14
47600
代码可运行
举报
运行总次数:0
代码可运行

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看看这几个状态变量分别是怎样的。压测期间,在另一个窗口跑下面的命令观察:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ while [ 1 ] ; do mysqladmin ext | grep -i Innodb_buffer_pool_resi | sed 's/ //g'; sleep 0.5; echo ; echo; done
...
|Innodb_buffer_pool_resize_status|bufferpool7:withdrawingblocks.(112590/122869)|
|Innodb_buffer_pool_resize_status_code|3|
|Innodb_buffer_pool_resize_status_progress|0|
...
|Innodb_buffer_pool_resize_status|bufferpool7:resizingwithchunks16to1.|
|Innodb_buffer_pool_resize_status_code|5|
|Innodb_buffer_pool_resize_status_progress|87|
...
|Innodb_buffer_pool_resize_status|Completedresizingbufferpoolat2302029:58:50.|
|Innodb_buffer_pool_resize_status_code|0|
|Innodb_buffer_pool_resize_status_progress|100|

此外,还可以从日志文件中查看详细过程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
09:56:20.275388+08:00 30 .. Resizing buffer pool from 17179869184 to 8589934592 (unit=134217728). (new size: 8589934592 bytes)
09:56:20.275397+08:00 0 .. Status code 1: Resizing buffer pool from 17179869184 to 8589934592 (unit=134217728).
09:56:20.275417+08:00 0 .. Status code 1: 12% complete
09:56:20.275422+08:00 0 .. Status code 1: 25% complete
...
09:56:20.275439+08:00 0 .. Status code 1: 100% complete
09:56:20.275443+08:00 0 .. Status code 1: Completed
09:56:20.275446+08:00 0 .. Status code 2: Disabling adaptive hash index.
09:56:20.286907+08:00 0 .. disabled adaptive hash index.
09:56:20.286939+08:00 0 .. Status code 2: 12% complete
09:56:20.286943+08:00 0 .. Status code 2: 25% complete
...
09:56:20.286963+08:00 0 .. Status code 2: 100% complete
09:56:20.286966+08:00 0 .. Status code 2: Completed
09:56:20.286970+08:00 0 .. Status code 3: Withdrawing blocks to be shrunken.
09:56:20.286974+08:00 0 .. buffer pool 0 : start to withdraw the last 65530 blocks.
09:56:20.288848+08:00 0 .. Status code 3: buffer pool 0 : withdrawing blocks. (52526/65530)
09:56:20.288865+08:00 0 .. buffer pool 0 : withdrew 52512 blocks from free list. Tried to relocate 14 pages (52526/65530).
...
09:56:20.288934+08:00 0 .. Status code 3: buffer pool 0 : withdrawing blocks. (52526/65530)
09:56:20.288937+08:00 0 .. buffer pool 0 : withdrew 0 blocks from free list. Tried to relocate 0 pages (52526/65530).
09:56:20.288941+08:00 0 .. buffer pool 0 : will retry to withdraw later.
09:56:20.288951+08:00 0 .. buffer pool 1 : start to withdraw the last 65530 blocks.
09:56:20.290815+08:00 0 .. Status code 3: buffer pool 1 : withdrawing blocks. (53263/65530)
09:56:20.290824+08:00 0 .. buffer pool 1 : withdrew 53249 blocks from free list. Tried to relocate 14 pages (53263/65530).  -- 尝试释放buffer pages失败,将继续重试
...
09:56:27.305382+08:00 0 .. buffer pool 7 : withdrew 0 blocks from free list. Tried to relocate 0 pages (54852/65530).
09:56:27.305385+08:00 0 .. buffer pool 7 : will retry to withdraw later.
09:56:27.305388+08:00 0 .. Will retry to withdraw 8 seconds later.
09:56:29.047052+08:00 0 .. Page cleaner took 12405ms to flush 83911 and evict 0 pages
09:56:35.305806+08:00 0 .. buffer pool 0 : start to withdraw the last 65530 blocks.
09:56:35.333782+08:00 0 .. Status code 3: buffer pool 0 : withdrawing blocks. (65530/65530)
09:56:35.333813+08:00 0 .. buffer pool 0 : withdrew 0 blocks from free list. Tried to relocate 13004 pages (65530/65530).
09:56:35.334245+08:00 0 .. buffer pool 0 : withdrawn target 65530 blocks.
09:56:35.334253+08:00 0 .. Status code 3: 12% complete
...
09:56:35.515813+08:00 0 .. Status code 3: 100% complete
09:56:35.515817+08:00 0 .. Status code 3: Completed
09:56:35.515821+08:00 0 .. Status code 4: Latching whole of buffer pool.
09:56:35.515824+08:00 0 .. Status code 4: 14% complete
09:56:35.515827+08:00 0 .. Status code 4: 28% complete
09:56:35.515838+08:00 0 .. Status code 4: 42% complete
09:56:35.515842+08:00 0 .. Status code 4: 57% complete
09:56:35.515845+08:00 0 .. Status code 4: 71% complete
09:56:35.515848+08:00 0 .. Status code 4: 85% complete
09:56:35.515851+08:00 0 .. Status code 4: 100% complete
09:56:35.515862+08:00 0 .. Status code 4: Completed
09:56:35.515865+08:00 0 .. Status code 5: Starting pool resize
09:56:35.515868+08:00 0 .. Status code 5: buffer pool 0 : resizing with chunks 16 to 8.
09:56:35.533458+08:00 0 .. buffer pool 0 : 8 chunks (65530 blocks) were freed.
09:56:35.533477+08:00 0 .. Status code 5: 12% complete
...
09:56:35.639495+08:00 0 .. Status code 5: buffer pool 7 : resizing with chunks 16 to 8.
09:56:35.655714+08:00 0 .. buffer pool 7 : 8 chunks (65530 blocks) were freed.
09:56:35.655732+08:00 0 .. Status code 5: 100% complete
09:56:35.655746+08:00 0 .. Completed to resize buffer pool from 17179869184 to 8589934592.
09:56:35.655750+08:00 0 .. Re-enabled adaptive hash index.
09:56:35.655755+08:00 0 .. Status code 5: Completed
09:56:35.655758+08:00 0 .. Status code 0: Completed resizing buffer pool at 230202  9:56:35.
09:56:35.655761+08:00 0 .. Status code 0: 100% complete

结合上一篇文章 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

Enjoy MySQL 8.0 :)


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老叶茶馆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL 5.7 新特性之四
本系列文章基于5.7.20 版本讲述MySQL的新特性。从安装,文件结构,SQL ,优化 ,运维层面 复制,GITD等几个方面展开介绍5.7 的新特性和功能。同时也建议大家跟踪官方blog和官方文档,以尽快知悉其新的变化。前面写了一篇文章介绍 innodb 的特性,囿于相关知识点比较多 ,本文继续介绍5.7版本的innodb 新特性。
用户1278550
2018/08/09
7590
Innodb Buffer Pool详解
导读 数据库为了高效读取和存储物理数据,通常都会采用缓存的方式来弥补磁盘IO与CPU运算速度差。InnoDB 作为一个具有高可靠性和高性能的通用存储引擎也不例外,Buffer Pool就是其用来在内存中缓存数据页面的结构。本文将基于MySQL-8.0.22源码,从buffer pool结构、buffer pool初始化、buffer pool管理、页面读取过程、页面淘汰过程、buffer pool加速等方面介绍buffer pool的实现原理。 第一部分、Buffer pool结构 Buffer pool不
腾讯数据库技术
2023/01/30
1.5K0
Innodb Buffer Pool详解
MySQL 8.0 小版本更新要点,那个小版本更稳定(8.0.24-8.0.37)
最近撰写 MySQL 的文章出现错误,实在抱歉 1 是犯了常识性的错误,主要知识未更新完全,对于 MySQL 的老观念还存在,新的一些特性并未梳理 2 未做详实的实验并验证某些论断 以此作为一个教训,后续对于任何数据库的新的概念要及时更新,并尽力在有精力的情况下,做相关的严谨的测试。最近会分几期梳理 MySQL 8.01-8.038在数据库版本更新中的一些核心更新的信息汇总,方便大家进行查询。信息从官方文档 中获得 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-0.html
AustinDatabases
2024/07/04
1.2K0
MySQL 8.0 小版本更新要点,那个小版本更稳定(8.0.24-8.0.37)
MySQL innodb_buffer_pool_size参数优化
在MySQL5.5之前,默认使用的存储引擎是MyISAM。MyISAM使用操作系统缓存来缓存数据。InnoDB需要innodb buffer pool中处理缓存, 数据读写在内存中进行, 减少了对磁盘的读写,接着当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。所以InnoDB buffer pool空间是否足够会整体影响MySQL的性能。通过实验验证,innodb_buffer_pool_size并不是设置的越大越好。设置的过大,会导致system的swap空间被占用,导致操作系统变慢,从而减低sql查询的效率。
Power
2025/03/01
1940
MySQL: 深入解析InnoDB参数配置
MySQL的InnoDB存储引擎提供了一系列的参数配置,以便数据库管理员可以根据具体的应用场景和硬件环境来优化数据库的性能。在本文中,我们将通过SHOW STATUS LIKE 'InnoDB%'命令输出的参数,深入解析这些参数的含义和配置方法,以帮助理解如何配置MySQL InnoDB参数。
运维开发王义杰
2023/10/23
1.1K0
MySQL: 深入解析InnoDB参数配置
MySQL 8.0 InnoDB 的统计信息机制优化
MySQL 的InnoDB引擎会维护着用户表每个索引的统计信息,来帮助查询优化器选择最优的执行计划,详细的来说,key的分布情况能决定多表join的顺序,也能够决定查询使用哪一个索引。这些统计信息可以由专门的后台线程刷新,也可以由用户也可以显示的调用Analyze table的命令来刷新统计信息,本文基于最新的 MySQL 8.0 来具体分析一下刷新统计信息的具体实现。
用户1278550
2024/01/04
4210
MySQL 8.0 InnoDB 的统计信息机制优化
InnoDB Buffer Pool巧配置全解
InnoDB 维护了一个缓存数据和索引信息到内存的存储区叫做 Buffer Pool,它会将最近访问的数据缓存到缓冲区。我们通过配置各个 Buffer Pool 的参数,可以显著提高 MySQL 的性能。
wubx
2019/02/27
2.4K0
Mysql优化系列(1)--Innodb引擎下mysql自身配置优化
1.简单介绍 InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。 2.之所以选用innodb作为存储引擎的
洗尽了浮华
2018/01/23
2.6K0
6 mysql底层解析——缓存,Innodb_buffer_pool,包括连接、解析、缓存、引擎、存储等
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
天涯泪小武
2019/09/18
1.5K0
6 mysql底层解析——缓存,Innodb_buffer_pool,包括连接、解析、缓存、引擎、存储等
MySQL中的InnoDB 体系结构(中)
在开始这部分内容之前,我们需要理清buffer和cache的差别,因为在数据库层面会有大量的buffer和cache的术语,我们在学习的时候非常容易混淆。
jeanron100
2019/03/07
1.4K0
MySQL中的InnoDB 体系结构(中)
Percona 8.0.30中"show engine innodb status"导致coredump排查及分析
GreatSQL合并Percona-Server 8.0.30的Beta版测试中,QA报了一个crash的bug:
老叶茶馆
2023/09/01
2800
Percona 8.0.30中"show engine innodb status"导致coredump排查及分析
MySQL 8.0.30动态redo log初探
MySQL从5.7版本开始支持在线动态修改 innodb_buffer_pool_size,8.0开始支持在线添加undo表空间,以及临时表空间的自动回收,真的是越来越方便了。
老叶茶馆
2022/12/02
5810
mysql 迁移5
更新slave mysql版本 [root@slave02 src]# rpm -e Percona-Server-client-51-5.1.73-rel14.11.603.rhel6.x86_64 Percona-Server-server-51-5.1.73-rel14.11.603.rhel6.x86_64 Percona-Server-shared-51-5.1.73-rel14.11.603.rhel6.x86_64 error: Failed dependencies: mysql is
franket
2022/03/21
5680
一条命令解读InnoDB存储引擎—show engine innodb status
InnoDB是MySQL使用最多的存储引擎,通常InnoDB状态可以通过show engine innodb status\G查看。
MySQL轻松学
2019/05/13
13.9K0
MySQL 5.7 统计表记录数执行效率对比分析
墨墨导读:MySQL在统计表记录数时,指定使用主键查询反而慢,在执行效率上进行对比分析。
数据和云
2020/07/15
2.7K0
详解MySQL中的Buffer Pool,深入底层带你搞懂它!
Buffer Pool 是什么?从字面上看是缓存池的意思,没错,它其实也就是缓存池的意思。它是 MySQL 当中至关重要的一个组件,可以这么说,MySQL的所有的增删改的操作都是在 Buffer Pool 中执行的。
Java程序猿
2021/05/27
6.3K1
Mysql上线后优化项
mysql> show variables like 'max_connections';
子润先生
2021/07/12
4010
MySQL内核InnoDB存储引擎详解
MySQL从5.5版本开始将InnoDB作为默认存储引擎,该存储引擎是第一个完整支持事务ACID特性的存储引擎,且支持数据行锁,多版本并发控制(MVCC),外键,以及一致性非锁定读。 作为默认存储引擎,也就意味着默认创建的表都会使用此存储引擎,除非 使用ENGINE=参数指定创建其他存储引擎的表。
星哥玩云
2022/08/17
3.3K0
MySQL内核InnoDB存储引擎详解
TDSQL-C Serverless 如何“弹”得更稳?
云原生数据库 TDSQL-C 使用计算存储分离的架构,计算资源和存储资源解耦,可以提供PB级的存储容量供用户按需使用。而 Serverless 架构是将计算资源做到极致弹性,和购买的实例规格解耦,根据用户数据库实际的负载,自动启停和自动扩缩容,按使用计费。其中计算资源主要是 CCU(CPU+内存),CPU 可以由 cgroup 或者 docker 等技术限制,内存分配给数据库进程,大部分由 Buffer Pool 模块使用,目的是缓存用户数据,Buffer Pool 内存的分配与释放过程涉及用户数据的分布,搬迁,还有内核中全局资源的互斥等等。本文将详细介绍 TDSQL-C Serverless 在内核做的一系列优化,让数据库弹得更稳。
腾讯云数据库 TencentDB
2023/08/10
3400
TDSQL-C Serverless 如何“弹”得更稳?
MySQL误删除文件场景
同事反馈说某个测试的MySQL数据库误删除了ibdata1文件,导致库启动不了,而且没做备份,能不能恢复?
bisal
2023/11/04
4260
相关推荐
MySQL 5.7 新特性之四
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档