文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.3.3 mutex_instances 表格

mutex_instances 表格列出伺服器執行時 Performance Schema 所看到的所有互斥鎖。互斥鎖是程式碼中使用的一種同步機制,用於強制在給定時間只有一個執行緒可以存取某些共用資源。該資源被稱為受互斥鎖「保護」。

當在伺服器中執行的兩個執行緒(例如,同時執行查詢的兩個使用者工作階段)需要存取相同的資源(檔案、緩衝區或某些資料片段)時,這兩個執行緒會相互競爭,因此第一個取得互斥鎖鎖定的查詢會導致另一個查詢等待,直到第一個查詢完成並解除互斥鎖。

在持有互斥鎖時執行的工作稱為在「臨界區段」中,多個查詢會以序列化方式(一次一個)執行此臨界區段,這是一個潛在的瓶頸。

mutex_instances 表格具有以下欄位

  • NAME

    與互斥鎖相關聯的工具名稱。

  • OBJECT_INSTANCE_BEGIN

    檢測互斥鎖的記憶體位址。

  • LOCKED_BY_THREAD_ID

    當執行緒目前鎖定互斥鎖時,LOCKED_BY_THREAD_ID 是鎖定執行緒的 THREAD_ID,否則為 NULL

mutex_instances 表格具有以下索引

  • 主索引鍵位於 (OBJECT_INSTANCE_BEGIN)

  • 索引位於 (NAME)

  • 索引位於 (LOCKED_BY_THREAD_ID)

TRUNCATE TABLE 不允許用於 mutex_instances 表格。

對於程式碼中檢測的每個互斥鎖,Performance Schema 會提供以下資訊。

  • setup_instruments 表格列出檢測點的名稱,前綴為 wait/synch/mutex/

  • 當某些程式碼建立互斥鎖時,會在 mutex_instances 表格中新增一列。OBJECT_INSTANCE_BEGIN 欄位是一個可唯一識別互斥鎖的屬性。

  • 當執行緒嘗試鎖定互斥鎖時,events_waits_current 表格會顯示該執行緒的一列,指出它正在等待互斥鎖(在 EVENT_NAME 欄位中),並指出正在等待哪個互斥鎖(在 OBJECT_INSTANCE_BEGIN 欄位中)。

  • 當執行緒成功鎖定互斥鎖時

  • 當執行緒解除鎖定互斥鎖時,mutex_instances 會顯示該互斥鎖目前沒有擁有者(THREAD_ID 欄位為 NULL)。

  • 當互斥鎖物件被銷毀時,對應的資料列會從 mutex_instances 中移除。

透過查詢以下兩個資料表,監控應用程式或 DBA 可以偵測到執行緒之間涉及互斥鎖的瓶頸或死鎖