使用查詢洞察改善查詢效能

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

簡介

查詢洞察可協助您偵測、診斷及預防 Cloud SQL 資料庫的查詢效能問題。這項功能支援直覺化的監控工具,並提供診斷資訊,協助您在偵測到效能問題後,進一步找出根本原因。

有了查詢洞察資料,您就能在應用程式層級監控效能,並根據模型、檢視畫面、控制器、路徑、使用者和主機,追蹤應用程式堆疊中發生問題的查詢來源。查詢洞察工具可使用開放標準和 API,與您現有的應用程式監控 (APM) 工具和 Google Cloud服務整合。這樣一來,您就可以使用慣用的工具監控及排解查詢問題。

查詢洞察可協助您改善 Cloud SQL 查詢效能,方法是引導您完成下列步驟:

查詢 Cloud SQL Enterprise Plus 版的洞察資料

如果您使用的是 Cloud SQL Enterprise Plus 版本,則可以使用查詢洞察中的其他功能,執行進階查詢效能診斷作業。除了查詢洞察資訊資訊主頁的標準功能之外,Cloud SQL Enterprise Plus 版的查詢洞察資訊還可讓您執行下列操作:

  • 擷取並分析所有已執行查詢的等待事件。
  • 依據查詢、標記、等待事件類型等其他維度篩選匯總資料庫負載。
  • 擷取所有已執行查詢的查詢計畫。
  • 每分鐘最多可取樣 200 個查詢計畫。
  • 擷取長達 1 MB 的查詢字串。
  • 取得指標的近乎即時更新資料 (以秒為單位)。
  • 將指標的保留時間延長至 30 天。
  • 從索引顧問取得索引建議。
  • 在執行中查詢中終止工作階段或長時間執行的交易。
  • 使用 AI 輔助的疑難排解機制 (預先發布版)。

下表比較 Cloud SQL Enterprise 版的查詢洞察功能需求和功能,以及 Cloud SQL Enterprise Plus 版的查詢洞察功能。

比較區 查詢 Cloud SQL Enterprise 版的洞察資料 查詢 Cloud SQL Enterprise Plus 版的洞察資料
支援的資料庫版本 MySQL 5.7 以上版本 MySQL 8.0 以上版本
支援的機器類型 支援所有機器類型 不支援使用共用核心機器類型的執行個體
支援的地區 Cloud SQL 區域位置 Cloud SQL Enterprise Plus 版本的區域位置
指標保留期限 7 天 30 天
查詢長度限制上限 4500 個位元組 1 MB
查詢計畫取樣率上限 20 200
等待事件分析 無法使用 適用
索引分析工具建議 無法使用 可用
在執行中查詢中終止工作階段或長時間執行的交易 無法使用 可用
AI 輔助疑難排解 (預先發布版) 無法使用 可用

為 Cloud SQL Enterprise Plus 版本啟用查詢深入分析

如要為 Cloud SQL Enterprise Plus 版本啟用查詢洞察,請在 Cloud SQL Enterprise Plus 版本執行個體上啟用查詢洞察時,選取「啟用 Enterprise Plus 功能」

定價

您無須額外付費,即可在 Cloud SQL Enterprise 或 Cloud SQL Enterprise Plus 版本的執行個體上查看查詢洞察資料。

儲存空間需求

Cloud SQL Enterprise 版的查詢洞察不會占用 Cloud SQL 執行個體儲存空間中的任何儲存空間。指標會儲存在 Cloud Monitoring 中。如需瞭解 API 要求的定價,請參閱 Cloud Monitoring 的定價。Cloud Monitoring 提供免額外付費的等級。

Cloud SQL Enterprise Plus 版的查詢洞察會將指標資料儲存在 Cloud SQL 執行個體所附加的磁碟上,且需要啟用自動增加儲存空間的設定。

七天資料的儲存空間需求約為 45 GB。30 天需要約 180 GB。Cloud SQL Enterprise Plus 版本的查詢洞察最多會使用 130 MB 的 RAM。指標應在查詢完成後一分鐘內,即可在查詢洞察中使用。須支付適用的儲存空間費用

事前準備

使用查詢深入分析功能前,請先完成下列步驟。

  1. 新增必要角色和權限
  2. 啟用 Cloud Trace API
  3. 如果您使用的是 Cloud SQL Enterprise Plus 版本的查詢洞察資料,請確認已為執行個體啟用「啟用自動增加儲存空間」

必要角色和權限

如要使用查詢洞察資料,您必須授予預先定義的角色、建立自訂角色,或是為使用者帳戶提供必要的 Identity and Access Management 權限。

如要進一步瞭解如何授予角色,請參閱「管理存取權」。

如要取得在「查詢深入分析」資訊主頁存取歷史查詢執行資料所需的權限,請要求管理員在代管 Cloud SQL 執行個體的專案中,授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色具備查詢洞察資訊資訊主頁中查詢執行資料所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

您必須具備下列權限,才能在「查詢深入分析」資訊主頁中存取查詢執行的歷來資料:

  • databaseinsights.aggregatedStats.query
  • databaseinsights.timeSeries.query

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

舉例來說,您可以要求管理員授予您 資料庫洞察檢視者 (roles/databaseinsights.viewer) 預先定義的角色,以便在資料庫洞察中使用資料。接著,您可以在 Cloud SQL 中要求管理員授予下列預先定義角色之一:

啟用 Trace API

