Mysql デッドロックとは、2 つ以上のトランザクションが同じリソース上で相互に占有し、相互に占有されているリソースのロックを要求し、その結果悪循環が生じることを指します。 InnoDB ストレージ エンジンは、デッドロックの循環依存関係を検出し、ただちにエラーを返すことができます。デッドロックは、トランザクションの 1 つを部分的または完全にロールバックすることによってのみ解消できます。
デッドロックとは何ですか?それはどのようにして生まれたのでしょうか?
デッドロックとは、2 つ以上のトランザクションが同じリソース上で相互に占有し、相互に占有されているリソースのロックを要求し、悪循環が発生することを指します。
(推奨チュートリアル: mysql チュートリアル)
トランザクションが異なる順序でリソースをロックしようとすると、デッドロックが発生する可能性があります。デッドロックは、複数のトランザクションが同じリソースを同時にロックした場合にも発生することがあります。
ロックの動作と順序はストレージ エンジンに関連しています。ステートメントを同じ順序で実行すると、一部のストレージ エンジンではデッドロックが発生し、一部ではデッドロックが発生しません。デッドロックの原因は 2 つあります: 実際のデータの競合と、ストレージ エンジンの実装方法です。
デッドロックの検出
データベース システムは、さまざまなデッドロック検出およびデッドロック タイムアウト メカニズムを実装しています。 InnoDB ストレージ エンジンは、デッドロックの循環依存関係を検出し、ただちにエラーを返すことができます。
デッドロックの回復
デッドロックが発生した後、デッドロックを解消するには、トランザクションの 1 つを部分的または完全にロールバックする必要があります。
InnoDB がデッドロックを処理する現在の方法は、最も少ない行レベルの排他ロックを保持しているトランザクションをロールバックすることです。したがって、トランザクション アプリケーションは設計時にデッドロックへの対処方法を考慮する必要があり、ほとんどの場合、再実行する必要があるのはデッドロックによりロールバックされたトランザクションのみです。
以上がmysqlのデッドロックとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。