MySQL 评估 ALTER TABLE 进度(5.7)

文若2年前技术文章1218

一、前言

  • 问题:大表里执行 ALTER TABLE 的时候,经常会比较忐忑,会面临 “跑又跑不完 Kill 也不敢 Kill” 的窘境。

  • 需求:客户在执行 ALTER TABLE 时也会让我们来评估影响的计算时间,我们可以将监控方法提供给客户。

二、实验

  1. 来源于:MySQL 5.7 官方文档

  2. 启动相关服务参数:

UPDATE performance_schema.setup_instruments
       SET ENABLED = 'YES'
       WHERE NAME LIKE 'stage/innodb/alter%';

 UPDATE performance_schema.setup_consumers
       SET ENABLED = 'YES'
       WHERE NAME LIKE '%stages%';
  1. 执行一个 DDL 操作:

ALTER TABLE sbtest1 ADD COLUMN middle_name varchar(200);
  1. 查询 ALTER TABLE 不断获取进度:

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 performance_schema.events_stages_current stage,
     performance_schema.events_statements_current stmt
where stage.THREAD_ID = stmt.THREAD_ID
  and stage.NESTING_EVENT_ID = stmt.EVENT_ID;

sql_text

progress

current_seconds

remaining_seconds

ALTER TABLE sbtest1 drop COLUMN middle_name

68182/616441

2.569207816

20.659284092463466

sql_text

progress

current_seconds

remaining_seconds

ALTER TABLE sbtest1 drop COLUMN middle_name

421800/616441

23.386745981

10.791891001630681


文档维护:文若


相关文章

Python 装饰器

1、闭包自由变量:未在本地作用域中定义的变量。例如定义在内层函数外的外层函数的作用域中的变量。闭包:就是一个概念,出现在嵌套函数中,指的是内层函数引用到了外层函数的自由变量,就形成了闭包。很多语言都有...

网络抓包实战

网络抓包实战

1、为什么要学习抓包?主要是因为碰到网络相关问题,如果不进行抓包的话,可能会很难进行定位解决,抓包可以看做是另类的日志信息收集。对于解决网络问题至关重要。2、抓包普通环境tcpdump -- a po...

SQLServer执行计划

SQLServer执行计划

一、执行计划概览RDS SQLServer 执行计划可以在性能分析中查看,也可以在登陆数据库后查看执行计划。(1)在 DMS 登陆数据库后查看,情况如下: 具体执行计划内容如下: (2)在性能分析中找...

MySQL优化器特性(七)成本估算常数

成本估算常数表示执行一些MySQL基础操作时的成本,如读取一个页面,创建一个临时表,比较一条记录,解析一行记录等操作。mysql.engine_cost和mysql.server_cost表分别记录存...

spark配置任务日志(Client模式& Cluster模式)

在Spark中,日志级别可以通过log4j.properties或log4j.xml文件来配置。对于spark-submit命令启动的应用程序,可以通过以下两种方式来修改日志级别:对于Client模式...

触发kube-apiserver流控导致ACK集群中节点状态异常

触发kube-apiserver流控导致ACK集群中节点状态异常

问题现象ack集群中一个节点状态为notready,但是排查节点上的核心组件:kubelet、kube-proxy、flannel、etcd等状态均为正常。排查步骤1、查日志分别排查核心组件以及系统日...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。