性能模式通过 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
表。