TTL 指标和监控

本页面讨论了 Spanner 存留时间 (TTL) 指标。如需了解详情, 请参阅关于 TTL

指标

Spanner 提供有关系统中 TTL 活动的信息 可通过 SQL 查询读取的表,以及通过 Cloud Monitoring

系统表报告数据库的每个表的 TTL 信息,而 Cloud Monitoring 报告数据库级别的指标。

使用 SQL 查询

Spanner 提供了用于跟踪相关信息的 至 TTL。该表名为 SPANNER_SYS.ROW_DELETION_POLICIES,包含 遵循架构。

列名 类型 说明
TABLE_NAME STRING 包含此 TTL 政策的表的名称。
PROCESSED_WATERMARK 时间戳 到目前为止,此政策已针对表中的所有行运行。某些表分区的处理时间可能更晚,因此该时间戳表示处理时间最晚的分区。通常是在 72 小时内处理的分区。
UNDELETABLE_ROWS INT64 TTL 政策无法删除的行数。如需了解详情,请参阅不可删除的行
MIN_UNDELETABLE_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 执行 hotspotting。

监控已删除的行

如需监控表上的 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 政策