TTL 指標和監控

本頁面將說明 Spanner 存留時間 (TTL) 指標。詳情請參閱「關於存留時間」。

指標

Spanner 會提供系統資料表中的 TTL 活動資訊,可透過 SQL 查詢讀取,並透過 Cloud Monitoring 存取指標。

系統表會針對資料庫的每個資料表回報 TTL 資訊,而 Cloud Monitoring 則會在資料庫層級回報指標。

使用 SQL 查詢

Spanner 提供內建資料表,可追蹤與 TTL 相關的資訊。資料表名稱為 SPANNER_SYS.ROW_DELETION_POLICIES,且具有下列結構定義。

資料欄名稱 類型 說明
TABLE_NAME STRING 包含此存留時間政策的資料表名稱。
PROCESSED_WATERMARK TIMESTAMP 這項政策已針對目前資料表中的所有資料列執行。部分資料表分區可能已在最近處理過,因此這個時間戳記代表最近未處理的分區。通常在 72 小時內。
UNDELETABLE_ROWS INT64 無法透過存留時間政策刪除的資料列數量。詳情請參閱「不可刪除的資料列」。
MIN_UNDELETABLE_TIMESTAMP TIMESTAMP 上次處理週期中,無法刪除的資料列最早的時間戳記。

系統會針對資料庫的每個資料表傳回刪除政策資訊。

您可以使用類似下列的 SQL 查詢查詢這項資料:

SELECT TABLE_NAME, UNDELETABLE_ROWS
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0

SPANNER_SYS 資料表只能透過 SQL 介面存取,例如:

  • Google Cloud 控制台的「Spanner Studio」頁面
  • gcloud spanner databases execute-sql 指令
  • executeQuery API

Spanner 提供的其他單一讀取方法不支援 SPANNER_SYS

使用 Cloud Monitoring

Spanner 提供下列指標,可在資料庫層級監控 TTL 活動:

  • row_deletion_policy/deleted_rows 是 TTL 政策刪除的資料列數量。
  • row_deletion_policy/undeletable_rows 是符合資料列刪除 (GoogleSQL) 或 TTL INTERVAL(PostgreSQL) 陳述式的資料列數量,但無法刪除。這通常是因為資料列有太多子資料列,導致動作超出 Spanner 的交易限制
  • row_deletion_policy/processed_watermark_age 是指目前與上次成功週期 (不論是否有不可刪除的資料列) 所使用的讀取時間戳記之間的時間。

您可以透過 Cloud MonitoringGoogle Cloud 控制台查看這些指標。

監控

您也可以監控其他 TTL 活動。

找出上次成功掃描的時間

您可以找到 Spanner 上次完成掃描資料表以尋找已過期資料列的時間。如要以 SQL 查詢執行這項操作,請按照下列步驟操作:

SELECT PROCESSED_WATERMARK
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE TABLE_NAME = $name

row_deletion_policy/process_watermark_age 指標也會顯示類似的資訊,但以目前時間與上次掃描時間的差異來表示。這個指標不會依資料表細分,而是代表資料庫中所有啟用 TTL 的資料表中最久的掃描時間。

符合 TTL 政策的資料列通常會在到期日後的 72 小時內刪除。您可以設定 processed_watermark_age 的快訊,在超過 72 小時時收到通知。

如果 processed_watermark_age 超過 72 小時,可能表示優先順序較高的任務會阻止 TTL 執行。在這種情況下,建議您檢查CPU 使用率,並視需要增加更多運算容量。如果 CPU 使用率在建議範圍內,請使用 Key Visualizer 檢查是否有資源使用率不均的情況。

監控已刪除的資料列

如要監控表格的 TTL 活動,請將 row_deletion_policy/deleted_rows 指標繪製成圖表。這項指標會顯示一段時間內刪除的資料列數量。

如果沒有資料過期,這項指標會顯示為空白。

監控無法刪除的資料列

如果 TTL 無法刪除資料列,Spanner 會自動重試。如果在重試時無法處理 TTL 動作,Spanner 會略過該資料列,並在 row_deletion_policy/undeletable_rows_count 指標中回報。

您可以對 row_deletion_policy/undeletable_rows_count 設定快訊,在計數值不為零時收到通知。

如果發現計數值不為零,您可以建立查詢,按表格細分計數:

SELECT TABLE_NAME, UNDELETABLE_ROWS, MIN_UNDELETABLE_TIMESTAMP
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0

如要查詢不可刪除資料列的內容,請按照下列步驟操作:

SELECT *
FROM $TABLE_NAME
WHERE $EXPIRE_COL >= $MIN_UNDELETABLE_TIMESTAMP

列刪除作業失敗最常見的原因,是因為交錯資料表和索引的連鎖更新,導致產生的交易大小超出 Spanner 的變異限制。您可以更新結構定義,在交錯資料表中新增個別的TTL 政策,藉此解決問題。