MySQLデータベースを使用していて、挿入直後にレコードを更新しようとしているため、次のエラーが発生しますER_LOCK_WAIT_TIMEOUT: Lock wait timeout exceeded; try restarting transaction
。だから私は次のクエリによってタイムアウトを減らします:-
set GLOBAL innodb_lock_wait_timeout=1
だから私の質問は:-それをしても大丈夫ですか?パフォーマンスの問題などの他の問題につながりますか?
ご協力ありがとうございました。
これが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を理解したら)。変更されるのは、そのエラーが発生する頻度だけです。