rwlock_instances
表格列出伺服器執行時,Performance Schema 所看到的所有 rwlock (讀寫鎖定) 執行個體。rwlock
是程式碼中使用的一種同步機制,用來強制執行在給定時間,執行緒可以按照特定規則存取某些共用資源。該資源稱為受 rwlock
「保護」。存取可以是共用的(許多執行緒可以同時擁有讀取鎖定)、獨佔的(在給定時間只有一個執行緒可以擁有寫入鎖定)或共用獨佔的(執行緒可以擁有寫入鎖定,同時允許其他執行緒不一致的讀取)。共用獨佔存取也稱為 sxlock
,可最佳化並行性並提高讀寫工作負載的可擴展性。
根據請求鎖定的執行緒數量以及請求鎖定的性質,存取可以以共用模式、獨佔模式、共用獨佔模式授與,或完全不授與,並等待其他執行緒先完成。
rwlock_instances
表格具有下列欄位:
NAME
與鎖定相關聯的工具名稱。
OBJECT_INSTANCE_BEGIN
已檢測鎖定的記憶體位址。
WRITE_LOCKED_BY_THREAD_ID
當執行緒目前以獨佔(寫入)模式鎖定
rwlock
時,WRITE_LOCKED_BY_THREAD_ID
是鎖定執行緒的THREAD_ID
,否則為NULL
。READ_LOCKED_BY_COUNT
當執行緒目前以共用(讀取)模式鎖定
rwlock
時,READ_LOCKED_BY_COUNT
會遞增 1。這只是一個計數器,因此無法直接用於尋找哪個執行緒持有讀取鎖定,但可以用來查看rwlock
上是否存在讀取爭用,並查看目前有多少個讀取器處於作用中狀態。
rwlock_instances
表格具有下列索引:
以 (
OBJECT_INSTANCE_BEGIN
) 為主索引鍵以 (
NAME
) 為索引以 (
WRITE_LOCKED_BY_THREAD_ID
) 為索引
不允許對 rwlock_instances
表格使用 TRUNCATE TABLE
。
透過在下列兩個表格上執行查詢,監控應用程式或 DBA 可以偵測到涉及鎖定的執行緒之間的一些瓶頸或死結。
events_waits_current
,以查看執行緒正在等待哪個rwlock
。rwlock_instances
,以查看目前哪個其他執行緒擁有rwlock
。
存在一個限制:rwlock_instances
只能用於識別持有寫入鎖定的執行緒,而不能識別持有讀取鎖定的執行緒。