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 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 命令
  • 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 执行 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 政策