排解讀取集區查詢問題

本頁說明如何調查及偵錯 AlloyDB for PostgreSQL 傳送至讀取集區執行個體的查詢:

  • 查看讀取集區的組成節點詳細清單,包括 IP 位址。
  • 直接連線至節點,以進行偵錯。
  • 檢查 AlloyDB 記錄,判斷哪個特定節點正在處理傳送至讀取集區的任何查詢。
  • 查詢特定讀取集區節點的所有近期活動記錄。
  • 查看與讀取集區節點相關的指標。 Google Cloud

搭配使用這些技術,您就能存取讀取集區,進行診斷和偵錯。舉例來說,如果叢集中的某個讀取集區在處理長時間執行的查詢時,使用了異常大量的 CPU,您可以使用這些技術判斷哪個節點正在處理該查詢,然後直接連線至該節點,進一步檢查或終止查詢。

列出讀取集區節點的詳細資料

在正常使用 AlloyDB 時,您不需要知道構成讀取集區的節點身分或位址。不過,如有需要,您可以查看讀取集區執行個體節點的清單。所列的每個節點都包含下列資訊,有助於後續診斷和偵錯:

如要查看讀取集區節點的內部 ID 字串和 IP 位址,請按照「查看執行個體詳細資料」一節中 gcloud 專屬的指示操作,但要新增額外的 --view=FULL 指令列引數:

gcloud

gcloud alloydb instances describe READ_POOL_ID \
 --region=REGION_ID \
 --cluster=CLUSTER_ID \
 --project=PROJECT_ID \
 --view=FULL

更改下列內容:

  • READ_POOL_ID:讀取集區的 ID。
  • REGION_ID:執行個體的區域 ID。
  • CLUSTER_ID:執行個體叢集的 ID。
  • PROJECT_ID:執行個體專案的 ID。

輸出內容會包含標示為 nodes 的區段,類似如下:

nodes:
- id: READ_POOL_INSTANCE_ID-edd4f6ed-hcfh
  ip: 10.90.80.57
  state: HEALTHY
  zoneId: us-central1-b
- id: READ_POOL_INSTANCE_ID-edd4f6ed-ldbm
  ip: 10.90.80.56
  state: HEALTHY
  zoneId: us-central1-c

每個項目的 idip 欄位與本頁所述的其他技術特別相關:

  • ip」欄位會顯示叢集虛擬私有雲中的節點 IP 位址。

  • id 欄位包含節點的完整 Google Cloud ID 字串。節點的記錄項目只會顯示這個字串的最後四個字元。

    舉例來說,如要尋找涉及先前範例輸出內容中第一個節點的記錄項目,請使用 ID 字串 hcfh查詢記錄

直接連線至節點

知道節點的 IP 位址後,即可直接連線至 PostgreSQL 伺服器。舉例來說,如要使用 psql 連線至叢集 VPC 中的 VM,請按照「執行 psql 用戶端」一節中的操作說明進行。如果這麼做,請提供節點的 IP 位址,而非讀取集區執行個體的 IP 位址:

psql -h NODE_IP_ADDRESS -U USERNAME

在記錄中尋找節點活動

AlloyDB 會在讀取集區處理的查詢相關記錄項目中,加入節點 ID。一般來說,您可以透過兩種方式使用這些探索到的 ID:

  • 找出節點的 IP,以便連線至該節點。
  • 執行進一步的記錄查詢,進一步瞭解節點的近期活動。

判斷哪個節點正在處理已知查詢

如果您知道特定讀取集區正在處理長時間執行的查詢,記錄檔探索器可協助您判斷處理該查詢的特定節點 ID。

請注意,這項技術僅適用於已啟用 pgAudit 擴充功能的讀取集區執行個體。

  1. 前往記錄檔探索工具:

    前往記錄檔探索工具

  2. 查詢建構工具中,將 resource.labels.instance_id="READ_POOL_ID" 新增至查詢編輯器欄位,並將 READ_POOL_ID 替換為讀取集區執行個體的名稱。

  3. 將您要調查的完整或部分 SQL 陳述式新增至查詢編輯器欄位。例如:select id from MyTable。這項輸入內容不區分大小寫。

  4. 點選「執行查詢」

  5. 使用 Log Explorer 的控制項調整及重新執行查詢,將結果篩選至最相關的項目。

  6. 按一下結果清單中的記錄項目,即可展開顯示。

  7. 在項目的展開顯示畫面中,按一下 labels 欄位。

  8. 請記下 labels 下的 NODE_ID 值。

結果是處理查詢的節點四字元 ID。

連線至記錄項目中提及的節點

如要根據特定節點的記錄活動,直接連線至該節點的 PostgreSQL 伺服器,請按照下列步驟操作:

  1. 記下記錄節點的四字元 ID 字串。您可以在記錄項目的 NODE_ID 欄位中找到這個 ID。

  2. 列出讀取集區的節點

  3. 在該清單中,找出 ID 字串結尾為您在第一個步驟中記下的四個字元的節點。可能沒有任何列出的節點符合條件。

  4. 如果找到相符節點,請使用相符的 IP 位址連線至該節點的 PostgreSQL 伺服器

    否則,如果上一個步驟中列出的讀取集區節點都沒有與記錄節點相符的 ID,表示讀取集區已在原始記錄項目之後的這段時間內,停用該節點。如「節點暫時性注意事項」一文所述,這是 AlloyDB 讀取集區的正常行為。在這種情況下,您無法直接連線至該節點。

連線至節點的 PostgreSQL 伺服器後,您可以使用標準 PostgreSQL 監控技術 (例如 pg_stat_activity) 進一步調查節點的目前程序,並視需要進行調整。

查看節點的更多記錄項目

如要查看特定 ID 節點的近期記錄活動,請執行下列操作:

  1. 前往記錄檔探索工具:

    前往記錄檔探索工具

  2. labels.NODE_ID=NODE_ID 新增至記錄檔瀏覽器查詢產生器,並將 NODE_ID 替換為節點的四字元 ID 字串。

  3. 按一下「執行查詢」,即可查看所選時間範圍內該節點的所有活動,或調整查詢來進一步篩選。

  4. 視需要重複上一個步驟,進一步縮小搜尋範圍。

監控節點指標

您可以透過 AlloyDB 系統深入分析資訊主頁,查看與個別節點相關的指標。如要進一步瞭解可用的節點指標,請參閱系統洞察指標參考資料

如要瞭解與特定讀取集區執行個體相關聯的節點 ID,請參閱「列出讀取集區節點的詳細資料」。

如需這些和其他 AlloyDB 指標的完整參考說明文件,請參閱「Google Cloud 指標」中的 alloydb

節點暫時性注意事項

雖然您可以安全地連線至節點,進行臨時調查或偵錯,但使用讀取集區的應用程式一律應在執行個體層級連線至這些集區,並使用叢集在執行個體清單中顯示的 IP 位址

AlloyDB 會將讀取集區的節點視為可互換的暫時性資源。為確保讀取集區執行個體維持負載平衡並保持回應,服務會視需要變更讀取集區的節點名單。如果應用程式直接連線至讀取集區節點,而非讀取集區執行個體,AlloyDB 更新執行個體的節點名單時,應用程式可能會突然與資料庫中斷連線。

請務必讓應用程式在執行個體層級連線至讀取集區,並讓 AlloyDB 負責將查詢有效率地路由至適當的節點。

後續步驟