0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ALTER TABLEが遅い、、キャンセルする方法

Posted at

背景

既存のテーブルに複合主キーをつけようとmysqlで
mysql> ALTER TABLE users_exam_results ADD PRIMARY KEY (column1,column2,column3,column4,column5,column6);

をSQLで実行したのだが遅い遅い。。遅すぎる。
一向に終わりそうにないのでいっそのこと一旦キャンセルしたくなった

原因

そもそも遅い原因なのだが
ALTE TABLE の対象テーブルusers_exam_resultsにはすでに60万件ものデータが入っていた
これは流石にすぐには終わるわけないだろう。。

ローカルのテスト環境だったこともあり、一旦、このALTER TABLEの処理をキャンセルして、
テーブルの中身をbackupした上で、truncateで削除して中身を空にしてから、
ALTER TABLEをしようと思う

キャンセル手順

①プロセスの確認
mysql> show processlist;
+----+------+-----------+-------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host      | db          | Command | Time | State          | Info                                                                                                 |
+----+------+-----------+-------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
| 35 | root | localhost | test        | Query   |  269 | altering table | ALTER TABLE users_exam_results ADD PRIMARY KEY (column1,column2,column3,column4,column5 |
| 39 | root | localhost | NULL        | Query   |    0 | starting       | show processlist                                                                                     |
+----+------+-----------+-------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

プロセスを確認したことで、
該当のALTER TABLEをしているプロセスのIDは 35ということがわかった

②プロセスをkill

あとは 以下のようにプロセスIDを指定してkillをする。

mysql> kill 35;
Query OK, 0 rows affected (0.00 sec)

そしたら別ウィンドウで開いてみていたmysqlの処理結果が以下のように変わった

mysql> ALTER TABLE users_exam_results ADD PRIMARY KEY (column1,column2,column3,column4,column5,column6);
ERROR 2013 (HY000): Lost connection to MySQL server during query

そして自分はphpmyadminを使っているのでそこからtruncateでテーブルの中身だけを削除し、
再度ALTER TABLEを実行

mysql> ALTER TABLE users_exam_results ADD PRIMARY KEY (column1,column2,column3,column4,column5,column6);

ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    84
Current database: test

Query OK, 0 rows affected (0.30 sec)

その後
desc users_exam_detail;
でテーブル構成をみたら、無事keyにprimary keyがセットされていた

スクリーンショット 2022-12-26 14.54.12.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?