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

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

簡介

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

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

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

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

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

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

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

比較區域 Cloud SQL Enterprise 版本的查詢洞察 Cloud SQL Enterprise Plus 版的查詢洞察
支援的資料庫版本 PostgreSQL 9.6 以上版本 PostgreSQL 12 以上版本
支援的機器類型 支援所有機器類型 不支援使用共用核心機型的執行個體或唯讀副本執行個體
支援的地區 Cloud SQL 區域位置 Cloud SQL Enterprise Plus 版區域位置
指標保留期限 7 天 30 天
查詢長度上限 4500 個位元組 100 KB
查詢計畫範例上限 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 執行個體的相同磁碟上,因此您必須啟用自動增加儲存空間的設定。

七天資料的儲存空間需求約為 36 GB。30 天約需 155 GB。 Cloud SQL Enterprise Plus 版本的查詢洞察最多會使用 10 MB 的 RAM (共用記憶體)。查詢完成後,查詢洞察資料中的指標預計會在 30 秒內提供。須支付適用的儲存空間費用

指標儲存空間限制

下列限制適用於 Cloud SQL Enterprise Plus 版本執行個體的查詢洞察:

  • 如果執行個體承受大量系統負載,在「查詢洞察」資訊主頁中查詢指標資料時,查詢作業可能需要較長時間才能載入或逾時。
  • 如果您使用舊備份還原執行個體,則可能會遺失備份時間和還原執行個體時間之間的指標,導致 Cloud SQL Enterprise Plus 版的查詢洞察功能無法使用。舉例來說,如果您在 4 月 30 日還原執行個體,並使用 4 月 25 日建立的備份檔,那麼 4 月 25 日到 4 月 30 日之間的所有指標可能會遺失。

事前準備

使用查詢洞察前,請先完成下列步驟。

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

必要角色和權限

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

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

如要取得存取查詢洞察資訊主控台歷來查詢執行資料所需的權限,請要求管理員在 Cloud SQL 執行個體所在的專案中,授予您下列 IAM 角色:

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

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

所需權限

如要在查詢洞察資訊主控台中存取查詢執行記錄資料,您必須具備下列權限:

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

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

舉例來說,在 Database Insights 中,您可以要求管理員授予您「Database Insights 檢視者」 (roles/databaseinsights.viewer) 預先定義角色。接著,在 Cloud SQL 中,請管理員授予您下列其中一個預先定義的角色:

啟用 Cloud Trace API

如要查看查詢計畫和端對端檢視畫面, Google Cloud 專案 必須啟用 Cloud Trace API。這項設定可讓Google Cloud 專案從已驗證的來源接收追蹤資料,且不需支付額外費用。這項資料有助於偵測及診斷執行個體的效能問題。

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

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

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

  2. 點選「啟用 API 和服務」
  3. 在搜尋列中輸入 Cloud Trace API
  4. 如果畫面顯示「API enabled」(API 已啟用),代表 API 已啟用,您不需執行任何操作。否則,請按一下「Enable」(啟用)

啟用自動增加儲存空間

如果您使用 Cloud SQL Enterprise Plus 版本的查詢洞察功能,請務必啟用自動增加儲存空間的執行個體設定。根據預設,Cloud SQL 執行個體會啟用這個選項。

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

啟用查詢洞察

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

控制台

