分析查詢效能

本頁說明如何使用查詢洞察資訊主頁,偵測及分析 Spanner 效能問題。

查詢洞察總覽

查詢洞察可協助您偵測及診斷 Spanner 資料庫的查詢和 DML (INSERTUPDATEDELETE) 陳述式效能問題。這項功能支援直覺化的監控工具,並提供診斷資訊,協助您在偵測到效能問題後,進一步找出根本原因。

查詢洞察會引導您完成下列步驟,協助您提升 Spanner 查詢效能:

  1. 判斷高 CPU 使用率是否是由效率不彰的查詢所致。
  2. 找出可能導致問題的查詢或代碼。
  3. 分析查詢或要求標記,找出問題。

查詢洞察功能適用於單一區域和多區域設定。

定價

查詢洞察功能不會產生額外費用。

資料保留

查詢洞察最多會保留 30 天的資料。 在「CPU 總使用率 (按『查詢』或『要求』標記顯示)」圖表中,Spanner 會從 SPANNER_SYS.QUERY_STATS_TOP_* 資料表擷取資料。這些資料表最多可保留 30 天。詳情請參閱「資料保留」一文。

必要的角色

視您是 IAM 使用者還是精細存取權控管使用者,您需要不同的 IAM 角色和權限。

身分與存取權管理 (IAM) 使用者

如要取得查看「查詢洞察」頁面所需的權限,請要求管理員在執行個體上授予下列 IAM 角色:

如要查看「查詢洞察」頁面,必須具備 Cloud Spanner 資料庫讀取者(roles/spanner.databaseReader) 角色的下列權限:

  • spanner.databases.beginReadOnlyTransaction
  • spanner.databases.select
  • spanner.sessions.create

精細的存取權控管機制使用者

如果您是精細存取權控管機制使用者,請確認您:

  • 具備 Cloud Spanner 檢視者(roles/spanner.viewer) 角色
  • 擁有精細的存取權控管權限,並獲派spanner_sys_reader系統角色或其中一個成員角色。
  • 在資料庫總覽頁面中,選取 spanner_sys_reader 或成員角色做為目前的系統角色。

詳情請參閱「關於精細的存取權控管機制」和「精細的存取權控管系統角色」。

查詢洞察資訊主頁

查詢洞察資訊主頁會根據您選取的資料庫和時間範圍,顯示查詢負載。查詢負載可測量所選時間範圍內,執行個體中所有查詢的總 CPU 使用率。資訊主頁提供一系列篩選器,協助您查看查詢負載。

如要查看資料庫的「查詢洞察」資訊主頁,請按照下列步驟操作:

  1. 在左側導覽面板中選取「查詢洞察」,查詢洞察資訊主頁隨即開啟。
  2. 從「資料庫」清單中選取資料庫。資訊主頁會顯示資料庫的查詢負載資訊。

資訊主頁的區域包括:

  1. 資料庫清單:篩選特定資料庫或所有資料庫的查詢負載。
  2. 時間範圍篩選器:依時間範圍 (例如小時、天或自訂範圍) 篩選查詢負載。
  3. CPU 總使用率 (所有查詢) 圖表:顯示所有查詢的匯總負載。
  4. CPU 總使用率 (按「查詢」或「要求」標記顯示) 圖表:顯示每個查詢或要求標記的 CPU 使用率。
  5. TopN 查詢和標記表格:顯示依 CPU 使用率排序的熱門查詢和要求標記清單。請參閱「找出可能導致問題的查詢或代碼」。

查詢洞察資訊主頁

資訊主頁效能

使用查詢參數為查詢加上標記,以最佳化查詢深入分析的成效。如果您未將查詢參數化或加上標記,系統可能會傳回過多結果,導致 TopN 查詢和標記表格無法正常載入。

確認效率不彰的查詢是否導致 CPU 使用率偏高

CPU 總使用率是衡量所選資料庫中執行的查詢作業,過去在一段時間內完成的工作量 (以 CPU 使用秒數為單位)。

所有查詢的 CPU 總使用率

查看圖表,瞭解下列問題的答案:

  • 哪個資料庫的負載過高?從「資料庫」清單中選取不同資料庫,找出負載最高的資料庫。如要找出負載最高的資料庫,您也可以在Google Cloud 控制台中查看資料庫的「CPU 使用率 - 總計」圖表。

    資料庫負載

  • CPU 使用率是否偏高?圖表是否顯示尖峰或長期偏高的趨勢?如果沒有看到 CPU 使用率偏高,問題就不是出在查詢。

  • CPU 使用率偏高的情況持續多久了?是最近才開始飆升,還是已經持續一段時間?使用範圍選取器選取不同時間範圍,瞭解問題持續時間。放大即可查看查詢負載尖峰時段。縮小時間軸,最多可查看一週的資料。

