最近扱うデータ量が増えて、1億件を超えてきたため、AlterTableを待つのが辛い。
それでいつ終わるかどのくらいの速度で実行してるか、調べるクエリを作ってみた。
データ量があまりに多いと、処理時間過ぎても終わらないときがあるけど、目安という事で。
※1億件とか処理すると数時間過ぎても終わらなかったことあり。
#performance_schemaを有効にする
[mysqld]
performance_schema=on
#Alter Tableのモニタリングを有効にする
UPDATE setup_instruments SET ENABLED = 'YES' WHERE NAME LIKE 'stage/innodb/alter%';
UPDATE setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE '%stages%';
#Alter Table実行
Alter Table ○○○○○○○○○○○○○○
#Alter Table実行中に以下のクエリを実行
SELECT
EVENT_NAME as "実行中プロセス",
WORK_COMPLETED as "完了",
WORK_ESTIMATED as "全体",
CONCAT(@PROGRESS := WORK_COMPLETED/WORK_ESTIMATED * 100 , "%" ) as "進捗率",
@ELAPSED := ( TIMER_END - TIMER_START ) / POWER(10, 12) as "実行時間",
WORK_COMPLETED / @ELAPSED as "処理量/秒",
@REMAIN := FLOOR( @ELAPSED * ( 100 / @PROGRESS ) - @ELAPSED ) AS "残時間",
DATE_FORMAT( NOW() + INTERVAL @REMAIN SECOND , "%m月%d日 %H:%i:%s" ) AS "終了予測時刻"
FROM
`performance_schema`.events_stages_current;
予想時間がわかると、後はそれまで寝とけばいいので便利!
##参考
14.16.1 Monitoring ALTER TABLE Progress for InnoDB Tables Using Performance Schema
https://dev.mysql.com/doc/refman/5.7/en/monitor-alter-table-performance-schema.html
MySQL 5.7.6のPerformance SchemaでInnoDBのALTER TABLE進捗どうですか
https://yoku0825.blogspot.jp/2015/03/mysql-576performance-schemainnodbalter.html