為執行個體啟用查詢洞察

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

  2. 如要開啟執行個體的「總覽」頁面,請按一下執行個體名稱。
  3. 在「設定」方塊中,按一下「編輯設定」
  4. 在「自訂執行個體」部分,展開「查詢洞察」
  5. 勾選「啟用查詢洞察」核取方塊。
  6. 選用:為執行個體選取其他功能。 部分功能僅適用於 Cloud SQL Enterprise Plus 版本。
  7. 功能 說明 Cloud SQL Enterprise 版 Cloud SQL Enterprise Plus 版
    啟用 Enterprise Plus 功能 選取這個核取方塊,即可在 Cloud SQL 中為 Cloud SQL Enterprise Plus 版本啟用查詢洞察功能。 Cloud SQL Enterprise Plus 版本的查詢洞察功能可讓您終止執行中查詢中的工作階段和長時間執行的交易,並將指標資料保留時間延長至 30 天。您必須勾選這個核取方塊,才能啟用 AI 輔助疑難排解 (搶先版)。 無法使用 可用

    預設:已停用
    執行中查詢分析 可查看執行中查詢的詳細資料。如果 Cloud SQL Enterprise Plus 版本已啟用這項功能,您也可以終止工作階段和長時間執行的交易。選取這個核取方塊,即可為 PostgreSQL 適用的 Cloud SQL 執行個體啟用作用中查詢。 詳情請參閱「監控進行中的查詢」。 適用於

    預設:已停用
    可用

    預設:已停用
    索引顧問建議 提供索引建議,加快查詢處理速度。詳情請參閱「使用索引顧問」。啟用索引建議工具需要重新啟動執行個體。停用索引建議工具時,無須重新啟動執行個體。 無法使用 可用

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

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

    預設:已停用
    可用

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

    預設值:已停用
    可用

    預設值:已停用
    自訂查詢長度 選取這個核取方塊,即可自訂查詢字串長度限制。 查詢長度越長,就越適合用於分析查詢,但所需記憶體也會越多。如果查詢字串超過指定上限,系統會在顯示時截斷字串。

    變更查詢長度限制時,您必須重新啟動執行個體。 您仍可為超過長度限制的查詢新增標記。
    您可以將限制設為 2564500 之間的位元組數。

    預設1024
    您可以指定位元組限制,範圍從 1024100000



    預設值10000 個位元組。

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

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

    預設200
  8. 按一下 [儲存]

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

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

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

gcloud

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

    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 版本,您可以指定位元組限制,範圍從 1024100000。預設值為 10000 位元組。

  • --query_plans_per_minute

    根據預設,執行個體的所有資料庫每分鐘最多可擷取 5 個已執行的查詢方案樣本。提高取樣率或許可以產生更多資料點,但也有可能增加效能負擔。如要停用取樣功能,請將這個值設為 0。 如果是 Cloud SQL Enterprise 版,您可以將值從 0 變更為 20。如果是 Cloud SQL Enterprise Plus 版本,最多可增加至 200,提供更多資料點。根據預設,執行個體的所有資料庫每分鐘最多可擷取 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 執行個體啟用查詢洞察,請呼叫 instances.patch 方法並設定 insightsConfig

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

  • 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": "user@example.com",
  "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

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

  • query_string_length: 如果是 Cloud SQL Enterprise 版,您可以指定 2564500 之間的位元組值。 預設查詢長度為 1024 個位元組。 如果是 Cloud SQL Enterprise Plus 版本,您可以指定位元組限制,範圍從 1024100000。預設值為 10000 位元組。
  • record_application_tags:如要記錄查詢中的應用程式代碼,請將值設為 true
  • record_client_address:如要記錄用戶端 IP 位址,請將值設為 true。預設值為 false
  • query_plans_per_minute: 如果是 Cloud SQL Enterprise 版本,您可以將值設為 020。預設值為 5。 如果是 Cloud SQL Enterprise Plus 版本,您可以將上限提高至 200,提供更多資料點。根據預設,執行個體的所有資料庫每分鐘最多可擷取 200 個查詢方案樣本。

