web-dev-qa-db-ja.com

innodb_lock_wait_timeoutタイムアウトを増やす

MySQLデータベースを使用していて、挿入直後にレコードを更新しようとしているため、次のエラーが発生しますER_LOCK_WAIT_TIMEOUT: Lock wait timeout exceeded; try restarting transaction。だから私は次のクエリによってタイムアウトを減らします:-

set GLOBAL innodb_lock_wait_timeout=1

だから私の質問は:-それをしても大丈夫ですか?パフォーマンスの問題などの他の問題につながりますか?

ご協力ありがとうございました。

8
user3819192

これがWebアプリケーションであり、あるページから次のページへのトランザクションを中断しようとしている場合、しないでください;それは動作しません。

「直後」とはどういう意味ですか? 2つのステートメントの間に何もしていない場合は、1秒のタイムアウトでも十分に大きいはずです。

mysql> SET GLOBAL innodb_lock_wait_timeout = 1;
mysql> SELECT @@innodb_lock_wait_timeout;
+----------------------------+
| @@innodb_lock_wait_timeout |
+----------------------------+
|                         50 |
+----------------------------+
mysql> SET SESSION innodb_lock_wait_timeout = 1;
mysql> SELECT @@innodb_lock_wait_timeout;
+----------------------------+
| @@innodb_lock_wait_timeout |
+----------------------------+
|                          1 |
+----------------------------+

変数のGLOBALとSESSIONを説明するには、次のようにします。GLOBAL値は、接続の開始時にSESSION値を初期化するために使用されます。その後、SESSION値を変更して、実行していることに影響を与えることができます。また、GLOBAL値を変更しても、current接続には影響しません。

タイムアウトを1に変更することは非常に安全です(GLOBALとSESSIONを理解したら)。変更されるのは、そのエラーが発生する頻度だけです。

8
Rick James