====== 18 MySQLでALTER TABLEの進捗確認 ====== 大きなテーブルに対してALTER TABLEをかけると、数時間かかってしまったりします。 そこで進捗状況が分かれば助かる。 Handler_writeが更新件数なので、ALTER TABLEをかけたテーブルの件数が分かればだいたいの終了時間が想定できる。 #!/bin/bash while true do PRE=`mysql -uroot -pgmocl-mysql -e "SHOW GLOBAL STATUS LIKE 'Handler_write'" | grep Handler_write | awk '{print $2}'` sleep 1 CUR=`mysql -uroot -pgmocl-mysql -e "SHOW GLOBAL STATUS LIKE 'Handler_write'" | grep Handler_write | awk '{print $2}'` echo `expr $CUR - $PRE` sleep 1 done ===== 例 ===== 下記の例だと、テーブルに12万行あって 1秒間に、200000行処理しているので、およそ106分くらいで終わるという計算になる。 mysql> select count(id) from test_table; +------------+ | count(id) | +------------+ | 1273517123 | +------------+ 1 row in set (10 min 26.05 sec) $ bash alert_progress.sh 200000 200000 200000 ・ ・ ・ {{tag>mysql}}