見出し画像

【PHP】ロックとデットロック

ロック(Lock)とデッドロック(Deadlock)は、データベースにおける並行処理や同時アクセスの管理に関連した概念ですが、異なる意味と状況で使用されます。

ロック(Lock): ロックは、データベースにおいて同時アクセスを制御するための仕組みです。複数のトランザクションやセッションが同じデータやリソースにアクセスしようとする場合、ロックを使用して排他制御や同時実行制御を行います。ロックにはいくつかの種類がありますが、主な種類には以下のようなものがあります:

  • 共有ロック(Shared Lock): 複数のトランザクションが同時にデータに読み込みアクセスできるが、書き込みアクセスは排他的に保持されるロックです。

  • 排他ロック(Exclusive Lock): トランザクションがデータに書き込みアクセスを保持している間、他のトランザクションは読み込みも書き込みもできないロックです。

ロックの目的は、データの整合性を保つために、複数のトランザクションが同時にデータに干渉しないようにすることです。

デッドロック(Deadlock): デッドロックは、複数のトランザクションがお互いのリソースを待ち続けている状態で、進行が停止したりブロックされたりする現象です。つまり、互いにリソースを占有し続け、解放することなく待ち続けるため、どのトランザクションも進行できなくなります。

デッドロックは、循環的な依存関係が形成されることで発生します。例えば、トランザクションAがリソース1を保持し、トランザクションBがリソース2を保持している状態で、トランザクションAはトランザクションBが保持しているリソース2を待ち続け、トランザクションBはトランザクションAが保持しているリソース1を待ち続けるといった循環的な待ち合わせが発生します。

デッドロックが発生すると、システム全体のパフォーマンスが低下し、アプリケーションの応答性が悪化する可能性があります。デッドロックの解決には、タイムアウト、優先度付け、デッドロック検出および回避アルゴリズムなどの手法が使用されます。

したがって、ロックは同時アクセスを制御するための仕組みであり、デッドロックは複数のトランザクションが互いにリソースを待ち続けて進行が停止する状態です。ロックはデータ整合性を保つために使用され、デッドロックはトランザクションの進行を停止させるロックです。


show engine innodb status;(デットロックの確認)


この記事が気に入ったらサポートをしてみませんか?