ロック待機タイムアウトを超えました。トランザクションを再開してみてください


12

このエラーが毎日4〜5回繰り返し発生します。

SQLSTATE [HY000]:一般エラー:1205ロック待機タイムアウトを超えました。トランザクションを再開してみてください

今回はphpmyadminを再起動しますが、何度も発生します。この問題を指摘することはできません。

Magento ver。を使用しています。ウェブサイトの1.9.0.1。7000以上の製品があります。サーバーには16GBの RAMがあります。

この問題を修正する方法は?

回答:


8

innodb_lock_wait_timeoutを設定してInnoDBのロック待機タイムアウト値を増やすことを検討する必要があります。デフォルトは50秒です

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
+--------------------------+-------+
1 row in set (0.01 sec)

/etc/my.cnfこの行で永続的に高い値に設定できます

[mysqld]
innodb_lock_wait_timeout=120

mysqlを再起動します。この時点でmysqlを再起動できない場合は、次を実行します。

SET GLOBAL innodb_lock_wait_timeout = 120; 

セッションの期間に設定することもできます

SET innodb_lock_wait_timeout = 120; 

続いてクエリ


3
なぜ140 'や2000'ではないのですか?これで実際にどのように問題を解決できるでしょうか?それを隠すことによって?
Elzo Valugi 2017

予想以上にテーブルがロックされる問題があります。これを行うと、問題を一度修正するのではなく、毎回2分間待機するように強制されます。そして、Elzoが言うように... 120では不十分な場合はどうなりますか?
Carlos Robles

7

このメッセージは、アクセスしようとしているデータベースの内容が(通常は長時間実行されている)前のプロセスによってロックされている場合に表示されます。MySQLは、ロックが解除されるまで一定の時間待機してから、ロックを放棄してエラーをスローします。これらのエラーメッセージが表示されている時刻を一貫した時刻まで追跡できる場合は、サーバーがその時点で他に実行していることを確認する必要があります。たとえば、データベースバックアップが実行されています。これを行うことにより、ロックを作成するプロセスの可能性を絞り込むことができるはずですが、必ずしもそうするのは簡単ではありません-試行錯誤の可能性があります。


5

この問題の背後にある理由は、多くのカスタムスクリプトを実行していて、データベース接続が閉じる機会を得る前にスクリプトを強制終了している場合です。

何かがクエリの実行をブロックしています。おそらく、クエリ内のテーブルの1つから更新、挿入、または削除している別のクエリです。あなたはそれが何であるかを知る必要があります:

CLIからMySQLにログインして次のコマンドを実行できる場合

SHOW PROCESSLIST;

ブロッキング/スリーププロセスを見つけたら、それを見つけてid実行します。

KILL {id};

最初のクエリを再実行します。

このリンクが役立つかもしれませんSQLSTATE [HY000]:一般的なエラー:1205ロック待機タイムアウトを超えました。トランザクションMagentoを再起動してみてください


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.