25.12.12.2 table_handlestable

性能架构通过table_handlestable 公开 table 锁信息,以显示当前对每个打开的 table 句柄有效的 table 锁。 table_handles报告 table 锁检测记录的内容。此信息显示服务器打开了哪个 table 句柄,如何锁定它们以及通过哪个会话。

table_handlestable 是只读的,无法更新。默认情况下会自动调整大小。要配置 table 大小,请在服务器启动时设置performance_schema_max_table_handles系统变量。

table 锁工具使用wait/lock/table/sql/handler工具,默认情况下已启用。

要在服务器启动时控制 table 锁定检测状态,请在my.cnf文件中使用以下行:

  • Enable:
[mysqld]
performance-schema-instrument='wait/lock/table/sql/handler=ON'
  • Disable:
[mysqld]
performance-schema-instrument='wait/lock/table/sql/handler=OFF'

要在运行时控制 table 锁定检测状态,请更新setup_instrumentstable:

  • Enable:
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME = 'wait/lock/table/sql/handler';
  • Disable:
UPDATE performance_schema.setup_instruments
SET ENABLED = 'NO', TIMED = 'NO'
WHERE NAME = 'wait/lock/table/sql/handler';

table_handlestable 具有以下列:

  • OBJECT_TYPE

该 table 由 table 句柄打开。

  • OBJECT_SCHEMA

包含对象的架构。

  • OBJECT_NAME

被检测对象的名称。

  • OBJECT_INSTANCE_BEGIN

table 句柄地址在内存中。

  • OWNER_THREAD_ID

拥有 table 句柄的线程。

  • OWNER_EVENT_ID

导致 table 句柄打开的事件。

  • INTERNAL_LOCK

在 SQL 级别使用的 table 锁。该值是READREAD WITH SHARED LOCKSREAD HIGH PRIORITYREAD NO INSERTWRITE ALLOW WRITEWRITE CONCURRENT INSERTWRITE LOW PRIORITYWRITE之一。有关这些锁类型的信息,请参见include/thr_lock.h源文件。

  • EXTERNAL_LOCK

在存储引擎级别使用的 table 锁。该值为READ EXTERNALWRITE EXTERNAL之一。

table_handlestable 不允许TRUNCATE TABLE