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