- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysqlのalter table中のロックについてです。)
mysqlのalter table中のロックについて
このQ&Aのポイント
- mysqlのalter table中のロックについてです。下記のように、alterでテーブルを再構築中に同じテーブルにinsertが実行された場合、接続Bのinsertはブロックされるかと思うのですが、テーブルが大きくalterに時間がかかる場合、タイムアウトなどは発生するのでしょうか。
- またもし発生する場合、タイムアウト値の設定などの確認方法はあるのでしょうか。
- 接続A: alter table table1 add columnB int(11); 接続B(接続Aのalter実行中): insert into table1(columnA) values('aaa');
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ロック待ち関連のパラメータは、 innodb_lock_wait_timeout table_lock_wait_timeout だと思うんですが、DDLでロックされているテーブルのロック待ちに関しては、上記パラメータが関係ないようでした。 私の設定値は、デフォルトの50(両方とも) ※確認方法 show variables like '%timeout%'; 2パターン、やってみました。 セッション1 alter table table1 add primary key(c1); /* 20分間 */ セッション2 start transaction; insert into a values (100000001); /* セッション1終了後、ロック解除 */ rollback; セッション1 alter table table1 drop primary key; /* 10分経過 */ セッション2 lock tables table1 write; /* おそらく、セッション1終了後ロック解除するのでしょう */
お礼
お礼が遅れ申し訳ありません。 こちらでもinnodb_lock_wait_timeoutやtable_lock_wait_timeoutをいじって、なぜ適用されないのだろうと悩んでいました。 ブログシステムを運用しているのですが、記事数が予想外に増えて膨れあがったテーブルへの、 ALTERでのテーブル変更を予定しているのですが、大変助かりました。 ありがとうございました。