如要查看查詢計畫及其端對端檢視畫面, Google Cloud 專案必須啟用 Trace API。這項設定可讓您的Google Cloud 專案免費接收來自已驗證來源的追蹤記錄資料。這項資料可協助您偵測及診斷執行個體的效能問題。

如要確認是否已啟用 Trace API,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「API 和服務」

    前往「APIs and Services」(API 和服務) 頁面

  2. 點選「啟用 API 和服務」
  3. 在搜尋列中輸入 Trace API
  4. 如果畫面顯示「API enabled」,表示這個 API 已啟用,您不需採取任何行動。如果畫面未顯示這項資訊,請按一下「Enable」

啟用自動增加儲存空間

如果您使用的是 Cloud SQL Enterprise Plus 版的查詢洞察功能,請確認執行個體的自動增加儲存空間功能設定仍處於啟用狀態。根據預設,Cloud SQL 執行個體會啟用這個選項。

如果您先前已停用此執行個體設定,但想為 Cloud SQL Enterprise Plus 版本啟用查詢洞察功能,請先重新啟用自動增加儲存空間功能。您無法關閉自動增加儲存空間功能,也無法為 Cloud SQL Enterprise Plus 版本啟用查詢洞察資料。

啟用查詢洞察

啟用查詢深入分析後,所有其他作業都會暫時停止。這些作業包括健康檢查、記錄、監控和其他執行個體作業。

控制台

為執行個體啟用查詢洞察

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在「Configuration」圖塊中,按一下「Edit configuration」
  4. 在「自訂執行個體」專區中,展開「查詢洞察資料」
  5. 勾選「啟用查詢洞察」核取方塊。
  6. 選用:為執行個體選取其他功能。 部分功能僅適用於 Cloud SQL Enterprise Plus 版本。
  7. 功能 說明 Cloud SQL Enterprise 版 Cloud SQL Enterprise Plus 版本
    啟用 Enterprise Plus 功能 勾選這個核取方塊,即可為 Cloud SQL Enterprise Plus 版本啟用查詢洞察。 Cloud SQL Enterprise Plus 版的查詢洞察可讓您終止執行中查詢中的工作階段和長時間執行的交易,啟用索引建議工具,加快查詢處理速度,並將指標資料保留期限延長至 30 天。啟用 Cloud SQL Enterprise Plus 版本的查詢洞察功能時,系統會自動啟用索引顧問建議。如要停用索引建議工具的建議,請取消勾選這個核取方塊。 您必須勾選這個核取方塊,才能啟用索引顧問建議和 AI 輔助疑難排解功能 (預覽)。 無法使用 可用

    預設:已停用
    AI 輔助的疑難排解機制 勾選這個核取方塊,即可啟用效能異常偵測、根本原因和情境分析功能,並取得修正查詢和資料庫問題的建議。這項功能目前為預先發布版,您只能使用 Google Cloud 控制台啟用及存取這項功能。詳情請參閱「使用 AI 輔助功能觀察及排解問題」。 無法使用 可用

    預設:已停用
    儲存用戶端 IP 位址 勾選這個核取方塊,即可儲存用戶端 IP 位址。Cloud SQL 可儲存查詢來源的 IP 位址,讓您將資料分組並據此計算指標。查詢來自多個主機。查看用戶端 IP 位址查詢的圖表,有助於找出問題來源。 可用

    預設:已停用
    可用

    預設:已停用
    儲存應用程式標記 勾選這個核取方塊即可啟用應用程式代碼儲存空間。儲存應用程式標記有助於您判斷發出要求的 API 和模型檢視控制器 (MVC) 路徑,並將資料分組,據此計算指標。使用這個選項時,您必須使用 sqlcommenter 開放原始碼物件-關聯式對應 (ORM) 自動檢測程式庫,為查詢加上特定標記。這項資訊有助於查詢洞察功能找出問題來源,以及問題來源的 MVC。應用程式路徑可協助您監控應用程式。 可用

    預設值:已停用
    可用

    預設值:已停用
    自訂查詢長度 選取這個核取方塊,即可自訂查詢字串長度限制。查詢越長,對分析查詢越有幫助,但也會需要更多記憶體。任何超過指定上限的查詢字串,在顯示時都會遭到截斷。

    變更查詢長度限制時,您必須重新啟動執行個體。您仍可在超過長度限制的查詢中加入標記。
    您可以將位元組限制從 256 位元組設為 4500 位元組。

    預設值1024
    您可以以位元組為單位指定限制,範圍從 11048576

    預設值1024 個位元組 (1 KB)。

    設定取樣率上限 選取這個核取方塊即可設定最大取樣率。取樣率是指執行個體的所有資料庫每分鐘擷取的已執行查詢計畫樣本數。提高取樣率或許可以產生更多資料點,但也有可能增加效能負擔。如要停用取樣功能,請將值設為 0 您將這個值從 0 變更為 20 的數字。

    預設值5
    您可以將上限提高至 200,以便提供更多資料點。

    預設值5
  8. 按一下 [儲存]

為多個執行個體啟用查詢洞察

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 按一下任一資料列的「More Actions」 選單。
  3. 選取「啟用查詢洞察」
  4. 在對話方塊中,選取「為多個執行個體啟用查詢洞察」核取方塊。
  5. 按一下「啟用」
  6. 在後續對話方塊中,選取要啟用查詢洞察的執行個體。
  7. 按一下「啟用查詢洞察」

gcloud

如要使用 gcloud 為 Cloud SQL 執行個體啟用查詢洞察,請將 INSTANCE_ID 替換為執行個體的 ID,然後執行 gcloud sql instances patch 並加上 --insights-config-query-insights-enabled 旗標,如下所示。

