MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  InnoDB INFORMATION_SCHEMA トランザクションおよびロック情報

15.15.2 InnoDB INFORMATION_SCHEMA トランザクションおよびロック情報

注記

このセクションでは、MySQL 8.0 内の INFORMATION_SCHEMA INNODB_LOCKS および INNODB_LOCK_WAITS テーブルよりも優先される、パフォーマンススキーマ data_locks および data_lock_waits テーブルによって公開されるロック情報について説明します。 古い INFORMATION_SCHEMA テーブルに関して記述されている同様の説明は、MySQL 5.7 Reference ManualInnoDB INFORMATION_SCHEMA Transaction and Locking Information を参照してください。

一方の INFORMATION_SCHEMA テーブルと 2 つの「パフォーマンススキーマ」テーブルを使用すると、InnoDB トランザクションを監視し、潜在的なロックの問題を診断できます:

  • INNODB_TRX: この INFORMATION_SCHEMA テーブルには、InnoDB 内で現在実行されているすべてのトランザクションに関する情報が表示されます。これには、トランザクションの状態 (実行中かロック待機中かなど)、トランザクションの開始時期、トランザクションが実行されている特定の SQL ステートメントなどが含まれます。

  • data_locks :「このパフォーマンススキーマ」テーブルには、各保留ロックの行と、保留ロックの解放を待機してブロックされる各ロックリクエストが含まれています:

    • ロックを保持しているトランザクションの状態 (INNODB_TRX.TRX_STATERUNNING, LOCK WAIT, ROLLING BACK または COMMITTING) にかかわらず、保持されているロックごとに 1 つの行があります。

    • 別のトランザクションがロックを解放するのを待機している InnoDB 内の各トランザクション (INNODB_TRX.TRX_STATELOCK WAIT) は、単一のブロッキングロックリクエストによってブロックされます。 そのブロックしているロック要求は、互換性がないモードにある別のトランザクションによって保持されている行ロックまたはテーブルロックに対するものです。 ロック要求には常に、要求をブロックする保持ロックのモード (読み取りと書き込み、共有と排他) と互換性のないモードがあります。

      ブロックされたトランザクションは、他のトランザクションがコミットまたはロールバックされ、リクエストされたロックが解放されるまで続行できません。 ブロックされたトランザクションごとに、data_locks には、トランザクションがリクエストしたロックと待機しているロックを示す行が 1 つ含まれます。

  • data_lock_waits:「このパフォーマンススキーマ」テーブルには、特定のロックを待機しているトランザクション、または特定のトランザクションが待機しているロックが示されます。 このテーブルには、ブロックされているトランザクションごとに、そのトランザクションが要求したロックと、その要求をブロックしているロックを示す 1 つ以上の行が含まれています。 REQUESTING_ENGINE_LOCK_ID 値はトランザクションによってリクエストされたロックを参照し、BLOCKING_ENGINE_LOCK_ID 値は最初のトランザクションの続行を妨げる (別のトランザクションによって保持されている) ロックを参照します。 特定のブロックされたトランザクションについて、data_lock_waits のすべての行の値は、REQUESTING_ENGINE_LOCK_ID では同じで、BLOCKING_ENGINE_LOCK_ID では異なる値になります。

前述のテーブルの詳細は、セクション26.51.29「INFORMATION_SCHEMA INNODB_TRX テーブル」セクション27.12.13.1「data_locks テーブル」 および セクション27.12.13.2「data_lock_waits テーブル」 を参照してください。


関連キーワード:  InnoDB, テーブル, ロック, トランザクション, 構成, INFORMATION, SCHEMA, 情報, 圧縮, スペース