MySQLがロックされる原因

MySQL がロックされる主な理由は次のとおりです。

  1. テーブルロック:テーブル全体をロックする操作を実行すると、MySQLはテーブルをロックし、他のセッションはそのテーブルに対して読み書き操作を実行できなくなります。一般的なのはLOCK TABLESステートメントまたはALTER TABLEステートメントを使用する場合です。
  2. 行ロック:複数のセッションが同時に同じ行データを操作すると、MySQLはその行データをロックし、他のセッションはその行データを変更できなくなります。よくあるパターンは、SELECT … FOR UPDATE文やUPDATE文を使用している場合です。
  3. ギャップロック:クエリ条件が範囲検索を使用すると、MySQLはクエリ範囲内のギャップにロックを設定して、他のセッションがそのギャップにデータを挿入できないようにします。一般的なのは、SELECT … FOR UPDATEステートメントまたはUPDATEステートメントを使用する場合です。
  4. MDLロック: MySQLデータディクショナリーのメタデータ情報が変更された際、メタデータの一貫性を保護するためにMDLロックが使用されます。MDLロックは読取りロックであり、複数のセッションが同時に読取りロックを取得できますが、書き込みロックを取得できるのは1つのセッションのみです。
  5. デッドロック:複数のセッションがロックを保持し合って、お互いにロックの解放を待っている状態のこと。MySQL では、デッドロックを検出し、そのうちの 1 つのセッションのトランザクションをロールバックします。

これらは MySQL がロックされる主な原因なので、デベロッパーはデータベースの設計と SQL ステートメントの記述時に、データベースの並行パフォーマンスを高めるために、不要なロックが発生しないように注意を払う必要があります。

bannerAds