如果圖表顯示整體執行個體 CPU 使用率突然或持續升高,很可能是因為一或多個耗用資源的查詢。接著,您可以找出可能導致問題的查詢或要求代碼,進一步進行偵錯。

找出可能導致問題的查詢或要求標記

如要找出可能發生問題的查詢或要求標記,請觀察 TopN 查詢部分:

TopN 查詢

從這裡可以看出,指紋為 3216067328234137024 的查詢 CPU 使用率偏高,可能會有問題。

「TopN 查詢」表格會顯示所選時間範圍內,CPU 使用率最高的查詢總覽,並從高到低排序。TopN 查詢的數量上限為 100。

對於圖表,我們會從 TopN 查詢統計資料表擷取資料,該資料表有三種不同的精細程度:1 分鐘、10 分鐘和 1 小時。圖表中每個資料點的值,代表一分鐘間隔內的平均值。

建議您在 SQL 查詢中加入標記。查詢標記有助於找出高階建構中的問題,例如業務邏輯或微服務。

TopN 查詢表格

表格會顯示下列屬性:

  • 指紋:要求標記的雜湊 (如有),否則為查詢的雜湊。
  • 查詢或要求標記:如果查詢有相關聯的標記,系統會顯示要求標記。如果多個查詢具有相同的標記字串,系統會將這些查詢的統計資料歸入單一資料列,且 REQUEST_TAG 值會與標記字串相符。如要進一步瞭解如何使用要求標記,請參閱「解決要求標記和交易標記問題」。

    如果查詢沒有相關聯的標記,系統會顯示 SQL 查詢,只顯示約 64KB 的內容。如果是批次 DML,系統會將 SQL 陳述式扁平化為單一資料列,並使用半形分號分隔符號串連。系統會先移除連續相同的 SQL 文字,再進行截斷。

  • 查詢類型:指出查詢是 PARTITIONED_QUERYQUERYPARTITIONED_QUERY 是指使用從 PartitionQuery API 取得的 partitionToken 進行的查詢。所有其他查詢和 DML 陳述式都以 QUERY 查詢類型表示。

  • 「CPU Utilization」(CPU 使用率):查詢所耗用的 CPU 資源,以百分比表示。計算方式為查詢耗用的 CPU 資源除以該時間間隔內,資料庫上所有查詢耗用的 CPU 資源總數。這個值會顯示在水平長條上,範圍為 0 到 100。

  • 建議:Spanner 會分析查詢,判斷是否可透過改善索引來提升查詢效能。如果查詢效能不佳,系統會建議新的或經過修改的索引,以提升查詢效能。詳情請參閱「使用 Spanner 索引建議工具」。

  • CPU (%):查詢作業耗用的 CPU 資源,以百分比表示。計算方式為查詢作業耗用的 CPU 資源,除以該時間間隔內資料庫上所有查詢作業耗用的 CPU 資源總量。

  • 執行次數:Spanner 在間隔期間看到查詢的次數。

  • 平均延遲時間 (毫秒):資料庫內每個查詢執行的平均時間長度,以微秒為單位。這個平均值會排除結果集和額外負荷的編碼與傳輸時間。

  • 平均掃描列數:查詢掃描的平均列數,不包含已刪除的值。

  • 平均傳回列數:查詢傳回的平均列數。

  • 傳回的位元組數:查詢傳回的資料位元組數,不包含傳輸編碼額外負荷。

圖表之間可能存在差異

您可能會發現「CPU 總使用率 (所有查詢)」圖表與「CPU 總使用率 (按『查詢』或『要求』標記顯示)」圖表之間存在差異。有兩種情況可能導致這種情況:

  • 資料來源不同:Cloud Monitoring 資料會提供「CPU 總使用率 (所有查詢)」圖表,這類資料通常較準確,因為每分鐘都會推送,且保留期限為 45 天。另一方面,系統資料表資料 (用於提供「CPU 總使用率 (按『查詢』或『要求』標記顯示)」圖表) 可能會以 10 分鐘 (或 1 小時) 為間隔計算平均值,因此我們可能會遺失「CPU 總使用率 (所有查詢)」圖表中的高精細度資料。

  • 不同的匯總時間範圍:兩張圖表的匯總時間範圍不同。舉例來說,如果檢查的事件發生時間超過 6 小時,我們會查詢 SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE 資料表。在這種情況下,10:01 發生事件會經過 10 分鐘的彙整,並出現在對應 10:10 時間戳記的系統表格中。

下方的螢幕截圖顯示這類差異的範例。