如果您為 Cloud SQL Enterprise Plus 版本的執行個體啟用查詢深入分析資料,系統就會自動啟用索引顧問建議。

    gcloud sql instances patch INSTANCE_ID \
    --insights-config-query-insights-enabled
  

此外,請使用下列一或多個選用標記:

  • --insights-config-record-client-address

    儲存查詢來源的用戶端 IP 位址,並協助您將資料分組,據此計算指標。查詢來自多個主機。查看用戶端 IP 位址查詢的圖表,有助於找出問題來源。

  • --insights-config-record-application-tags

    儲存應用程式標記,協助您判斷發出要求的 API 和模型檢視控制器 (MVC) 路徑,並將資料分組以產生相關指標。這個選項需要您使用特定一組標記來註解查詢。您可以使用 sqlcommenter 開放原始碼物件關聯對應 (ORM) 自動檢測程式庫來執行這項操作。這項資訊有助於查詢洞察功能找出問題來源,以及問題來自哪個 MVC。應用程式路徑可協助您監控應用程式。

  • --insights-config-query-string-length

    設定預設查詢長度限制。查詢越長,用於分析查詢的用途就越廣,但所需記憶體也越多。您必須重新啟動執行個體,才能變更查詢長度。您仍可在超過長度限制的查詢中加入標記。對於 Cloud SQL Enterprise 版,您可以指定從 2564500 的值 (以位元組為單位)。預設查詢長度為 1024 個位元組。對於 Cloud SQL Enterprise Plus 版本,您可以指定從 11048576 的位元組限制。預設值為 1024 位元組 (1 KB)。

  • --query_plans_per_minute

    根據預設,執行個體的所有資料庫每分鐘最多可擷取 5 個已執行的查詢方案樣本。提高取樣率或許可以產生更多資料點,但也有可能增加效能負擔。如要停用取樣功能,請將這個值設為 0。對於 Cloud SQL Enterprise 版,您可以將值變更為 0 到 20。對於 Cloud SQL Enterprise Plus 版本,您可以將上限提高至 200,以提供更多資料點。

更改下列內容:

  • INSIGHTS_CONFIG_QUERY_STRING_LENGTH:要儲存的查詢字串長度,以位元組為單位。
  • API_TIER_STRING:要為執行個體使用的自訂執行個體設定
  • REGION:執行個體的區域
gcloud sql instances patch INSTANCE_ID \
--insights-config-query-insights-enabled \
--insights-config-query-string-length=INSIGHTS_CONFIG_QUERY_STRING_LENGTH \
--query_plans_per_minute=QUERY_PLANS_PER_MINUTE \
--insights-config-record-application-tags \
--insights-config-record-client-address \
--tier=API_TIER_STRING \
--region=REGION
  

REST v1

如要使用 REST API 為 Cloud SQL 執行個體啟用查詢洞察功能,請使用 insightsConfig 設定呼叫 instances.patch 方法。

如果您為 Cloud SQL Enterprise Plus 版本的執行個體啟用查詢深入分析資料,系統就會自動啟用索引顧問建議。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID
  • INSTANCE_ID:執行個體 ID

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
  "settings" : {
     "insightsConfig" : {
       "queryInsightsEnabled" : true,
       "recordClientAddress" : true,
       "recordApplicationTags" : true,
       "queryStringLength" : 1024,
       "queryPlansPerMinute" : 20,
   }
  }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2025-03-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

Terraform

如要使用 Terraform 為 Cloud SQL 執行個體啟用查詢洞察,請將 query_insights_enabled 標記設為 true

如果您為 Cloud SQL Enterprise Plus 版本的執行個體啟用查詢深入分析,系統就會自動啟用索引顧問建議。

此外,您也可以使用下列一或多個選用標記:

  • query_string_length:如果是 Cloud SQL Enterprise 版本,您可以指定從 2564500 的位元組值。預設查詢長度為 1024 個位元組。如為 Cloud SQL Enterprise Plus 版本,您可以指定從 11048576 的位元組限制。預設值為 1024 位元組 (1 KB)。
  • record_application_tags:如要記錄查詢中的應用程式代碼,請將值設為 true
  • record_client_address:如要記錄用戶端 IP 位址,請將值設為 true。預設值為 false
  • query_plans_per_minute:如果是 Cloud SQL Enterprise 版本,您可以將值從 0 設為 20。預設為 5。對於 Cloud SQL Enterprise Plus 版本,您可以將上限提高至 200,以提供更多資料點。

範例如下:

  resource "google_sql_database_instance" "INSTANCE_NAME" {
  name                = "INSTANCE_NAME"
  database_version    = "MYSQL_VERSION"
  region              = "REGION"
  root_password       = "PASSWORD"
  deletion_protection = false # set to true to prevent destruction of the resource
  settings {
    tier = "DB_TIER"
    insights_config {
      query_insights_enabled  = true
      query_string_length     = 2048 # Optional
      record_application_tags = true # Optional
      record_client_address   = true # Optional
      query_plans_per_minute  = 10 # Optional
    }
  }
  }
  

如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Google Cloud 專案。

    您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含 .tf 副檔名,例如 main.tf。在本教學課程中,檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。

    將範例程式碼複製到新建立的 main.tf 中。

    您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。

  3. 查看並修改要套用至環境的範例參數。
  4. 儲存變更。
  5. 初始化 Terraform。這項操作只需對每個目錄執行一次。
    terraform init

    如要使用最新版的 Google 供應器,請視需要加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,並在提示中輸入 yes,即可套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。

  3. 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

