效能架構透過 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
。