圖表之間的差異

分析特定查詢或要求標記

如要判斷查詢或要求標記是否為問題的根本原因,請點選看起來負載最高或耗時最長的查詢或要求標記。您可以一次選取多個查詢和要求標記。

將滑鼠指標懸停在時間軸的查詢圖表上,即可瞭解查詢的 CPU 使用率 (以秒為單位)。

請查看下列項目,嘗試縮小問題範圍:

  • 高負荷狀態持續多久了?現在才變高嗎?還是長期偏高?變更時間範圍,找出查詢開始表現不佳的日期和時間。
  • CPU 使用率是否突然飆升?您可以變更時間範圍,研究查詢的 CPU 使用率記錄。
  • 資源用量是多少?這項查詢與其他查詢有何關聯? 查看表格,比較其他查詢與所選查詢的資料。 兩者有重大差異嗎?

如要確認所選查詢是否導致 CPU 使用率偏高,可以深入瞭解特定查詢形狀 (或要求標記) 的詳細資料,並在「查詢詳細資料」頁面進一步分析。

查看「查詢詳細資料」頁面

如要以圖形形式查看特定查詢形狀或要求標記的詳細資料,請按一下與查詢或要求標記相關聯的指紋。「查詢詳細資料」頁面隨即開啟。

查詢詳細資料頁面

「查詢詳細資料」頁面會顯示下列資訊:

  1. 查詢詳細資料文字:SQL 查詢文字,只顯示約 64KB 的內容。如果多個查詢項目具有相同的標記字串,系統會將這些查詢項目的統計資料分組,並在單一資料列中顯示,且 REQUEST_TAG 會與該標記字串相符。這個欄位只會顯示其中一個查詢的文字。如果是批次 DML,系統會將 SQL 陳述式集攤平為單一資料列,並使用半形分號分隔符號串連。系統會先移除連續相同的 SQL 文字,再進行截斷。
  2. 下列欄位的值:
    • 執行次數:Spanner 在間隔期間看到查詢的次數。
    • 平均 CPU 用量 (毫秒):在時間間隔內,執行個體 CPU 資源的查詢平均耗用的 CPU 資源 (以毫秒為單位)。
    • 平均延遲時間 (毫秒):資料庫內每個查詢執行的平均時間長度,以毫秒為單位。這個平均值會排除結果集和額外負荷的編碼與傳輸時間。
    • 平均傳回列數:查詢傳回的平均列數。
    • 平均掃描列數:查詢掃描的平均列數,不包含已刪除的值。
    • 平均位元組數:查詢傳回的資料位元組數,不包含傳輸編碼額外負荷。
  3. 查詢計畫範例圖表:圖表上的每個點代表特定時間的查詢計畫樣本,以及該計畫的特定查詢延遲時間。按一下圖表中的任一點,即可查看查詢計畫,並以視覺化的方式瞭解查詢執行期間採取的步驟。注意:如果查詢使用從 PartitionQuery API 取得的 partitionTokens,以及分區 DML 查詢,則不支援查詢計畫。
  4. 查詢計畫視覺化工具:顯示所選的取樣查詢計畫。圖表上的每個節點 (或資訊卡) 都代表一個疊代器,會從輸入內容取用資料列,並將資料列產生至父項。您可以點選每個疊代器,查看擴展資訊。
  5. 查詢延遲時間圖表:顯示所選查詢在一段時間內的查詢延遲時間值。還會顯示平均延遲時間。
  6. CPU 使用率圖表:顯示查詢在一段時間內的 CPU 使用率百分比。還會顯示平均 CPU 使用率。
  7. 執行次數/失敗圖表:顯示一段時間內的查詢執行次數,以及查詢執行失敗的次數。
  8. 掃描的資料列數圖表:顯示查詢在一段時間內掃描的資料列數。
  9. 傳回的資料列數圖表:顯示查詢在一段時間內傳回的資料列數。
  10. 時間範圍篩選器:依時間範圍 (例如小時、天或自訂範圍) 篩選查詢詳細資料。

對於圖表,我們會從 TopN 查詢統計資料表擷取資料,該資料表有三種不同的精細程度:1 分鐘、10 分鐘和 1 小時。圖表中每個資料點的值,代表一分鐘間隔內的平均值。

在稽核記錄中搜尋查詢的所有執行作業

如要在 Cloud 稽核記錄中搜尋特定查詢指紋的所有執行作業,請查詢稽核記錄,並搜尋與 TopN 查詢統計資料表中的 Fingerprint 欄位相符的任何 query_fingerprint。詳情請參閱「查詢和查看記錄檔總覽」一文。使用這個方法找出啟動查詢的使用者。

後續步驟