指標應在查詢完成後幾分鐘內,即可在查詢深入分析中使用。請詳閱 Cloud Monitoring 資料保留政策

查詢洞察追蹤記錄會儲存在 Cloud Trace 中。詳閱 Cloud Trace 資料保留政策

查看「查詢洞察」資訊主頁

「查詢洞察」資訊主頁會根據您選取的因素,顯示查詢負載。查詢負載可用於測量執行個體在所選時間範圍內,所有查詢產生的總工作量。資訊主頁提供一系列篩選器,方便您查看查詢負載。

如要開啟「查詢深入分析」資訊主頁,請按照下列步驟操作:

  1. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  2. 在 Cloud SQL 導覽選單中,按一下「查詢洞察」,或在「執行個體總覽」頁面中按一下「前往查詢洞察,進一步瞭解查詢和效能」
  3. 系統會開啟「查詢洞察」資訊主頁。視您是使用 Cloud SQL Enterprise 版本的查詢洞察,還是 Cloud SQL Enterprise Plus 版本的查詢洞察,查詢洞察資訊主頁會顯示以下有關執行個體的資訊:

Cloud SQL Enterprise Plus 版本

顯示 Enterprise Plus 版的查詢洞察資訊主頁,其中的選單可依資料庫、使用者和用戶端位址進行篩選。您也可以依 1 小時、6 小時、1 天或 30 天的時間範圍篩選資料,或是選取自訂時間範圍。這張圖表顯示在 1 小時內,所有查詢的資料庫負載 (以執行時間為單位,以毫秒為單位)。
  • 所有查詢:顯示所選時間範圍內所有查詢的資料庫負載。每個查詢都會以不同顏色標示。如要查看特定查詢的時間點,請將游標懸停在查詢的圖表上。
  • 資料庫:篩選特定資料庫或所有資料庫的查詢負載。
  • 使用者:篩選特定使用者帳戶的查詢負載。
  • 用戶端位址:篩選來自特定 IP 位址的查詢負載。
  • 時間範圍:依時間範圍篩選查詢負載,例如 1 小時、6 小時、1 天、7 天、30 天或自訂範圍。
  • 等待事件類型:依 CPU 和鎖定等待事件類型篩選查詢負載。
  • 查詢等待事件類型資料庫使用者代碼用戶端位址:依據圖表中對資料庫負擔最重的前幾個維度進行排序。請參閱篩選資料庫負載

Cloud SQL Enterprise 版

顯示「查詢深入分析」資訊主頁,其中包含資料庫、使用者和地址的下拉式選單。下拉式選單右側有一個篩選器,可用於設定時間範圍。此外,圖表會顯示熱門查詢的資料庫負載。圖表底部有 CPU 容量、CPU 和 CPU 等待、IO 等待和鎖定等待的選項方塊,以及查詢和標記的選項卡。
  • 資料庫:篩選特定資料庫或所有資料庫的查詢負載。
  • 使用者:篩選特定使用者帳戶的查詢負載。
  • 用戶端位址:篩選來自特定 IP 位址的查詢負載。
  • 時間範圍:依時間範圍篩選查詢負載,例如 1 小時、6 小時、1 天、7 天、30 天或自訂範圍。
  • 資料庫負載圖表:根據篩選的資料顯示查詢負載圖表。
  • CPU 容量、CPU 和 CPU 等待、IO 等待和鎖定等待: 根據您選取的選項篩選負載。如要瞭解這些篩選器的詳細資訊,請參閱「查看熱門查詢的資料庫負載」。
  • 查詢標記:依所選查詢或所選 SQL 查詢標記篩選查詢負載。請參閱篩選資料庫負載

查看所有查詢的資料庫負載

資料庫查詢負載是指在所選資料庫中,執行查詢作業過去一段時間的衡量指標,以 CPU 使用秒數為單位。每個執行中的查詢都會使用或等待 CPU 資源、I/O 資源或鎖定資源。資料庫查詢負載是指特定時間範圍內完成的所有查詢耗用的時間與實際時間的比率。

頂層查詢洞察資訊主頁會顯示「資料庫負載:所有熱門查詢」圖表。您可以使用資訊主頁上的下拉式選單,針對特定資料庫、使用者或用戶端位址篩選圖表。

Cloud SQL Enterprise Plus 版本

顯示資料庫負載圖表,其中包含 CPU 容量、CPU 和 CPU 等待、IO 等待和鎖定等待的負載。

Cloud SQL Enterprise 版

顯示資料庫負載圖表,其中包含 CPU 容量、CPU 和 CPU 等待、I/O 等待和鎖定等待的負載。

圖表中的彩色線條代表查詢負載,並分為以下類別:

  • CPU 容量:執行個體可用的 CPU 數量。
  • CPU 和 CPU 等待:有效狀態查詢耗用的時間與實際時間的比率。IO 和鎖定等待不會阻斷處於有效狀態的查詢。這個指標可能表示查詢正在使用 CPU,或是在其他程序使用 CPU 時,等待 Linux 排程器排定執行查詢的伺服器程序。
  • IO 等待:等待 IO 的查詢耗用的時間與實際時間的比率。IO 等待包含讀取 IO 等待和寫入 IO 等待。如要查看 I/O 等待時間的詳細資料,您可以前往 Cloud Monitoring。詳情請參閱「Cloud SQL 指標」。
  • 鎖定等待:等待鎖定的查詢耗用的時間與實際時間的比率。當中包含鎖定等待、LwLock 等待和緩衝區鎖定等待。如要查看鎖定等待的詳細資料,請使用 Cloud Monitoring。詳情請參閱「Cloud SQL 指標」。

