Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >第17问:如何评估 alter table 的进度?

第17问:如何评估 alter table 的进度?

作者头像
爱可生开源社区
发布于 2020-07-29 16:34:48
发布于 2020-07-29 16:34:48
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

问题

我们执行 alter table 语句后,经常面临“跑又跑不完,杀又不敢杀”的窘境。

如果能评估 alter table 的进度就幸福多了。

实验

MySQL官方已经给出了文档:https://dev.mysql.com/doc/refman/5.7/en/monitor-alter-table-performance-schema.html,我们来实践一下:

先建个数据库

我们设置了一些跟 performance_schema 相关的参数,开启了查看进度必要的功能。

还是按照之前实验 11 的技巧,快速造一些数据:

重复执行 insert,让表中有足够数据:

我们来跑一个alter table:

在另一个 session 中,执行 SQL 查看进度:

看起来 SQL 比较复杂,我们先来看看效果:

这里列出了正在执行的 DDL SQL,进度评估,当前运行语句的时间,和估算的剩余时间。

不断获取进度:

可以看到,估算的剩余时间不是完全精确,在整个过程中,进度在不停被评估。不过这种精确度对于我们也足够用了。

我们来看看评估的主要原理:

在这张表里,MySQL 提供了如下信息:

  • DDL 语句运行的当前阶段
  • 当前阶段的开始时间和结束时间,当前阶段未结束时,结束时间为当前时间
  • 父事件 ID,语句运行的各个阶段,会具有相同的父事件 ID
  • 工作量评估,MySQL 将 DDL 的运行过程拆成一个一个任务包,这里提供了已经完成的任务包数量和估算的任务包总数量,两者的比值即为当前进度

(注意:这里的时间是当前阶段的时间,而工作量评估是整个语句的工作量)

这下我们使用的评估 SQL 就不难看懂了:

附上评估语句的文字版:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select
    stmt.SQL_TEXT as sql_text,
    concat(WORK_COMPLETED, '/' , WORK_ESTIMATED) as progress,
    (stage.TIMER_END - stmt.TIMER_START) / 1e12 as current_seconds,
    (stage.TIMER_END - stmt.TIMER_START) / 1e12 * (WORK_ESTIMATED-WORK_COMPLETED) / WORK_COMPLETED as remaining_seconds
    from events_stages_current stage, events_statements_current stmt
    where stage.THREAD_ID = stmt.THREAD_ID
      and stage.NESTING_EVENT_ID = stmt.EVENT_ID;

小贴士 肯定会有同学问:那开启 performance_schema 会不会影响性能呢? 答:在美好的生活面前,不要因噎废食,多用 1% 的 CPU,不会耗太多电的。

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

