文件首頁
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


30.4.4.2 diagnostics() 程序

建立目前伺服器狀態的報告,以供診斷之用。

此程序會藉由操作 sql_log_bin 系統變數的階段作業值,在執行期間停用二進位記錄。這是一項受限操作,因此程序需要足夠的權限才能設定受限的階段作業變數。請參閱第 7.1.9.1 節「系統變數權限」

diagnostics() 收集的資料包含下列資訊

  • 來自 metrics 檢視的資訊(請參閱第 30.4.3.21 節「metrics 檢視」

  • 來自其他相關 sys 綱要檢視的資訊,例如判斷第 95 個百分位數的查詢的檢視

  • 如果 MySQL 伺服器是 NDB 叢集的一部分,則來自 ndbinfo 綱要的資訊

  • 複寫狀態(來源和複本)

某些 sys 綱要檢視會計算為初始值(選用)、整體值和差異值

  • 初始檢視是 diagnostics() 程序開始時的檢視內容。此輸出與差異檢視所使用的開始值相同。如果 diagnostics.include_raw 組態選項為 ON,則會包含初始檢視。

  • 整體檢視是 diagnostics() 程序結束時的檢視內容。此輸出與差異檢視所使用的結束值相同。一律會包含整體檢視。

  • 差異檢視是從程序執行開始到結束的差異。最小值和最大值分別是來自結束檢視的最小值和最大值。它們不一定反映受監控期間的最小值和最大值。除了 metrics 檢視之外,差異只會在第一次和最後一次輸出之間計算。

參數
  • in_max_runtime INT UNSIGNED:最長資料收集時間,以秒為單位。使用 NULL 來收集預設的 60 秒資料。否則,請使用大於 0 的值。

  • in_interval INT UNSIGNED:資料收集之間的睡眠時間,以秒為單位。使用 NULL 來睡眠預設的 30 秒。否則,請使用大於 0 的值。

  • in_auto_config ENUM('current', 'medium', 'full'):要使用的 Performance Schema 組態。允許的值為

    • current:使用目前的儀器和消費者設定。

    • medium:啟用某些儀器和消費者。

    • full:啟用所有儀器和消費者。

    注意

    啟用的儀器和消費者越多,對 MySQL 伺服器效能的影響就越大。請謹慎使用 medium 設定,尤其是 full 設定,它會對效能造成很大的影響。

    使用 mediumfull 設定需要 SUPER 權限。

    如果選擇 current 以外的設定,則會在程序結束時還原目前的設定。

組態選項

可以使用下列組態選項或其對應的使用者定義變數來修改 diagnostics() 操作(請參閱第 30.4.2.1 節「sys_config 資料表」

  • debug, @sys.debug

    如果此選項為 ON,則會產生除錯輸出。預設值為 OFF

  • diagnostics.allow_i_s_tables, @sys.diagnostics.allow_i_s_tables

    如果此選項為 ON,則允許 diagnostics() 程序在 Information Schema 的 TABLES 表格上執行表格掃描。如果表格數量眾多,這可能會耗費大量資源。預設值為 OFF

  • diagnostics.include_raw, @sys.diagnostics.include_raw

    如果此選項為 ON,則 diagnostics() 程序輸出會包含從查詢 metrics 視圖所取得的原始輸出。預設值為 OFF

  • statement_truncate_len, @sys.statement_truncate_len

    format_statement() 函數傳回的語句最大長度。超出此長度的語句會被截斷。預設值為 64。

範例

建立一個診斷報告,該報告每 30 秒開始一次迭代,並使用目前的 Performance Schema 設定執行最多 120 秒

mysql> CALL sys.diagnostics(120, 30, 'current');

若要將 diagnostics() 程序執行的輸出擷取到檔案中,請使用 mysql 用戶端 tee filenamenotee 命令(請參閱 第 6.5.1.2 節「mysql 用戶端命令」

mysql> tee diag.out;
mysql> CALL sys.diagnostics(120, 30, 'current');
mysql> notee;