圖表中的彩色線條代表每個資料庫負載的執行時間。查看圖表並使用篩選選項,探索下列問題:

  • 查詢負載是否很高?圖表是否會隨時間推移而出現尖峰或升高?如果您沒有看到高負載,表示問題並非出在查詢。
  • 負載高峰持續多久?是現在才高,還是長期以來都很高?使用範圍選取器選取各種時間範圍,找出問題持續多久。放大即可查看發生查詢負載尖峰的時間範圍。縮小時間軸,最多可查看一週的時間軸。
  • 造成負載過高的原因為何?您可以選取選項來檢查 CPU 容量、CPU 和 CPU 等待、鎖定等待或 IO 等待。每個選項的圖表都會以不同顏色標示,方便您找出負載量最高的選項。圖表中的深藍色線條代表系統的最大 CPU 容量。您可以比較查詢負載與 CPU 系統容量上限。這項比較功能有助於判斷執行個體是否缺乏 CPU 資源。
  • 哪個資料庫發生負載問題?從「資料庫」下拉式選單中選取不同的資料庫,找出負載量最高的資料庫。
  • 特定使用者或 IP 位址是否會導致負載增加?從下拉式選單中選取不同的使用者和地址,找出造成負載較高的問題。

篩選資料庫負載

您可以依查詢或標記篩選資料庫負載。如果您使用 Cloud SQL Enterprise Plus 版的查詢洞察資料,可以自訂資料庫負載圖表,使用下列任一維度細分顯示的資料:

  • 所有查詢

  • 等待事件類型

  • 資料庫

  • 使用者

  • 標記

  • 用戶端位址

如要自訂資料庫負載圖表,請從「資料庫負載 (根據執行時間)」下拉式選單中選取一個維度。

查看資料庫負載的主要因素

如要查看資料庫負載的最大貢獻者,可以使用「各資料庫負載的最大維度」表格。「依資料庫負載排序的前幾個維度」表格會顯示您在「依執行時間排序的資料庫負載」圖表下拉式選單中選取的時間範圍和維度中,占比最大的因素。您可以修改時間範圍或維度,查看不同維度或時間範圍的頂尖貢獻者。

在「依資料負載排序的熱門維度」表格中,您可以選取下列分頁。

Tab 鍵 說明
查詢 表格會根據總執行時間,列出最熱門的正規化查詢。針對每個查詢,資料欄會顯示以下資料:
  • 平均執行時間 (毫秒):查詢執行的平均時間。
  • 總執行時間 (毫秒):特定查詢的總執行時間。
  • 傳回的平均列數:查詢擷取的平均列數。
  • 呼叫次數:應用程式呼叫查詢的次數。
  • %load by SELECTED_DIMENSION:百分比折線圖會顯示所選維度在特定查詢中的分布情形。
等待事件類型 表格會顯示在所選時間範圍內發生的熱門等待事件類型清單。這份表格僅適用於 Cloud SQL Enterprise Plus 版本的查詢洞察。
  • 平均等待時間 (毫秒):查詢在特定等待事件類型中花費的平均時間。
  • 總等待時間 (毫秒):查詢在特定等待事件類型中花費的總執行時間。
  • 等待事件類型數量:特定等待事件類型在所選時間範圍內發生的次數。
  • %負載 (依 SELECTED_DIMENSION 分類):百分比折線圖會顯示資料庫負載圖表所選維度如何針對特定等待事件類型進行分配。
資料庫 表格會列出在所選時間範圍內,所有已執行查詢中負載量最高的資料庫。
  • 資料庫中的平均執行時間 (毫秒):查詢在特定資料庫中執行的平均時間。
  • 資料庫總執行時間 (毫秒):查詢在特定資料庫中執行的總時間。
  • %負載 (依 SELECTED_DIMENSION 劃分):百分比折線圖會顯示為資料庫負載圖表選取的維度,如何在特定資料庫中分布。
使用者 這個表格會顯示所有執行查詢中,所選時間範圍內的前幾名使用者。
  • 使用者平均耗費時間 (毫秒):查詢在特定使用者身上花費的平均時間。
  • 在使用者端耗費的總時間 (毫秒)。:查詢在特定使用者端耗費的總執行時間。
  • %負載量 (按 SELECTED_DIMENSION 劃分):百分比折線圖會顯示為資料庫負載圖選取的維度,如何在特定使用者之間分配。
標記 如要瞭解標記,請參閱「依查詢標記篩選」一文。
用戶端位址 這個表格會顯示所有執行查詢中,所選時間範圍內的前幾名使用者。
  • 在用戶端位址耗費的總時長 (毫秒):查詢在特定用戶端耗費的總執行時間。
  • %load by SELECTED_DIMENSION:百分比折線圖會顯示為資料庫負載圖表選取的維度,如何在特定用戶端中分布。

依查詢篩選

「Top queries」表格會概略說明造成最多查詢負載的查詢。表格會顯示所選時間範圍內的所有標準化查詢,以及在「查詢洞察」資訊主頁上選取的選項。並依據您選取的時間範圍內的總執行時間排序查詢。

Cloud SQL Enterprise Plus 版本

如要排序表格,請選取資料欄標題。

顯示資料庫負載圖表,其中包含查詢負載,並選取 CPU 容量、CPU 和 CPU 等待、IO 等待和鎖定等待的篩選器。

