性能模式通过 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)
不允许对 table_handles 表执行 TRUNCATE TABLE。