Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 实战笔记 第04期:alter table 语句进度评估

MySQL 实战笔记 第04期:alter table 语句进度评估

作者头像
数据库交流
发布于 2022-04-25 01:00:11
发布于 2022-04-25 01:00:11
1.3K00
代码可运行
举报
文章被收录于专栏:悦专栏悦专栏
运行总次数:0
代码可运行

作者简介

无为,多年 MySQL DBA 工作经验,现就职于某知名互联网公司,对 MySQL、 Redis、PostgrepSQL 等主流数据库有一定了解,拥有丰富的一线运维经验。

有没有一种途径能让我们随时能了解 alter table 语句的执行状况呢?

答案是肯定的,今天我们就来一起学习下 MySQL alter table 语句进度评估。

1 官方文档

首先我们来看下官方文档对 alter table 语句的解释。

alter table 语句有七个不同的阶段事件,每个事件在其不同的阶段执行,具体如下:

  • stage/innodb/alter table (read PK and internal sort):当 ALTER TABLE 处于读取主键阶段时,此阶段处于活动状态。它以 WORK_COMPLETED=0 和 WORK_ESTIMATED 设置为主键中的估计页数开头。阶段完成后,WORK_ESTIMATED 将更新为主键中的实际页数。
  • stage/innodb/alter table (merge sort):对 ALTER TABLE 操作添加的每个索引重复此阶段。
  • stage/innodb/alter table (insert):对 ALTER TABLE 操作添加的每个索引重复此阶段。
  • stage/innodb/alter table (log apply index):此阶段包括在 ALTER TABLE 运行时生成的 DML 日志的应用。
  • stage/innodb/alter table (flush):在此阶段开始之前,将根据刷新列 table 的长度以更准确的估算值更新 WORK_ESTIMATED。
  • stage/innodb/alter table (log apply table):此阶段包括应用程序运行 ALTER TABLE 时生成的并发 DML 日志。此阶段的持续时间取决于 table 更改的程度。如果未在 table 上运行任何并发 DML,则此阶段是即时的。
  • stage/innodb/alter table (end):包括刷新阶段之后出现的所有剩余工作,例如重新应用在 ALTER TABLE 运行时在 table 上执行的 DML。
2 示例

下面我们通过实验来试试 alter table 的进度查询

首先启用 stage/innodb/alter%:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> UPDATE performance_schema.setup_instruments
       SET ENABLED = 'YES'
       WHERE NAME LIKE 'stage/innodb/alter%';
Query OK, 7 rows affected (0.00 sec)
Rows matched: 7  Changed: 7  Warnings: 0

小贴士 那开启 performance_schema 会不会影响性能呢? 答:会影响性能,但我们只开了 stage/innodb/alter% 的,因此影响可以忽略不计

启用阶段事件监听,其中包括 events_stages_current ,events_stages_history 和 events_stages_history_long。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> UPDATE performance_schema.setup_consumers
       SET ENABLED = 'YES'
       WHERE NAME LIKE '%stages%';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

运行 alter table 操作。在此示例中,将 middle_name 列添加到 employee 示例数据库的 employee 表中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> ALTER TABLE employees.employees ADD COLUMN middle_name varchar(14) AFTER first_name;
Query OK, 0 rows affected (9.27 sec)
Records: 0  Duplicates: 0  Warnings: 0

进度查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
       FROM performance_schema.events_stages_current;
+------------------------------------------------------+----------------+----------------+
| EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
+------------------------------------------------------+----------------+----------------+
| stage/innodb/alter table (read PK and internal sort) |            280 |           1245 |
+------------------------------------------------------+----------------+----------------+
1 row in set (0.01 sec)

如果 alter table 语句已经完成,则 events_stages_current 会返回一个空集,这种情况下可以查询 events_stages_history 表以了解操作是否已经完成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED
       FROM performance_schema.events_stages_history;
