2

最近、INNODB データベースでロックの問題が発生しており、非常に軽量な (1 行の更新) ステートメントがロックの競合により強制終了されています。

INSERT IGNORE を使用すると、UNIQUE KEY 競合などの制約ベースのエラーを無視できることがわかっています。しかし、INSERT IGNORE は、「ロック待機タイムアウトを超えました」などのより深刻なデータベース エラーにも対処できますか? 同様に、mysql のデッドロック解決によって INSERT IGNORE が強制終了された場合、INSERT IGNORE はどのように反応するでしょうか?

最終的には、どのクエリが非常に多くのロックを保持しており、このステートメントの成功を阻止しているのかをよりよく理解する必要があります。これを行うために、いくつかのデバッグコードを既に追加しています。

しかし、当面は UPDATE LOW_PRIORITY を使用してこの問題を回避したかったのですが、INNODB ではサポートされていません。

どんな助けでも大歓迎

4

1 に答える 1

0

私はすべてのエラーが無視されると信じています。マニュアルから:

IGNOREキーワードを使用すると、INSERTステートメントの実行中に発生したエラーは代わりに警告として扱われます。

無視されるエラーの例としてキー違反を使用していますが、この言語は、IGNOREキーワードによってはるかに広い範囲がカバーされていることを示しているようです。これは、同じページの他の表現と一致しています(強調が追加されています)。

REPLACEは、古い行を複製する一意のキー値を含む新しい行の処理におけるINSERT IGNOREに対応します。新しい行は、破棄されるのではなく、古い行を置き換えるために使用されます。

つまり、無視されたエラーが一意キー制約違反である場合、ステートメントのREPLACE部分が実行されます。これは、(少なくとも私にとっては)他のエラーも無視されますが、REPLACE句の実行をトリガーしないことを示唆しています。

于 2012-07-09T00:17:00.547 に答える