Cloud SQL Enterprise 版

如要排序表格,請從「篩選查詢」中選取資料欄標題或屬性。

顯示資料庫負載圖表,其中包含查詢負載,並選取 CPU 容量、CPU 和 CPU 等待、IO 等待和鎖定等待的篩選器。

下表列出以下屬性:

  • Query:標準化查詢字串。根據預設,查詢洞察資料只會顯示查詢字串中的 1024 個字元。標示為 UTILITY COMMAND 的查詢通常包含 BEGINCOMMITEXPLAIN 指令或包裝函式指令。
  • 資料庫:執行查詢的資料庫。
  • 最佳化建議:建議的最佳化建議,例如建立索引,可改善查詢效能。
  • 負載 (根據總時間)/負載 (根據 CPU)/負載 (根據 IO 等待時間)/負載 (根據鎖定等待時間): 可用來篩選特定查詢的選項,以找出負載量最大的查詢。
  • 各查詢的負載百分比:個別查詢的負載百分比。
  • 分析延遲時間:如果您為這個例項啟用了AI 輔助疑難排解 (預先發布版),請按一下這個連結,排解查詢速度緩慢的問題。
  • 平均執行時間 (毫秒):查詢的平均執行時間。
  • 呼叫次數:應用程式呼叫查詢的次數。
  • 平均傳回列數:查詢傳回的平均列數。
  • 平均掃描列數:查詢掃描的平均列數。

查詢洞察資料儲存庫,並只顯示已規格化的查詢。

根據預設,查詢洞察不會收集 IP 位址或代碼資訊。您可以啟用查詢洞察功能來收集這類資訊,並視需要停用收集功能。

查詢計畫追蹤記錄不會收集或儲存任何常數值,並移除常數可能顯示的任何 PII 資訊。

查詢洞察會顯示經過正規化的查詢,也就是 ? 會取代文字常數值。在以下範例中,名稱常數已移除,並由 ? 取代。

  UPDATE
    "demo_customer"
  SET
    "customer_id" = ?::uuid,
    "name" = ?,
    "address" = ?,
    "rating" = ?,
    "balance" = ?,
    "current_city" = ?,
    "current_location" = ?
  WHERE
    "demo_customer"."id" = ?
  

依查詢標記篩選

如要排解應用程式問題,您必須先在 SQL 查詢中新增標記。查詢負載標記會提供所選標記在一段時間內的查詢負載明細。

查詢洞察提供以應用程式為中心的監控功能,可診斷使用 ORM 建構的應用程式效能問題。如果您負責整個應用程式堆疊,查詢洞察會從應用程式檢視畫面提供查詢監控功能。查詢標記可協助您找出較高層級建構的問題,例如商業邏輯或微服務。

您可以根據業務邏輯標記查詢,例如付款、庫存、業務分析或運送標記。接著,您可以找出各種業務邏輯建立的查詢負載。舉例來說,您可能會觀察到意外事件,例如下午 1 點時出現的業務分析代碼尖峰,或是上週支付服務的趨勢出現意外成長。

為了計算標記的資料庫負載,查詢深入分析會使用每個使用所選標記的查詢所需的時間。這項工具會使用時鐘時間,計算分鐘邊界上的完成時間。

如要在查詢洞察資訊主頁上查看代碼表格,請選取「代碼」。表格會依據標記的總負載 (根據總時間) 排序。

顯示「查詢洞察」資訊主頁,其中包含標記負載和標記清單。

您可以從「篩選標記」選取屬性,或按一下資料欄標題來排序表格。下表列出以下屬性:

  • Action、Controller、Framework、Route、Application、DB driver:您在查詢中新增的每個屬性都會顯示為一欄。如要依標籤篩選資料,則必須新增至少一個屬性。
  • 負載 (根據總時間)/負載 (根據 CPU)/負載 (根據 IO 等待時間)/負載 (根據鎖定等待時間):篩選特定查詢的選項,找出每個選項的最大負載。
  • 平均執行時間 (毫秒):查詢執行的平均時間。
  • 平均傳回列數:查詢傳回的平均列數。
  • 平均掃描列數:查詢掃描的平均列數。
  • 呼叫次數:應用程式呼叫查詢的次數。
  • 資料庫:執行查詢的資料庫。

查看特定查詢或代碼的查詢詳細資料

如要判斷特定查詢或代碼是否為問題的根本原因,請分別按照「查詢」或「代碼」分頁中的步驟操作:

  1. 如要依遞減順序排序清單,請按一下「Load by total time」標題。
  2. 按一下清單頂端的查詢或標記。它負載量最高,耗用時間也比其他項目長。

「Query details」頁面隨即開啟,並顯示所選查詢或代碼的詳細資料。

檢查特定查詢負載

所選查詢的「查詢詳細資料」頁面如下所示:

顯示特定查詢的資料庫負載和延遲時間圖表。

「資料庫負載 - 特定查詢」圖表會顯示正規化查詢過去在所選查詢中執行的工作量 (以 CPU 秒數為單位),為了計算負載,系統會使用在分鐘邊界完成的正規化查詢所需的時間,與實際時間的比率。表格頂端會顯示經過標準化處理的查詢前 1024 個字元,其中會移除匯總和 PII 的文字。

顯示資料庫負載圖表,其中包含特定查詢的負載,以及為 CPU 容量、CPU 和 CPU 等待時間、IO 等待時間和鎖定等待時間所選的篩選器。

