文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  MySQL 效能架構  /  使用效能架構診斷問題

29.19 使用效能架構診斷問題

效能架構是一個工具,可透過實際測量而非亂猜來幫助 DBA 進行效能調整。本節示範一些使用效能架構達到此目的的方法。此處的討論依賴於事件篩選的使用,這在第 29.4.2 節「效能架構事件篩選」中說明。

以下範例提供一種方法,可用於分析可重複的問題,例如調查效能瓶頸。首先,您應該有一個可重複的使用案例,其中效能被認為太慢而需要最佳化,並且您應該啟用所有檢測(完全不進行預先篩選)。

  1. 執行使用案例。

  2. 使用效能架構表格,分析效能問題的根本原因。此分析主要依賴於後篩選。

  3. 對於排除的問題區域,停用相應的工具。例如,如果分析顯示問題與特定儲存引擎中的檔案 I/O 無關,則停用該引擎的檔案 I/O 工具。然後截斷歷史記錄和摘要表格,以移除先前收集的事件。

  4. 在步驟 1 中重複此流程。

    每次迭代時,效能架構輸出,特別是events_waits_history_long 表格,包含的雜訊越來越少(由非顯著的工具引起),並且由於此表格的大小固定,因此包含越來越多與手頭問題分析相關的資料。

    隨著每次迭代,調查應該越來越接近問題的根本原因,因為訊號/雜訊比率會提高,使分析更加容易。

  5. 一旦確定效能瓶頸的根本原因,請採取適當的更正措施,例如

    • 調整伺服器參數(快取大小、記憶體等等)。

    • 透過不同的撰寫方式調整查詢,

    • 調整資料庫結構描述(表格、索引等等)。

    • 調整程式碼(這僅適用於儲存引擎或伺服器開發人員)。

  6. 從步驟 1 重新開始,查看變更對效能的影響。

mutex_instances.LOCKED_BY_THREAD_IDrwlock_instances.WRITE_LOCKED_BY_THREAD_ID 欄位對於調查效能瓶頸或死鎖至關重要。這可透過 Performance Schema 的儀器化功能實現,如下所示:

  1. 假設執行緒 1 正在等待一個互斥鎖而被卡住。

  2. 您可以判斷該執行緒正在等待什麼。

    SELECT * FROM performance_schema.events_waits_current
    WHERE THREAD_ID = thread_1;

    假設查詢結果識別出該執行緒正在等待互斥鎖 A,該互斥鎖可以在 events_waits_current.OBJECT_INSTANCE_BEGIN 中找到。

  3. 您可以判斷哪個執行緒持有互斥鎖 A。

    SELECT * FROM performance_schema.mutex_instances
    WHERE OBJECT_INSTANCE_BEGIN = mutex_A;

    假設查詢結果識別出是執行緒 2 持有互斥鎖 A,此資訊可以在 mutex_instances.LOCKED_BY_THREAD_ID 中找到。

  4. 您可以查看執行緒 2 正在做什麼。

    SELECT * FROM performance_schema.events_waits_current
    WHERE THREAD_ID = thread_2;