本頁說明如何使用 CPU 使用率指標和圖表,以及其他內省工具,調查資料庫中 CPU 使用率偏高的問題。
判斷系統或使用者工作是否導致 CPU 使用率偏高
Google Cloud 控制台提供多種 Spanner 監控工具,可讓您查看執行個體最重要指標的狀態。其中一個是名為「CPU utilization - Total」(CPU 使用率 - 總計) 的圖表。這張圖表會顯示 CPU 總使用率 (以執行個體 CPU 資源百分比表示),並依工作優先順序和作業類型細分。工作分為兩種:使用者工作 (例如讀取和寫入),以及系統工作 (涵蓋自動執行的背景工作,例如壓縮和索引回填)。
圖 1 顯示「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 使用率 (以作業類型分組)」指標的範例圖表。
圖 2:CPU 使用率 (按作業類型顯示) 圖表,位於Google Cloud 控制台中。
如要限制顯示特定優先順序的資料,請使用圖表頂端的「優先順序」選單。並在折線圖上繪製每個作業類型或類別。圖表下方的類別會標示每個圖表。如要隱藏或顯示個別圖表,請選取或取消選取對應的類別篩選器。
或者,您也可以在指標探索工具中建立這張圖表,方法如下:
在 Metrics Explorer 中,依作業類型建立 CPU 使用率圖表
- 在 Google Cloud 控制台中,選取「Monitoring」,或使用下列按鈕:
- 在導覽窗格中選取「指標探索器」。
-
在「Find resource type and metric」欄位中輸入值
spanner.googleapis.com/instance/cpu/utilization_by_operation_type,然後選取方塊下方顯示的資料列。 -
在「篩選器」欄位中輸入值
instance_id,然後輸入要檢查的執行個體 ID,並按一下「> 套用」。 -
在「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 處理更大的工作負載。詳情請參閱「增加運算容量」。
後續步驟
瞭解 CPU 使用率指標。
瞭解其他內省工具。
進一步瞭解 Spanner 適用的 SQL 最佳做法。
請參閱 Spanner 指標清單。