範例如下:

  resource "google_sql_database_instance" "INSTANCE_NAME" {
  name                = "INSTANCE_NAME"
  database_version    = "POSTGRESQL_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 天,或選取自訂時間範圍。這張圖表顯示一小時內所有查詢的資料庫負載 (以毫秒為單位)。
  • 所有查詢:顯示所選時間範圍內所有查詢的資料庫負載。每項查詢都會以不同顏色標示。如要查看特定查詢的時間點,請將指標懸停在查詢的圖表上。
  • 資料庫:篩選特定資料庫或所有資料庫的查詢負載。
  • 使用者:篩選特定使用者帳戶的查詢負載。
  • 用戶端位址:篩選來自特定 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 資源、IO 資源或鎖定資源。資料庫查詢負載是指特定時間範圍內完成的所有查詢耗用的時間與實際時間的比率。

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

Cloud SQL Enterprise Plus 版

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

Cloud SQL Enterprise 版

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

圖表中的彩色線條會顯示查詢負載,並依類別劃分:

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

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

  • 查詢負載是否偏高?圖表是否會隨著時間而出現尖峰或升高?如果沒有看到高負載,表示問題與查詢無關。
  • 高負荷狀態已持續多久?是現在才偏高,還是長期以來都偏高?使用範圍選取器選取不同時間範圍,瞭解問題持續時間。放大即可查看查詢負載尖峰時段。縮小時間軸,即可查看最多一週的資料。
  • 是什麼原因導致負載過高?您可以選取選項,檢查 CPU 容量、CPU 和 CPU 等待、鎖定等待或 IO 等待。每個選項的圖表都會以不同顏色顯示,方便您找出負載最高的選項。圖表中的深藍線代表系統的最大 CPU 容量。您可以比較查詢負載與 CPU 系統容量上限。這項比較有助於判斷執行個體是否耗盡 CPU 資源。
  • 哪個資料庫的負載過高?從「資料庫」下拉式選單選取不同資料庫,找出負載最高的資料庫。
  • 特定使用者或 IP 位址是否會導致負載增加?從下拉式選單中選取不同使用者和地址,找出造成負載較高的項目。

篩選資料庫負載

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

  • 所有查詢

  • 等待事件類型

  • 等待事件

  • 資料庫

  • 使用者

  • 標記

  • 用戶端位址

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

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

如要查看資料庫負載的主要貢獻者,可以使用「各資料庫負載的最大維度」表格。「資料庫負載中占比最大的維度」表格會顯示您在「依執行時間劃分的資料庫負載」圖表下拉式選單中選取的時間範圍和維度,並列出這些維度的主要影響因素。您可以修改時間範圍或維度,查看不同維度或時間範圍的主要貢獻者。

在「資料負載量最高的維度」表格中,您可以選取下列分頁標籤。

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

依查詢篩選

「熱門查詢」表格會概略顯示造成最多查詢負載的查詢。表格會顯示查詢洞察資訊主頁上所選時間範圍和選項的所有正規化查詢。系統會依據您選取時間範圍內的總執行時間,對查詢進行排序。

Cloud SQL Enterprise Plus 版

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

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

Cloud SQL Enterprise 版

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

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

表格會顯示下列屬性:

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

查詢洞察只會儲存及顯示正規化查詢。

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

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

如果是 PostgreSQL 9.6 和 10,查詢洞察會顯示正規化查詢,也就是以 ? 取代常值常數值。在下列範例中,系統會移除名稱常數,並以 ? 取代。

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

如果是 PostgreSQL 11 以上版本,$1$2 和類似變數會取代常值常數值。

  UPDATE
    "demo_customer"
  SET
    "customer_id" = $1::uuid,
    "name" = $2,
    "address" = $3,
    "rating" = $4,
    "balance" = $5,
    "current_city" = $6,
    "current_location" = $7
  WHERE
    "demo_customer"."id" = $8
  

依查詢標記篩選

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

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

您可以依據業務邏輯標記查詢,例如付款、庫存、業務分析或運送標記。然後找出各種業務邏輯建立的查詢負載。舉例來說,您可能會觀察到非預期的事件,例如下午 1 點的商家分析代碼尖峰,或是與前一週相比,付款服務的趨勢出現非預期的成長。

如要計算「標記的資料庫負載」,查詢洞察會使用每個查詢所花費的時間量,這些查詢會使用您選取的標記。這項工具會使用實際時間,以分鐘為單位計算完成時間。

在查詢洞察資訊主頁上,選取「標記」即可查看標記表格。 表格會依據標記的總載入時間排序。

顯示「查詢深入分析」資訊主頁,其中包含標記的負載和標記清單。

如要排序表格,請從「篩選標記」選取屬性,或按一下欄標題。表格會顯示下列屬性:

  • 動作、控制器、架構、路徑、應用程式、資料庫驅動程式:您新增至查詢的每個屬性都會顯示為資料欄。如要依標記篩選,至少須新增其中一個屬性。
  • 依總時間載入/依 CPU 載入/依 IO 等待時間載入/依鎖定等待時間載入:篩選特定查詢的選項,找出每個選項的最大負載。
  • 平均執行時間 (毫秒):查詢的平均執行時間。
  • 平均傳回列數:查詢平均傳回的列數。
  • 呼叫次數:應用程式呼叫查詢的次數。
  • 資料庫:執行查詢的資料庫。

查看特定查詢或標記的查詢詳細資料

如要判斷特定查詢或代碼是否為問題的根本原因,請分別在「查詢」或「代碼」分頁中執行下列操作:

  1. 如要依遞減順序排序清單,請點選「負載 (根據總時間)」標題。
  2. 按一下清單頂端的查詢或標記。這個函式的負載最高,且耗費的時間比其他函式長。

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

檢查特定查詢負載

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

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

「資料庫負載 - 特定查詢」圖表會顯示正規化查詢在所選查詢中執行的工作量 (以 CPU 使用秒數為單位)。如要計算負載,系統會使用在分鐘界線完成的正規化查詢所耗用的時間,與實際時間進行比較。表格頂端會顯示正規化查詢的前 1024 個字元,並移除用於彙整和 PII 考量的常值。

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

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

檢查特定已標記查詢的負載

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

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

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

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

查詢計畫會擷取查詢樣本,並細分成個別作業。並說明及分析查詢中的每項作業。

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

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

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

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

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

請思考下列問題,嘗試縮小問題範圍:

  1. 資源用量是多少?
  2. 這項查詢與其他查詢有何關聯?
  3. 消費量是否會隨時間變化?

檢查範例查詢產生的追蹤記錄

除了查看範例查詢計畫,您也可以使用查詢洞察資料,查看範例查詢的應用程式端對端追蹤記錄 (含相關背景資訊)。這項追蹤記錄會顯示特定要求的資料庫活動,有助於找出問題查詢的來源。此外,應用程式在要求期間傳送至 Cloud Logging 的記錄項目會連結至追蹤記錄,有助於您進行調查。

如要查看脈絡中的追蹤記錄,請按照下列步驟操作:

  1. 在「範例查詢」畫面中,按一下「端對端追蹤」分頁標籤。 這個分頁會顯示甘特圖,詳細列出查詢產生的追蹤記錄範圍 (個別作業的記錄)。
  2. 如要查看每個時距的詳細資料 (例如屬性和中繼資料),請選取該時距。

您也可以在「Trace Explorer」頁面中查看追蹤記錄。如要這麼做,請按一下「在 Cloud Trace 查看」。如要瞭解如何使用追蹤記錄探索工具頁面探索追蹤記錄資料,請參閱「尋找及探索追蹤記錄」。

檢查延遲時間

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

下圖顯示特定查詢的資料庫負載圖表 (第 50 個百分位數),並已選取 CPU 容量、CPU 和 CPU 等待、IO 等待,以及鎖定等待的篩選器。

顯示特定查詢的查詢延遲圖表,並選取 CPU 容量、CPU 和 CPU 等待、IO 等待和鎖定等待的篩選條件。

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

請思考下列問題,嘗試縮小問題範圍:

  • 是什麼原因導致負載過高?選取選項,查看 CPU 容量、CPU 和 CPU 等待時間、I/O 等待時間或鎖定等待時間。
  • 高負荷狀態已持續多久?現在才變高嗎?還是長期偏高?變更時間範圍,找出負載開始效能不佳的日期和時間。
  • 延遲時間是否突然變長?變更時間範圍,研究正規化查詢的歷史延遲時間。

在 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
PHP
  • Laravel

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

使用 sqlcommenter 新增標記

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

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

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

停用查詢洞察

控制台

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

  1. 前往 Google Cloud 控制台的「Cloud SQL Instances」頁面。

    前往 Cloud SQL 執行個體

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

gcloud

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

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": "user@example.com",
  "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 Instances」頁面。

    前往 Cloud SQL 執行個體

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

後續步驟