如同查詢總數圖表,您可以依據「資料庫」、「使用者」和「用戶端位址」篩選特定查詢的負載。查詢負載會分為 CPU 容量CPU 和 CPU 等待I/O 等待鎖定等待

檢查特定標記查詢負載

所選代碼的資訊主頁如下所示。舉例來說,如果來自微服務付款的所有查詢都標記為 payment,您可以查看標記 payment,瞭解目前的查詢負載量趨勢。

在頁面上顯示特定標記的資料庫負載和延遲時間圖表。

「資料庫負載 - 特定標記」圖表會顯示與所選標記相符的查詢過去在所選資料庫中執行的工作量趨勢,以 CPU 使用秒數為單位。如同「查詢總數」圖表,您可以依據「資料庫」、「使用者」和「用戶端位址」篩選特定代碼的負載。

檢查取樣查詢計畫中的作業

查詢計畫會擷取查詢範例,並將其細分為個別作業。並說明及分析查詢中的每項作業。

MySQL 5.7 會透過 EXPLAIN 檢視畫面提供預估的查詢計畫,而 MySQL 8.0 以上版本則會透過 EXPLAIN ANALYZE 檢視畫面提供已執行的查詢計畫。預估查詢計劃會提供查詢的預估執行時間,而已執行查詢計劃則會提供特定查詢的每個執行步驟即時資訊。

對於下列 EXPLAIN 陳述式支援的查詢,MySQL 5.7 中的查詢計畫也受到支援:

  • 針對單一資料表:INSERT、SELECT、UPDATE 和 DELETE。
  • 針對多個資料表:SELECT、UPDATE 和 DELETE。

您可以在 MySQL 8.0 以上版本中,針對 EXPLAIN ANALYZE 支援的所有查詢產生查詢計畫。這項工具會顯示 MySQL 在單一表格和多個表格的 SELECT 查詢上花費的時間。Cloud SQL 不支援產生多資料表資料操縱語言 (DML) 查詢計畫,因為 EXPLAIN ANALYZE 不支援這些查詢。

查詢計畫範例會針對與正規化查詢相關的查詢計畫範例,提供 EXPLAIN ANALYZE 檢視畫面。這些是執行的查詢計畫,可提供查詢計畫中每個作業所需的活動時間細目。

「查詢計畫樣本」圖表會顯示在特定時間執行的所有查詢計畫,以及每個計畫的執行時間。您可以變更每分鐘擷取查詢方案樣本的頻率。請參閱啟用查詢洞察

範例查詢計畫的圖表,圖表底部顯示執行時間 (x 軸),右側顯示執行時間 (秒數)。

根據預設,右側面板會顯示花費最長時間的查詢計畫樣本詳細資料,如「查詢計畫樣本」圖表所示。如要查看其他查詢計畫的詳細資料,請按一下圖表中的相關圓圈。展開詳細資料後,您會看到查詢計畫中所有作業的模型。

每項作業都會顯示作業的延遲時間、傳回的資料列和作業成本。選取作業後,您可以查看更多詳細資料,例如共用命中區塊、架構類型、迴圈和規劃列。

查詢計畫會顯示查詢執行的每項作業的延遲時間和成本。

請嘗試回答以下問題,以便縮小問題範圍:

  1. 資源用量為何?
  2. 與其他查詢的關係為何?
  3. 消費量是否會隨時間而變化?

檢查延遲時間

延遲時間是指完成正規化查詢所需的實際時間。您可以使用「延遲」圖表檢查查詢或代碼的延遲時間。延遲時間資訊主頁會顯示第 50、95 和 99 個百分位數的延遲時間,以便找出異常行為。

下圖顯示特定查詢的資料庫負載圖表,其中已選取 CPU 容量、CPU 和 CPU 等待時間、IO 等待時間和鎖定等待時間的篩選器。

顯示特定查詢的查詢延遲時間圖表,其中已選取 CPU 容量、CPU 和 CPU 等待、IO 等待和鎖定等待的篩選器。

並行查詢的延遲時間以實際時間為計算單位,即便您為了執行部分查詢而使用多個核心,導致查詢負載超過查詢所需的量也一樣。

請嘗試回答以下問題,以便縮小問題範圍:

  • 造成負載過高的原因為何?選取選項,查看 CPU 容量、CPU 和 CPU 等待時間、I/O 等待時間或鎖定等待時間。
  • 負載高峰持續多久?目前是否只有高溫?或者,是否長時間處於高溫?變更時間範圍,找出負載開始效能不佳的日期和時間。
  • 延遲時間是否有突然爆增的情況?變更時間視窗,以便研究正規化查詢的歷來延遲時間。

追蹤問題來源

找出負載最高的區域和時間後,請進一步使用追蹤記錄來找出問題來源。

為了協助您找出問題的具體來源 (例如模型、檢視畫面、控制器、路徑、主機或使用者),查詢洞察資料會提供內文中端到端的應用程式追蹤記錄檢視畫面。這個檢視畫面可協助您瞭解特定要求在資料庫層級發生的情況,並透過模型、檢視畫面、控制器和路徑,找出有問題的查詢來源。

如果您啟用 OpenCensusOpenTelemetryopencensus span 資訊會連同 SQL 註解中的標記資訊傳送至資料庫。從應用程式傳送至 Cloud Logging 的任何追蹤記錄都會連結至資料庫查詢計畫追蹤記錄,協助找出問題來源。

按一下「Sample Query」畫面中的「End to end」分頁標籤,查看內容內追蹤記錄。

選取端對端標籤,即可查看標籤的具體資訊。「摘要」會顯示該代碼的每項作業 RPC 和總時間長度 (以毫秒為單位)。