+------------------------------------------------------+----------------+----------------+
| EVENT_NAME                                           | WORK_COMPLETED | WORK_ESTIMATED |
+------------------------------------------------------+----------------+----------------+
| stage/innodb/alter table (read PK and internal sort) |            886 |           1213 |
| stage/innodb/alter table (flush)                     |           1213 |           1213 |
| stage/innodb/alter table (log apply table)           |           1597 |           1597 |
| stage/innodb/alter table (end)                       |           1597 |           1597 |
| stage/innodb/alter table (log apply table)           |           1981 |           1981 |
+------------------------------------------------------+----------------+----------------+
5 rows in set (0.00 sec)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 悦专栏 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
不用MariaDB/Percona也能查看DDL的进度
使用MariaDB/Percona版本的一个便利之处就是可以及时查看DDL的进度,进而预估DDL耗时。 其实,在官方版本里也是可以查看DDL进度的,认真看手册的同学就能发现手册中有提到过:
田帅萌
2018/08/14
1.2K0
MySQL 表空间加密插件 Keyring
MySQL支持对InnoDB单表空间、通用表空间、系统表空间和Redo、Undo文件进行静态加密。从8.0.16开始支持对Schema和通用表空间设置加密默认值,这就允许对在这些Schema和表空间中的表是否加密进行统一控制;静态加密功能依赖于Keyring组件或插件,MySQL社区版提供的Keyring file插件会将Keyring数据存储在服务器主机的本地文件系统中。
数据和云
2021/09/22
3.8K0
应用示例荟萃 | performance_schema全方位介绍(下)
使用performance_schema中的语句当前事件记录表和语句事件历史记录表可以查询数据库中最近执行的一些SQL语句,以及语句相关的信息,这里我们以events_statements_history表为例,查询结果按照语句完成时间倒序排序,如下:
沃趣科技
2018/07/02
2.3K0
应用示例荟萃 | performance_schema全方位介绍(下)
MySQL 案例:如何监控DDL
经常会有用户在咨询大表 DDL 的进度,预估时间等信息,其实依靠经验来做判断的话,比较容易出现误差,而且也和评估人的实际评估手段有较大的关系。事实上 MySQL 本身就有 DDL 的监控手段吗,只是默认情况没有进行开启。
王文安@DBA
2022/02/22
1.7K0
MySQL 案例:如何监控DDL
MySQL中如何评估DDL的进度
在MySQL 5.7.6或者更高版本,能够通过 performance_schema 观察alter table的进度。方法如下:
保持热爱奔赴山海
2024/01/22
6630
事件记录 | performance_schema全方位介绍
在上一篇 《配置详解 | performance_schema全方位介绍》 中,我们详细介绍了performance_schema的配置表,坚持读完的是真爱,也恭喜大家翻过了一座火焰山。相信有不少人读完之后,已经迫不及待的想要跃跃欲试了,今天将带领大家一起踏上系列第三篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中事件原始记录表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
沃趣科技
2018/05/15
3.1K0
事件记录 | performance_schema全方位介绍
MySQL Performance_Schema解读
在mysql5.5版本之后新增了performance_schema的数据库用于监视数据库性能,该数据库中表的引擎都是performance_schema。PS数据库默认是关闭的,其中的表都是内存表,不存储在磁盘中,在服务器重启后数据消失。在数据文件performance_schema目录下只有表结构文件不存在数据文件,对这些表的改变不会记录到binlog中。数据收集是通过修改服务器源代码来实现的,不存在与PS相关联的单独线程。PS数据库消耗很少的性能,官方文档介绍即使将PS中所有监控项开启也不会对mysql server性能造成太大影响。
数据库架构之美
2019/12/18
4K0
MySQL Performance_Schema解读
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
经过排查分析得出,这是由于改表系统解析改表需求得出错误的改表方案导致,即这类改表可以满足快速改表操作(直接使用 ALTER TABLE),理论上任务下发后能马上改完,但是工单结果是执行触发 10 秒超时,最终工单失败。
爱可生开源社区
2024/01/31
4320
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
第17问:如何评估 alter table 的进度?
我们执行 alter table 语句后,经常面临“跑又跑不完,杀又不敢杀”的窘境。
爱可生开源社区
2020/07/30
1.2K0
MySQL 8 查看 SQL 语句的执行进度
用户1148526
2024/09/23
4830
PolarDB MySQL 加索引卡主的整体解决方案
在使用PolarDB for MySQL的过程中,我们遇到一个问题,PolarDB 8.02的小版本8.02.2.24 在添加索引的时候,会有部分情况无法添加索引,添加索引失败。具体表现是如下图:
AustinDatabases
2025/04/10
1990
PolarDB MySQL 加索引卡主的整体解决方案
MySQL谬误集02: DDL锁表
导语 | 本文是MySQL谬误集系列文章的第二篇,该系列旨在纠正一系列似是而非的说法。比如关于MySQL DDL操作,有很多同学认为会锁表,那是不是一定会锁表呢?是锁读还是锁写呢?锁多长时间?不同的DDL操作有差别吗?MySQL从5.5到8.0,对这个问题有什么改进呢?本文做了一个简单的总结。
DBA成江东
2023/08/19
1.8K0
MySQL谬误集02: DDL锁表
MySQL 8.0.17 clone插件的使用
mysql8.0.17里 引入了一个clone插件, 可以方便我们快速克隆出一个从库或者MGR的节点:
保持热爱奔赴山海
2019/09/17
1.6K0
MOP 系列|MOP 三种主流数据库常用 SQL(二)
MOP 不用多说,指的就是 MySQL、Oracle、PostgreSQL 三种目前最主流的数据库,MOP 系列打算更新 MOP 三种数据库的索引知识、高可用架构及常用 SQL 语句等等,上面已经更新了 MOP 索引相关的文章,今天打算整理一下这三种数据库的常用 SQL 知识,由于文章过长,今天更新中间的一篇之 MySQL 篇。第一篇 Oracle 相关的详见下方链接:MOP 系列|MOP 三种主流数据库常用 SQL(一)。
JiekeXu之路
2024/05/28
1510
MOP 系列|MOP 三种主流数据库常用 SQL(二)
新特性解读 | MySQL 8.0.16 在组复制中启用成员自动重新加入
随着 MySQL 8.0.16 的发布,我们为 MGR 添加了一些功能,以增强其高可用性。其中一个功能是能够在某些情况下启用已离开组的成员自动重新加入,而无需用户干预。
田帅萌
2019/06/19
1.4K0
MySQL PERFORMANCE_SCHEMA监控用法详解
MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。
Power
2025/02/28
2420
初相识|performance_schema全方位介绍(PFS)
现在,很高兴的告诉大家,我们基于 MySQL 官方文档加上我们的验证,整理了一份可以系统学习 performance_schema 的资料分享给大家,为了方便大家阅读,我们整理为了一个系列,一共7篇文章。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
老叶茶馆
2020/11/26
1.3K0
MySQL 有效利用 profile 分析 SQL 语句的执行过程
在日常的工作中,我们通常要分析 SQL 语句的性能,通过会使用到执行计划,利用执行计划来分析 SQL 语句的性能,并进行相应的优化;本文将利用 profile 分析 SQL 语句的执行过程来辅助的分析 SQL 语句,做好优化;
JiekeXu之路
2019/06/20
5K0
MySQL 有效利用 profile 分析 SQL 语句的执行过程
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
初相识 | 全方位认识 sys 系统库
前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库。在我们的发布计划中为什么要把performance_schema放在最前面呢?其中一个原因就是因为它是sys 系统库的数据来源,今天开始,我们将为大家逐步推出“全方位认识 sys 系统库”系列文章,下面我们将为大家带来系列第一篇《初相识|全方位认识 sys 系统库》,请跟随我们一起开始 sys 系统库的系统学习之旅吧~
沃趣科技
2018/08/20
1.1K0
初相识 | 全方位认识 sys 系统库
相关推荐
不用MariaDB/Percona也能查看DDL的进度
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验