本文分享自 爱可生开源社区 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL 实战笔记 第04期:alter table 语句进度评估
答案是肯定的,今天我们就来一起学习下 MySQL alter table 语句进度评估。
数据库交流
2022/04/25
1.2K0
MySQL 实战笔记 第04期:alter table 语句进度评估
MySQL中如何评估DDL的进度
在MySQL 5.7.6或者更高版本,能够通过 performance_schema 观察alter table的进度。方法如下:
保持热爱奔赴山海
2024/01/22
4860
不用MariaDB/Percona也能查看DDL的进度
使用MariaDB/Percona版本的一个便利之处就是可以及时查看DDL的进度,进而预估DDL耗时。 其实,在官方版本里也是可以查看DDL进度的,认真看手册的同学就能发现手册中有提到过:
田帅萌
2018/08/14
1.1K0
MOP 系列|MOP 三种主流数据库常用 SQL(二)
MOP 不用多说,指的就是 MySQL、Oracle、PostgreSQL 三种目前最主流的数据库,MOP 系列打算更新 MOP 三种数据库的索引知识、高可用架构及常用 SQL 语句等等,上面已经更新了 MOP 索引相关的文章,今天打算整理一下这三种数据库的常用 SQL 知识,由于文章过长,今天更新中间的一篇之 MySQL 篇。第一篇 Oracle 相关的详见下方链接:MOP 系列|MOP 三种主流数据库常用 SQL(一)。
JiekeXu之路
2024/05/28
980
MOP 系列|MOP 三种主流数据库常用 SQL(二)
事件记录 | performance_schema全方位介绍
在上一篇 《配置详解 | performance_schema全方位介绍》 中,我们详细介绍了performance_schema的配置表,坚持读完的是真爱,也恭喜大家翻过了一座火焰山。相信有不少人读完之后,已经迫不及待的想要跃跃欲试了,今天将带领大家一起踏上系列第三篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中事件原始记录表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
沃趣科技
2018/05/15
2.9K0
事件记录 | performance_schema全方位介绍
有趣的 events_statements_current 表问题
在GreatSQL中,PFS下有一张内存表: events_statements_current,看到这个名称"xxx_current",小白如我可能会认为这张表中的数据就是当前系统的活跃(active)语句。该表的描述如下(有部分省略):
老叶茶馆
2023/09/01
1990
有趣的 events_statements_current 表问题
初相识 | 全方位认识 sys 系统库
前阵子,我们的"全方位认识performance_schema"系列为大家完整的介绍了performance_schema系统库。在我们的发布计划中为什么要把performance_schema放在最前面呢?其中一个原因就是因为它是sys 系统库的数据来源,今天开始,我们将为大家逐步推出“全方位认识 sys 系统库”系列文章,下面我们将为大家带来系列第一篇《初相识|全方位认识 sys 系统库》,请跟随我们一起开始 sys 系统库的系统学习之旅吧~
沃趣科技
2018/08/20
1K0
初相识 | 全方位认识 sys 系统库
高性能 MySQL 第四版(GPT 重译)(一)
由 Oracle 维护的官方文档为您提供了安装、配置和与 MySQL 交互所需的知识。本书作为该文档的伴侣,帮助您了解如何最好地利用 MySQL 作为强大的数据平台来满足您的用例需求。
ApacheCN_飞龙
2024/03/20
7970
高性能 MySQL 第四版(GPT 重译)(一)
按 user 分组统计视图|全方位认识 sys 系统库
在上一篇《按 host 分组统计视图 | 全方位认识 sys 系统库》中,我们介绍了sys 系统库中按 host 分组统计的视图,类似地,本期的内容将为大家介绍按照 user 进行分类统计的视图。下面请跟随我们一起开始 sys 系统库的系统学习之旅吧。
沃趣科技
2018/08/20
1.8K0
按 user 分组统计视图|全方位认识 sys 系统库
技术分享 | MySQL级联复制下进行大表的字段扩容
某客户的业务中有一张约4亿行的表,因为业务扩展,表中open_id varchar(50) 需要扩容到 varchar(500).
爱可生开源社区
2023/04/18
8430
MySQL 8 查看 SQL 语句的执行进度
用户1148526
2024/09/23
2230
MySQL 案例:如何监控DDL
经常会有用户在咨询大表 DDL 的进度,预估时间等信息,其实依靠经验来做判断的话,比较容易出现误差,而且也和评估人的实际评估手段有较大的关系。事实上 MySQL 本身就有 DDL 的监控手段吗,只是默认情况没有进行开启。
王文安@DBA
2022/02/22
1.6K0
MySQL 案例:如何监控DDL
MySQL 表空间加密插件 Keyring
MySQL支持对InnoDB单表空间、通用表空间、系统表空间和Redo、Undo文件进行静态加密。从8.0.16开始支持对Schema和通用表空间设置加密默认值,这就允许对在这些Schema和表空间中的表是否加密进行统一控制;静态加密功能依赖于Keyring组件或插件,MySQL社区版提供的Keyring file插件会将Keyring数据存储在服务器主机的本地文件系统中。
数据和云
2021/09/22
3.5K0
初相识|performance_schema全方位介绍(PFS)
现在,很高兴的告诉大家,我们基于 MySQL 官方文档加上我们的验证,整理了一份可以系统学习 performance_schema 的资料分享给大家,为了方便大家阅读,我们整理为了一个系列,一共7篇文章。下面,请跟随我们一起开始performance_schema系统的学习之旅吧。
老叶茶馆
2020/11/26
1.2K0
MySQL谬误集02: DDL锁表
导语 | 本文是MySQL谬误集系列文章的第二篇,该系列旨在纠正一系列似是而非的说法。比如关于MySQL DDL操作,有很多同学认为会锁表,那是不是一定会锁表呢?是锁读还是锁写呢?锁多长时间?不同的DDL操作有差别吗?MySQL从5.5到8.0,对这个问题有什么改进呢?本文做了一个简单的总结。
DBA成江东
2023/08/19
1.5K0
MySQL谬误集02: DDL锁表
MySQL 5.7 特性:Online DDL
DDL 一向是业务的痛点,尤其是对大型表的 DDL 操作,具有操作时间久,对性能影响大,可能影响业务正常使用等问题。
王文安@DBA
2020/09/14
8.1K1
MySQL 5.7 特性:Online DDL
MySQL Performance_Schema解读
在mysql5.5版本之后新增了performance_schema的数据库用于监视数据库性能,该数据库中表的引擎都是performance_schema。PS数据库默认是关闭的,其中的表都是内存表,不存储在磁盘中,在服务器重启后数据消失。在数据文件performance_schema目录下只有表结构文件不存在数据文件,对这些表的改变不会记录到binlog中。数据收集是通过修改服务器源代码来实现的,不存在与PS相关联的单独线程。PS数据库消耗很少的性能,官方文档介绍即使将PS中所有监控项开启也不会对mysql server性能造成太大影响。
数据库架构之美
2019/12/18
3.8K0
MySQL Performance_Schema解读
MySQL 8.0.17 clone插件的使用
mysql8.0.17里 引入了一个clone插件, 可以方便我们快速克隆出一个从库或者MGR的节点:
保持热爱奔赴山海
2019/09/17
1.5K0
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
经过排查分析得出,这是由于改表系统解析改表需求得出错误的改表方案导致,即这类改表可以满足快速改表操作(直接使用 ALTER TABLE),理论上任务下发后能马上改完,但是工单结果是执行触发 10 秒超时,最终工单失败。
爱可生开源社区
2024/01/31
3440
故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题的总结
应用示例荟萃 | performance_schema全方位介绍(下)
使用performance_schema中的语句当前事件记录表和语句事件历史记录表可以查询数据库中最近执行的一些SQL语句,以及语句相关的信息,这里我们以events_statements_history表为例,查询结果按照语句完成时间倒序排序,如下:
沃趣科技
2018/07/02
2.2K0
应用示例荟萃 | performance_schema全方位介绍(下)
相关推荐
MySQL 实战笔记 第04期:alter table 语句进度评估
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验