如要判斷造成問題的用戶端和使用者,請使用「熱門用戶端位址」和「熱門使用者」資料表,找出負載量最高的項目。您可以將使用者或 IP 位址新增至篩選器,進一步分析特定使用者或用戶端位址。表格中的詳細資料包括查詢負載百分比、平均執行時間 (以毫秒為單位) 和呼叫次數。

圖片顯示,對於前幾名客戶位址,負載為 100%,平均執行時間為 19,568 秒,呼叫次數為 1,226 次。對於前幾名使用者,postgres 使用者負擔 100% 的負載,平均執行時間為 19,568 毫秒,且呼叫次數為 1,226 次。

您可以使用 Cloud Trace,查看查詢計畫中每個步驟的端對端追蹤記錄。在查詢深入分析資訊主頁上,按一下「在追蹤記錄中查看」連結,開啟 Cloud Trace 工具。追蹤記錄圖表會顯示在所選期間執行的所有追蹤記錄。

追蹤記錄圖表會顯示所選時間範圍內 (在本例中為一小時) 執行的所有追蹤記錄。這個頁面也會顯示一張表格,列出延遲時間、HTTP 方法、網址和追蹤記錄的執行時間。

詳情請參閱「尋找及查看追蹤記錄」。

在 SQL 查詢中加入標記

標記 SQL 查詢可簡化應用程式疑難排解作業。您可以使用 sqlcommenter 自動或手動為 SQL 查詢新增代碼。

搭配 ORM 使用 sqlcommenter

如果您使用 ORM 而非直接編寫 SQL 查詢,可能就找不到導致效能問題的應用程式程式碼。您也可能無法分析應用程式碼如何影響查詢效能。為解決這個問題,Query Insights 提供了名為 sqlcommenter 的開放原始碼程式庫。這個程式庫可協助開發人員和管理員使用 ORM 工具,找出導致效能問題的應用程式程式碼。

如果您同時使用 ORM 和 sqlcommenter,系統會自動建立標記。您不需要在應用程式中新增或變更程式碼。

您可以在應用程式伺服器上安裝 sqlcommenter。檢測程式庫可讓與 MVC 架構相關的應用程式資訊,連同查詢一起以 SQL 註解的形式傳播至資料庫。資料庫會挑選這些標記,並開始依標記記錄及匯總統計資料,這些資料與透過標準化查詢匯總的統計資料是平行的。查詢洞察會顯示標記,讓您瞭解哪個應用程式造成查詢負載,並找出造成效能問題的應用程式程式碼。

在 SQL 資料庫記錄中查看結果時,結果會如下顯示:

    SELECT * from USERS /action='run+this',
    controller='foo%3',
    traceparent='00-01',
    tracestate='rojo%2'/
  

支援的標記包括控制器名稱、路徑、架構和動作。

下列程式設計語言支援 sqlcommenter 中的 ORM 工具組合:

Python
  • Django
  • psycopg2
  • Sqlalchemy
  • Flask
Java
  • Hibernate
  • Spring
Ruby
  • Rails
Node.js
  • Knex.js
  • Sequelize.js
  • Express.js

如要進一步瞭解 sqlcommenter 以及如何在 ORM 架構中使用它,請參閱 sqlcommenter 說明文件

使用 SQLCommenter 新增標記

如果您未使用 ORM,請手動在 SQL 查詢中加入 sqlcommenter 標記或註解,並使用正確的 SQL 註解格式。您也必須為每個 SQL 陳述式加上註解,其中包含序列化的鍵/值組合。請至少使用下列其中一個鍵:

  • action=''
  • controller=''
  • framework=''
  • route=''
  • application=''
  • db driver=''

查詢洞察會捨棄所有其他鍵。

停用查詢洞察

控制台

如要使用 Google Cloud 控制台停用 Cloud SQL 執行個體的查詢洞察資料,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在「Configuration」圖塊中,按一下「Edit configuration」
  4. 在「設定選項」部分中,展開「查詢洞察資料」
  5. 取消勾選「Enable Query insights」核取方塊。
  6. 按一下 [儲存]

gcloud

如要使用 gcloud 停用 Cloud SQL 執行個體的查詢洞察,請先將 INSTANCE_ID 替換為執行個體的 ID,然後執行 gcloud sql instances patch 並加上 --no-insights-config-query-insights-enabled 標記,如下所示。

gcloud sql instances patch INSTANCE_ID \
  --no-insights-config-query-insights-enabled

REST

如要使用 REST API 停用 Cloud SQL 執行個體的查詢洞察資料,請呼叫 instances.patch 方法,並將 queryInsightsEnabled 設為 false,如下所示。

使用任何要求資料之前,請先替換以下項目:

  • project-id:專案 ID。
  • instance-id:執行個體 ID。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

JSON 要求主體:

{
  "settings" : { "insightsConfig" : { "queryInsightsEnabled" : false } }
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "[email protected]",
  "insertTime": "2021-01-28T22:43:40.009Z",
  "operationType": "UPDATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

停用 Cloud SQL Enterprise Plus 版本的查詢洞察功能

如要停用 Cloud SQL Enterprise Plus 版的查詢洞察,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Cloud SQL 執行個體」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 按一下 [編輯]
  4. 在「自訂執行個體」專區中,展開「查詢洞察資料」
  5. 取消勾選「Enable Enterprise Plus features」(啟用 Enterprise Plus 功能) 核取方塊。
  6. 按一下 [儲存]

後續步驟