このセクションでは、MySQL 8.0 内の INFORMATION_SCHEMA
INNODB_LOCKS
および INNODB_LOCK_WAITS
テーブルよりも優先される、パフォーマンススキーマ data_locks
および data_lock_waits
テーブルによって公開されるロック情報について説明します。 古い INFORMATION_SCHEMA
テーブルに関して記述されている同様の説明は、MySQL 5.7 Reference Manual の Persistence and Consistency of InnoDB Transaction and Locking Information を参照してください。
トランザクションテーブルとロックテーブル (INFORMATION_SCHEMA
INNODB_TRX
テーブル、パフォーマンススキーマ data_locks
テーブル、および data_lock_waits
テーブル) によって公開されるデータは、高速変更データの概要を表します。 これは、アプリケーションによって開始された更新が発生した場合にのみデータが変更されるユーザーテーブルとは異なります。 基礎となるデータはシステム管理の内部データであり、非常に迅速に変更できます:
-
データは、
INNODB_TRX
、data_locks
およびdata_lock_waits
テーブル間で一貫性がない場合があります。data_locks
およびdata_lock_waits
テーブルは、INNODB_TRX
テーブル内のトランザクションに関するロック情報を提供するために、InnoDB
ストレージエンジンからライブデータを公開します。 ロックテーブルから取得されたデータは、SELECT
の実行時に存在しますが、クエリー結果がクライアントによって消費されるまでに削除または変更される場合があります。data_locks
をdata_lock_waits
と結合すると、存在しない、またはまだ存在しないdata_locks
の親行を識別するdata_lock_waits
の行を表示できます。 -
トランザクションテーブルおよびロックテーブルのデータは、
INFORMATION_SCHEMA
PROCESSLIST
テーブルまたはパフォーマンススキーマthreads
テーブルのデータと整合性がとれていない可能性があります。たとえば、
InnoDB
トランザクションのデータを比較し、テーブルをPROCESSLIST
テーブルのデータとロックする場合は注意が必要です。 1 つのSELECT
(たとえば、INNODB_TRX
とPROCESSLIST
の結合) を発行した場合でも、一般に、これらのテーブルの内容には整合性がありません。INNODB_TRX
では、PROCESSLIST
に存在しない行や、INNODB_TRX.TRX_QUERY
に表示されているトランザクションの現在実行中の SQL クエリーがPROCESSLIST.INFO
のものと異なる行を参照できます。