調查高 CPU 使用率

本頁說明如何使用 CPU 使用率指標和圖表,以及其他內省工具,調查資料庫中 CPU 使用率偏高的問題。

判斷系統或使用者工作是否導致 CPU 使用率偏高

Google Cloud 控制台提供多種 Spanner 監控工具,可讓您查看執行個體最重要指標的狀態。其中一個是名為「CPU utilization - Total」(CPU 使用率 - 總計) 的圖表。這張圖表會顯示 CPU 總使用率 (以執行個體 CPU 資源百分比表示),並依工作優先順序和作業類型細分。工作分為兩種:使用者工作 (例如讀取和寫入),以及系統工作 (涵蓋自動執行的背景工作,例如壓縮和索引回填)。

圖 1 顯示「CPU 使用率 - 總計」圖表的範例。

CPU 使用率 - 總計圖表範例

圖 1. CPU 使用率 - 總計圖表 (位於Google Cloud 控制台的監控資訊主頁中)。

現在,假設您收到 Cloud Monitoring 傳送的快訊,指出 CPU 使用率大幅增加。在 Google Cloud 控制台中開啟執行個體的「Monitoring」(監控) 資訊主頁,然後檢查 Google Cloud 控制台中的「CPU Utilization - Total」(CPU 使用率 - 總計) 圖表。如圖 1 所示,您可以看到高優先順序使用者工作造成的 CPU 使用率增加。下一步是找出導致 CPU 使用率增加的高優先順序使用者作業。

您可以使用查詢洞察資訊主頁,以時間序列的形式呈現這項指標和其他指標。這些預先建構的資訊主頁可協助您查看 CPU 使用率尖峰,並找出效率不彰的查詢。

找出導致 CPU 使用率飆升的使用者作業

圖 1 中的「CPU utilization - Total」(CPU 使用率 - 總計) 圖表顯示,高優先順序使用者工作是造成 CPU 使用率偏高的原因。

接著,您將在Google Cloud 控制台中查看「CPU 使用率 (按作業類型顯示)」圖表。這張圖表會顯示 CPU 使用率,並依高、中、低優先順序的使用者啟動作業細分。

什麼是使用者啟動的操作?

使用者啟動的作業是指透過 API 要求啟動的作業。Spanner 會將這些要求分組為作業類型或類別,您可以在「依作業類型劃分的 CPU 使用率」圖表中,以線條顯示每種作業類型。下表說明各作業類型包含的 API 方法。

作業 API 方法 說明
read_readonly Read
StreamingRead
包括使用索引鍵查詢和掃描從資料庫擷取資料列的讀取作業。
read_readwrite Read
StreamingRead
包括讀寫交易中的讀取作業。
read_withpartitiontoken Read
StreamingRead
包括使用一組分割區權杖執行的讀取作業。
executesql_select_readonly ExecuteSql
ExecuteStreamingSql
包括執行 Select SQL 陳述式和變更串流查詢。
executesql_select_readwrite ExecuteSql
ExecuteStreamingSql
包括在讀寫交易中執行 Select 陳述式。
executesql_select_withpartitiontoken ExecuteSql
ExecuteStreamingSql
包括使用一組分區符記執行的 SELECT 陳述式。
executesql_dml_readwrite ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
包括執行 DML SQL 陳述式。
executesql_dml_partitioned ExecuteSql
ExecuteStreamingSql
ExecuteBatchDml
包括執行分區 DML SQL 陳述式。
beginorcommit BeginTransaction
Commit
Rollback
包括開始、提交及復原交易。
misc PartitionQuery
PartitionRead
GetSession
CreateSession
包括 PartitionQuery、PartitionRead、建立資料庫、建立執行個體、工作階段相關作業、內部時間關鍵服務作業等。

以下是「CPU 使用率 (以作業類型分組)」指標的範例圖表。

CPU 使用率 (以作業類型分組) 圖表示例

圖 2CPU 使用率 (按作業類型顯示) 圖表,位於Google Cloud 控制台中。

如要限制顯示特定優先順序的資料,請使用圖表頂端的「優先順序」選單。並在折線圖上繪製每個作業類型或類別。圖表下方的類別會標示每個圖表。如要隱藏或顯示個別圖表,請選取或取消選取對應的類別篩選器。

或者,您也可以在指標探索工具中建立這張圖表,方法如下:

在 Metrics Explorer 中,依作業類型建立 CPU 使用率圖表

  1. 在 Google Cloud 控制台中,選取「Monitoring」,或使用下列按鈕:

    前往「Monitoring」

  2. 在導覽窗格中選取「指標探索器」
  3. 在「Find resource type and metric」欄位中輸入值 spanner.googleapis.com/instance/cpu/utilization_by_operation_type ,然後選取方塊下方顯示的資料列。
  4. 在「篩選器」欄位中輸入值 instance_id,然後輸入要檢查的執行個體 ID,並按一下「> 套用」
  5. 在「Group By」(分組依據) 欄位中,從下拉式清單選取 category。圖表會顯示依作業類型或類別分組的使用者工作 CPU 使用率。

雖然上一節的「依優先順序劃分的 CPU 使用率」指標有助於判斷使用者或系統工作是否導致 CPU 資源用量增加,但「依作業類型劃分的 CPU 使用率」指標可讓您深入瞭解,找出導致 CPU 使用率上升的使用者啟動作業類型。

找出導致 CPU 使用率增加的使用者要求

如要判斷是哪個特定使用者要求導致 executesql_select_readonly 作業類型圖表 (如圖 2 所示) 的 CPU 使用率飆升,請使用內建的內省統計資料表,進一步瞭解情況。

請參考下表,根據導致 CPU 使用率偏高的作業類型,判斷要查詢哪個統計資料表。

作業類型 查詢 讀取 交易
read_readonly
read_readwrite
read_withpartitiontoken
executesql_select_readonly
executesql_select_withpartitiontoken
executesql_select_readwrite
executesql_dml_readwrite
executesql_dml_partitioned
beginorcommit

舉例來說,如果問題是 read_withpartitiontoken,請使用讀取統計資料進行疑難排解。

在這種情況下,executesql_select_readonly 作業似乎是導致 CPU 使用率增加的原因。根據上表,您應查看旁邊的查詢統計資料,找出費用高昂、經常執行或掃描大量資料的查詢。

如要找出前一小時 CPU 使用率最高的查詢,您可以在 query_stats_top_hour 統計資料表上執行下列查詢。

SELECT text,
       execution_count AS count,
       avg_latency_seconds AS latency,
       avg_cpu_seconds AS cpu,
       execution_count * avg_cpu_seconds AS total_cpu
FROM spanner_sys.query_stats_top_hour
WHERE interval_end =
  (SELECT MAX(interval_end)
   FROM spanner_sys.query_stats_top_hour)
ORDER BY total_cpu DESC;

輸出內容會顯示依 CPU 使用率排序的查詢。找出 CPU 使用率最高的查詢後,您可以嘗試下列選項來調整查詢。

  • 查看查詢執行計畫,找出可能導致 CPU 使用率偏高的效率問題。

  • 檢查查詢,確保符合 SQL 最佳做法

  • 檢查資料庫結構定義設計,並更新結構定義,以便更有效率地查詢。

  • 建立基準,瞭解 Spanner 在間隔期間執行查詢的次數。您可以使用這個基準,偵測並調查任何異常偏離正常行為的原因。

如果找不到耗用大量 CPU 的查詢,請為執行個體增加運算資源。增加運算容量可提供更多 CPU 資源,讓 Spanner 處理更大的工作負載。詳情請參閱「增加運算容量」。

後續步驟