Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MySQL 案例:如何监控DDL

MySQL 案例:如何监控DDL

原创
作者头像
王文安@DBA
修改于 2022-02-22 09:25:32
修改于 2022-02-22 09:25:32
1.6K0
举报

背景

经常会有用户在咨询大表 DDL 的进度,预估时间等信息,其实依靠经验来做判断的话,比较容易出现误差,而且也和评估人的实际评估手段有较大的关系。事实上 MySQL 本身就有 DDL 的监控手段吗,只是默认情况没有进行开启。

实践一下

测试环境使用了腾讯云数据库 MySQL 5.7,官方的 MySQL 8.0,5.7 版本基本同理。首先需要打开performance_schema(腾讯云 MySQL 需要留意是否开启了这个参数),然后在setup_instruments表中开启 alter 操作对应的监控项以及p_f(performance_schema)对应的表。使用如下操作开启:

代码语言:txt
AI代码解释
复制
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';

测试使用的表:

代码语言:txt
AI代码解释
复制
CREATE TABLE `sbtest1` (
  `id` int NOT NULL AUTO_INCREMENT,
  `k` int NOT NULL DEFAULT '0',
  `c` char(120) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
  `pad` char(60) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k_1` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

测试的对象语句:

代码语言:txt
AI代码解释
复制
alter table sbtest.sbtest1 modify c varchar(128)  NOT NULL DEFAULT '';

因为开启了 p_f 的参数,所以现在能在内存表里面看到具体的数据了:

代码语言:txt
AI代码解释
复制
mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current;
+-----------------------------+----------------+----------------+
| EVENT_NAME                  | WORK_COMPLETED | WORK_ESTIMATED |
+-----------------------------+----------------+----------------+
| stage/sql/copy to tmp table |         309523 |        9863083 |
+-----------------------------+----------------+----------------+
1 row in set (0.00 sec)

WORK_COMPLETED 表示已经完成的“工作量”,WORK_ESTIMATED表示预计的总工作量,所以评估 DDL 操作的进度的时候可以用两个指标来判断整体的进度。预估时间的时候,可以参考如下语句进行简单的估算:

代码语言:txt
AI代码解释
复制
mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current;select sleep(5);SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED FROM performance_schema.events_stages_current;

+-----------------------------+----------------+----------------+

| EVENT_NAME                  | WORK_COMPLETED | WORK_ESTIMATED |

+-----------------------------+----------------+----------------+

| stage/sql/copy to tmp table |         385652 |        9863083 |

+-----------------------------+----------------+----------------+

1 row in set (0.00 sec)

+----------+

| sleep(5) |

+----------+

|        0 |

+----------+

1 row in set (5.00 sec)

+-----------------------------+----------------+----------------+

| EVENT_NAME                  | WORK_COMPLETED | WORK_ESTIMATED |

+-----------------------------+----------------+----------------+

| stage/sql/copy to tmp table |         923696 |        9863083 |

+-----------------------------+----------------+----------------+

1 row in set (0.00 sec)

mysql> select 9863083/(923696-385652)*5/60;

+------------------------------+

| 9863083/(923696-385652)*5/60 |

+------------------------------+

|                   1.52761407 |

+------------------------------+

1 row in set (0.00 sec)

简单计算出来的总时间是 1.57 分钟,大概就是 90 秒左右。实际上运行的时间可以参考语句执行的具体时间:

代码语言:txt
AI代码解释
复制
mysql> alter table sbtest.sbtest1 modify c varchar(120)  NOT NULL DEFAULT '';

Query OK, 9999999 rows affected (1 min 37.27 sec)

Records: 9999999  Duplicates: 0  Warnings: 0

不过 DDL 本身操作的时候也有很多的阶段,current 表本身只能看到当前阶段的进度,可以通过定期的查询来估算进度。

总结一下

其实 MySQL 自身已经集成了非常多的监控信息,有需求的时候可以多研究研究setup_instruments。实际上 DDL 也可以使用 Online DDL 工具来操作,本身 gh-ost 工具也会展示操作的进度。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL中如何评估DDL的进度
在MySQL 5.7.6或者更高版本,能够通过 performance_schema 观察alter table的进度。方法如下:
保持热爱奔赴山海
2024/01/22
4890
MySQL 实战笔记 第04期:alter table 语句进度评估
答案是肯定的,今天我们就来一起学习下 MySQL alter table 语句进度评估。
数据库交流
2022/04/25
1.2K0
MySQL 实战笔记 第04期:alter table 语句进度评估
MOP 系列|MOP 三种主流数据库常用 SQL(二)
MOP 不用多说,指的就是 MySQL、Oracle、PostgreSQL 三种目前最主流的数据库,MOP 系列打算更新 MOP 三种数据库的索引知识、高可用架构及常用 SQL 语句等等,上面已经更新了 MOP 索引相关的文章,今天打算整理一下这三种数据库的常用 SQL 知识,由于文章过长,今天更新中间的一篇之 MySQL 篇。第一篇 Oracle 相关的详见下方链接:MOP 系列|MOP 三种主流数据库常用 SQL(一)。
JiekeXu之路
2024/05/28
990
MOP 系列|MOP 三种主流数据库常用 SQL(二)
MySQL PERFORMANCE_SCHEMA监控用法详解
MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。
Power
2025/02/28
960
技术分享 | MySQL级联复制下进行大表的字段扩容
某客户的业务中有一张约4亿行的表,因为业务扩展,表中open_id varchar(50) 需要扩容到 varchar(500).
爱可生开源社区
2023/04/18
8450
初相识 | 全方位认识 sys 系统库
前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库。在我们的发布计划中为什么要把performance_schema放在最前面呢?其中一个原因就是因为它是sys 系统库的数据来源,今天开始,我们将为大家逐步推出“全方位认识 sys 系统库”系列文章,下面我们将为大家带来系列第一篇《初相识|全方位认识 sys 系统库》,请跟随我们一起开始 sys 系统库的系统学习之旅吧~
沃趣科技
2018/08/20
1K0
初相识 | 全方位认识 sys 系统库
MySQL 表空间加密插件 Keyring
MySQL支持对InnoDB单表空间、通用表空间、系统表空间和Redo、Undo文件进行静态加密。从8.0.16开始支持对Schema和通用表空间设置加密默认值,这就允许对在这些Schema和表空间中的表是否加密进行统一控制;静态加密功能依赖于Keyring组件或插件,MySQL社区版提供的Keyring file插件会将Keyring数据存储在服务器主机的本地文件系统中。
数据和云
2021/09/22
3.5K0
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
经过排查分析得出,这是由于改表系统解析改表需求得出错误的改表方案导致,即这类改表可以满足快速改表操作(直接使用 ALTER TABLE),理论上任务下发后能马上改完,但是工单结果是执行触发 10 秒超时,最终工单失败。
爱可生开源社区
2024/01/31
3470
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
不用MariaDB/Percona也能查看DDL的进度
使用MariaDB/Percona版本的一个便利之处就是可以及时查看DDL的进度,进而预估DDL耗时。 其实,在官方版本里也是可以查看DDL进度的,认真看手册的同学就能发现手册中有提到过:
田帅萌
2018/08/14
1.1K0
MySQL谬误集02: DDL锁表
导语 | 本文是MySQL谬误集系列文章的第二篇,该系列旨在纠正一系列似是而非的说法。比如关于MySQL DDL操作,有很多同学认为会锁表,那是不是一定会锁表呢?是锁读还是锁写呢?锁多长时间?不同的DDL操作有差别吗?MySQL从5.5到8.0,对这个问题有什么改进呢?本文做了一个简单的总结。
DBA成江东
2023/08/19
1.6K0
MySQL谬误集02: DDL锁表
MySQL 8 查看 SQL 语句的执行进度
用户1148526
2024/09/23
2270
初相识|performance_schema全方位介绍(PFS)
现在,很高兴的告诉大家,我们基于 MySQL 官方文档加上我们的验证,整理了一份可以系统学习 performance_schema 的资料分享给大家,为了方便大家阅读,我们整理为了一个系列,一共7篇文章。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
老叶茶馆
2020/11/26
1.2K0
MySQL DDL发展史
- 注意: 在online ddl前,inplace的方法主要在第三步大大缩短了时间,只重构了索引,没有重新copy所有数据
划水教练
2022/05/17
1.1K0
MySQL DDL发展史
MySQL 8.0.17 clone插件的使用
mysql8.0.17里 引入了一个clone插件, 可以方便我们快速克隆出一个从库或者MGR的节点:
保持热爱奔赴山海
2019/09/17
1.5K0
MySQL 5.7 特性:Online DDL
DDL 一向是业务的痛点,尤其是对大型表的 DDL 操作,具有操作时间久,对性能影响大,可能影响业务正常使用等问题。
王文安@DBA
2020/09/14
8.1K1
MySQL 5.7 特性:Online DDL
MySQL Profile在5.7的简单测试(r10笔记第50天)
MySQL Profile对于分析执行计划的开销来说,还是有一定的帮助,至少在分析一些性能问题的时候有很多的参考依据。 我在5.6, 5.7版本中进行了测试,没发现差别,还是以5.7为例进行演示吧。 mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.10 | +-----------+ 1 row in set (0.00 sec) 传统的使用Profile都是使用show profile这样的命令方式,这
jeanron100
2018/03/20
1.1K0
事件记录 | performance_schema全方位介绍
在上一篇 《配置详解 | performance_schema全方位介绍》 中,我们详细介绍了performance_schema的配置表,坚持读完的是真爱,也恭喜大家翻过了一座火焰山。相信有不少人读完之后,已经迫不及待的想要跃跃欲试了,今天将带领大家一起踏上系列第三篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中事件原始记录表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
沃趣科技
2018/05/15
2.9K0
事件记录 | performance_schema全方位介绍
第17问:如何评估 alter table 的进度?
我们执行 alter table 语句后,经常面临“跑又跑不完,杀又不敢杀”的窘境。
爱可生开源社区
2020/07/30
1.1K0
应用示例荟萃 | performance_schema全方位介绍(下)
使用performance_schema中的语句当前事件记录表和语句事件历史记录表可以查询数据库中最近执行的一些SQL语句,以及语句相关的信息,这里我们以events_statements_history表为例,查询结果按照语句完成时间倒序排序,如下:
沃趣科技
2018/07/02
2.2K0
应用示例荟萃 | performance_schema全方位介绍(下)
Performance Schema使用简介(一)
Performance Schema简介 Oracle DBA都应该知道 Oracle中提供了大量的视图供DBA们排查问题使用,并且有等待事件帮助大家快速定位问题属于哪一类。MySQL 中也有Performance Schema帮助大家去分析排查问题,并且在5.7中增加了Sys Schema,将Performance Schema和information_schema的信息格式化后,供大家更方便的分析问题。 这里先介绍先Performance Schema的使用方式,便于后面大家更好的去使用Sys Sc
沃趣科技
2018/03/26
2.3K0
相关推荐
MySQL中如何评估DDL的进度
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文