パフォーマンススキーマは、table_handles
テーブルを介してテーブルロック情報を公開し、開いているテーブルハンドルごとに現在有効なテーブルロックを表示します。table_handles
では、テーブルロックインストゥルメンテーションによって記録される内容がレポートされます。 この情報には、サーバーが開いているテーブルハンドル、ロック方法、およびセッションが表示されます。
table_handles
テーブルは読取り専用であり、更新できません。 デフォルトでは自動サイズ設定されています。テーブルサイズを構成するには、サーバーの起動時に performance_schema_max_table_handles
システム変数を設定します。
テーブルロックのインストゥルメンテーションでは、デフォルトで有効になっている wait/lock/table/sql/handler
インストゥルメントが使用されます。
サーバー起動時のテーブルロックのインストゥルメンテーション状態を制御するには、my.cnf
ファイルで次のような行を使用します:
-
有効化:
[mysqld] performance-schema-instrument='wait/lock/table/sql/handler=ON'
-
無効化:
[mysqld] performance-schema-instrument='wait/lock/table/sql/handler=OFF'
実行時にテーブルロックのインストゥルメンテーション状態を制御するには、setup_instruments
テーブルを更新します:
-
有効化:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME = 'wait/lock/table/sql/handler';
-
無効化:
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO', TIMED = 'NO' WHERE NAME = 'wait/lock/table/sql/handler';
table_handles
テーブルには、次のカラムがあります:
-
OBJECT_TYPE
テーブルハンドルによってオープンされたテーブル。
-
OBJECT_SCHEMA
オブジェクトを格納するスキーマ。
-
OBJECT_NAME
インストゥルメントされたオブジェクトの名前。
-
OBJECT_INSTANCE_BEGIN
メモリー内のテーブルハンドルアドレス。
-
OWNER_THREAD_ID
テーブルハンドルを所有するスレッド。
-
OWNER_EVENT_ID
テーブルハンドルがオープンされる原因となったイベント。
-
INTERNAL_LOCK
SQL レベルで使用されるテーブルロック。 値は、
READ
,READ WITH SHARED LOCKS
,READ HIGH PRIORITY
,READ NO INSERT
,WRITE ALLOW WRITE
,WRITE CONCURRENT INSERT
,WRITE LOW PRIORITY
またはWRITE
のいずれかです。 これらのロックタイプについては、include/thr_lock.h
ソースファイルを参照してください。 -
EXTERNAL_LOCK
ストレージエンジンレベルで使用されるテーブルロック。 値は、
READ EXTERNAL
またはWRITE EXTERNAL
のいずれかです。
table_handles
テーブルには次のインデックスがあります:
主キー (
OBJECT_INSTANCE_BEGIN
)(
OBJECT_TYPE
,OBJECT_SCHEMA
,OBJECT_NAME
) のインデックス(
OWNER_THREAD_ID
、OWNER_EVENT_ID
) のインデックス
TRUNCATE TABLE
は、table_handles
テーブルに対して許可されていません。