本頁面將說明 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 Monitoring 和 Google 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 政策,藉此解決問題。