アプリ版:「スタンプのみでお礼する」機能のリリースについて

mysqlのalter table中のロックについてです。


下記のように、alterでテーブルを再構築中に同じテーブルにinsertが実行された場合、
接続Bのinsertはブロックされるかと思うのですが、テーブルが大きくalterに時間がかかる場合、
タイムアウトなどは発生するのでしょうか。
またもし発生する場合、タイムアウト値の設定などの確認方法はあるのでしょうか。

1.接続A
 alter table table1 add columnB int(11) ;

2.接続B(接続Aのalter実行中)
 insert into table1(columnA) values('aaa');

A 回答 (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終了後ロック解除するのでしょう */
    • good
    • 0
この回答へのお礼

お礼が遅れ申し訳ありません。

こちらでもinnodb_lock_wait_timeoutやtable_lock_wait_timeoutをいじって、なぜ適用されないのだろうと悩んでいました。

ブログシステムを運用しているのですが、記事数が予想外に増えて膨れあがったテーブルへの、
ALTERでのテーブル変更を予定しているのですが、大変助かりました。
ありがとうございました。

お礼日時:2010/09/16 19:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!