このページは機械翻訳したものです。
このセクションでは、MySQL 8.0 内の INFORMATION_SCHEMA INNODB_LOCKS および INNODB_LOCK_WAITS テーブルよりも優先される、パフォーマンススキーマ data_locks および data_lock_waits テーブルによって公開されるロック情報について説明します。 古い INFORMATION_SCHEMA テーブルに関して記述されている同様の説明は、MySQL 5.7 Reference Manual の InnoDB INFORMATION_SCHEMA Transaction and Locking Information を参照してください。
一方の INFORMATION_SCHEMA テーブルと 2 つの「パフォーマンススキーマ」テーブルを使用すると、InnoDB トランザクションを監視し、潜在的なロックの問題を診断できます:
-
INNODB_TRX: このINFORMATION_SCHEMAテーブルには、InnoDB内で現在実行されているすべてのトランザクションに関する情報が表示されます。これには、トランザクションの状態 (実行中かロック待機中かなど)、トランザクションの開始時期、トランザクションが実行されている特定の SQL ステートメントなどが含まれます。 -
data_locks:「このパフォーマンススキーマ」テーブルには、各保留ロックの行と、保留ロックの解放を待機してブロックされる各ロックリクエストが含まれています:ロックを保持しているトランザクションの状態 (
INNODB_TRX.TRX_STATEがRUNNING,LOCK WAIT,ROLLING BACKまたはCOMMITTING) にかかわらず、保持されているロックごとに 1 つの行があります。-
別のトランザクションがロックを解放するのを待機している InnoDB 内の各トランザクション (
INNODB_TRX.TRX_STATEはLOCK 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 テーブル」 を参照してください。