如要找出 AlloyDB for PostgreSQL 系統延遲和 CPU 使用率偏高的原因,您可以監控資料庫中執行時間較長的查詢,並排解相關問題。
您可以在Google Cloud 控制台的「Query insights」(查詢洞察) 頁面中,查看執行中的查詢,並依交易開始時間排序。如果執行的查詢數量過多,頁面可能會因資料收集的記憶體限制,而只顯示部分查詢。
事前準備
如要開始查看執行中的查詢,請啟用進階查詢洞察功能,並為執行個體啟用執行中查詢分析,步驟如下:
前往 Google Cloud 控制台的「Clusters」(叢集) 頁面。
按一下「查詢洞察」。
點按「Edit Settings」(編輯設定)。
在「編輯查詢洞察設定」視窗中,依序選取「啟用 AlloyDB 適用的進階查詢洞察功能」>「執行中查詢分析」。
按一下 [儲存變更]。
選用:如果系統提示,請在「Changes require restart」(變更需要重新啟動) 視窗中,按一下「Confirm and restart」(確認並重新啟動)。
您可以使用 Gemini Cloud Assist 監控 AlloyDB 資源及排解相關問題。詳情請參閱「使用 AI 輔助功能監控及排解問題」。
查看執行中的查詢
如要查看執行中的查詢,請按照下列步驟操作:
請要求管理員授予您資料庫洞察監控檢視者 (
roles/databaseinsights.monitoringViewer) 角色,或建立具備databaseinsights.activeQueries.fetchIAM 權限的自訂角色。請將這個角色授予每位查看執行中查詢的使用者。
在 Google Cloud 控制台,開啟「AlloyDB」AlloyDB頁面。
按一下叢集名稱,開啟「總覽」頁面。
選取「Query insights」(查詢洞察) 分頁標籤。查詢洞察資訊主頁會顯示所選叢集的詳細資料。
按一下「Active queries view」(有效查詢檢視畫面) 分頁標籤。這個分頁會顯示執行中查詢的摘要,以及執行時間最長的前 50 筆交易。
您可以透過下列任一方式篩選資訊:
- 資料庫:篩選特定資料庫或所有資料庫的查詢負載。
- 使用者:篩選特定資料庫使用者或所有使用者的查詢負載。
- 節點 ID:僅適用於讀取集區執行個體,可篩選特定讀取集區執行個體節點或所有節點的查詢負載。
所有正規化執行中查詢的摘要評量表:根據下列參數顯示連線總數,提供所有執行中查詢的總覽:
- 按照連線狀態分類的有效連線分布。
- 依據不同等候事件類型,顯示有效連線的分佈情形。
- 非閒置狀態查詢的交易時間長度分布情形。
執行時間最長的交易:提供
active和idle in transaction狀態下前 50 項執行中查詢的總覽,並按照執行時間遞減排序。
您可以在查詢洞察資訊主頁上,查看前五十個正規化執行中查詢的清單。
正規化的執行中查詢會移除機密資料,並傳回摘要。如果兩個查詢除了 WHERE 子句值以外完全相同,則摘要也會相同。以下列三個查詢為例:
select * from my_table where id = 1;select * from my_table where id = 2;select * from my_table where id = 100;
這些查詢的標準化版本是下列摘要:
select * from my_table where id = ?;
在不同工作階段中執行的查詢,會在資訊主頁上顯示為不同項目。
查看執行時間最長的主要交易
下表說明查詢洞察資訊主頁中「Longest running transactions」(執行時間最長的交易) 資料表的資料欄:
| 資料欄名稱 | 說明 |
|---|---|
| 程序 ID | 程序 ID 是資料庫連線的專屬 ID。 |
| 節點 ID | 節點 ID 是執行查詢的讀取集區執行個體節點專屬 ID。 |
| 查詢 | 正規化 SQL 查詢文字。 |
| 狀態 | 連線的目前狀態。狀態值包括 active 和 idle in transaction。 |
| 工作階段持續時間 (秒) | 目前工作階段的持續時間。 |
| 交易時長 (秒) | 目前交易的持續時間。 |
| 查詢時長 (秒) | 目前執行中查詢的持續時間。處於 idle in transaction 狀態的查詢並未實際執行,因此查詢時間長度為 0。 |
| 等待事件類型 | 查詢執行期間發生的等待事件類型。 |
| 等待事件 | 查詢執行期間發生的等待事件。 |
| 資料庫 | 執行這個連線的資料庫名稱。 |
| 應用程式名稱 | 執行這項連線的應用程式名稱。 |
| 使用者名稱 | 連線至資料庫的資料庫使用者名稱。 |
| 用戶端位址 | 傳送查詢的用戶端特定 IP 位址。 |
| 動作 | 包含終止交易的連結。 |
顯示畫面每 60 秒會自動重新整理。
使用「資料庫」和「使用者」欄位篩選,即可重新整理頁面上的資料。
如要分析靜態資料,請停用「自動重新整理」,並視需要使用「執行時間最長的交易」表格的「篩選器」欄位。
終止查詢或交易
您必須具備 roles/databaseinsights.operationsAdmin 角色,才能終止查詢或交易。詳情請參閱「IAM 基本和預先定義的角色參考資料」。
一筆交易可以包含多個查詢。如要找出目前正在執行的查詢,請查看「Longest running transaction」(執行時間最長的交易) 表格中的「Query」(查詢) 欄。
如要終止查詢或交易,請完成下列步驟:
- 在「Longest running transaction」(執行時間最長的交易) 表格中選取查詢。
- 向右捲動至「Action」欄。
- 按一下「終止連線」。
在「終止連線」視窗中,按一下「確認」。
啟動終止程序後,頁面會重新整理。如果終止失敗,系統不會顯示任何訊息,查詢也會繼續顯示在「進行中的查詢」清單。如果終止成功,查詢就不會再顯示在清單中。
已封鎖的查詢分析
如果特定執行中查詢遭到封鎖,或執行時間遠超過預期,該查詢可能會封鎖其他依附查詢。
您可以使用已封鎖的查詢分析,找出並終止執行時間過長、鎖定時間過長,或阻礙其他查詢的查詢。
找出並終止遭封鎖的執行中查詢
如要找出並終止可能封鎖其他查詢的特定有效查詢,請完成下列步驟:
在 Google Cloud 控制台,開啟「AlloyDB」AlloyDB頁面。
按一下叢集名稱,開啟「總覽」頁面。
選取「查詢洞察」分頁標籤。
按一下「Active queries」(有效查詢) 分頁標籤。 如果目前沒有執行中的查詢,請前往 AlloyDB Studio,執行要調查的查詢。
前往「Longest running transactions」(執行時間最長的交易) 專區。每個類別最多可顯示 50 項執行時間最長的有效查詢。顯示的每個項目都有執行中查詢詳細資料,包括:
- 程序 ID:查詢的程序 ID。按一下 「展開」即可查看項目。您會看到下列其中一個圖示:
- 沙漏圖示:這個圖示表示程序正在等待其他查詢完成。如果圖示旁有數字,則表示有多少依附查詢正在等待這項程序完成。
- 封鎖圖示:這個圖示表示程序正在阻礙系統執行其他查詢。
- 查詢:正在執行的查詢,例如
SELECT ...或UPDATE ...。 - 狀態:有效查詢的狀態,例如
ACTIVE。 - 工作階段持續時間 (秒):目前工作階段的持續時間。
- 交易持續時間 (秒):目前運作中交易的持續時間。
- 查詢時長 (秒):目前執行中查詢的時長。
- 等待事件類型:查詢執行期間目前的等待事件類型,例如「Timeout」(逾時) 或「Lock」(鎖定)。
- 等待事件:查詢執行期間目前的等待事件。
- 資料庫:執行連線的資料庫名稱。
- 應用程式名稱:執行連線的應用程式名稱。
- 使用者名稱:連線至資料庫的使用者名稱。
- 用戶端位址:傳送查詢的用戶端 IP 位址。
- 動作:可採取的動作,例如「終止連線」。
按一下要調查的程序 ID 展開。在調查樹狀圖中,您最多可以展開三層基礎程序。
- 程序 ID:查詢的程序 ID。按一下 「展開」即可查看項目。您會看到下列其中一個圖示:
找出遭到封鎖的特定查詢,然後按一下「Terminate connection」(終止連線)。終止連線後,您可以前往 AlloyDB Studio 再次執行中的查詢。