• ベストアンサー
※ 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');

質問者が選んだベストアンサー

  • ベストアンサー
  • moousi
  • ベストアンサー率70% (21/30)
回答No.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終了後ロック解除するのでしょう */

maenoina
質問者

お礼

お礼が遅れ申し訳ありません。 こちらでもinnodb_lock_wait_timeoutやtable_lock_wait_timeoutをいじって、なぜ適用されないのだろうと悩んでいました。 ブログシステムを運用しているのですが、記事数が予想外に増えて膨れあがったテーブルへの、 ALTERでのテーブル変更を予定しているのですが、大変助かりました。 ありがとうございました。