TTL 指標とモニタリング

このページでは、Spanner の有効期間(TTL)指標について説明します。詳細については、TTL についてをご覧ください。

指標

Spanner は、SQL クエリで読み取り可能なシステム テーブル内の TTL アクティビティに関する情報を、Cloud Monitoring を介してアクセスされる指標として提供します。

システム テーブルはデータベースのテーブルにつき TTL 情報を報告しますが、Cloud Monitoring はデータベース レベルで指標を報告します。

SQL クエリを使用する

Spanner には、TTL に関連する情報を追跡する組み込みテーブルが用意されています。テーブルの名前は SPANNER_SYS.ROW_DELETION_POLICIES で、次のスキーマがあります。

列名 説明
テーブル名 STRING この TTL ポリシーを含むテーブルの名前。
PROCESSED_WATERMARK TIMESTAMP 現時点で、このポリシーはテーブル内のすべての行に対して実行されています。一部のテーブル パーティションが最近処理された可能性があるため、このタイムスタンプは最も長く処理されていないパーティションを表します。通常、これは 72 時間以内です。
UNDELETABLE_ROWS INT64 TTL ポリシーで削除できない行数。詳細については、削除できない行をご覧ください。
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 コマンド
  • executeQueryAPI

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 時間以内に削除されます。72 時間を超えたときに通知されるように、processed_watermark_ageアラートを設定できます。

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 ポリシーを個別に追加します。