存留时间 (TTL) 概览

借助存留时间 (TTL),您可以设置政策,以定期从 Spanner 表中删除数据。移除不需要的数据:

  • 降低存储空间和备份费用。
  • 减少数据库扫描某些查询的行数,从而可能提高查询性能。
  • 有助于遵守旨在限制某些类型的数据保留期限的法规或行业准则。

TTL 是常规清理活动的理想选择。它在后台持续运行,定期批量删除符合条件的数据。数据通常会在失效日期后的 72 小时内删除。每次删除都需要在数据库的副本之间复制主键,这会导致复制开销。如需了解详情,请参阅数据复制价格。 当 TTL 不会被删除时,它不会立即使数据失效,也不会在查询中隐藏这些数据。TTL 在插入时也不会检查数据,因此它 不会阻止您插入时间戳过期的行。

TTL 的设计能够最大限度地减少对其他数据库活动的影响。它比最终用户查询更有效地并行工作,并且包括重试逻辑,以确保进行端到端清理。

另一个后台压缩过程会从已删除的行回收存储空间, 通常会在 7 天内完成。

TTL 的工作原理是什么?

您可以通过定义行删除操作,在 Spanner 表上设置 TTL 政策,这让 Spanner 能够 定期删除不需要的数据每个表都可以有自己的政策。每个表只能指定一个 TTL 政策。您为 TTL 设置的方式有所不同 GoogleSQL 方言数据库和 PostgreSQL 方言数据库。

通过 GoogleSQL 使用 TTL

使用 GoogleSQL 时,您可以通过指定时间戳时间间隔来定义行删除政策,以确定行何时可以删除;例如,上次更新日期加 30 天。

后台系统进程每天都会检查符合条件的行。它将并行执行的实际删除并行执行,这些删除接近数据存储位置。每个批次都会以一致的时间戳在自己的事务中运行。因此,给定批次中的行以及所有索引和交错子项一定会以原子方式删除。但是,在不同批次中执行删除将在不同的事务中发生。

由于这是一个异步后台过程,因此从延迟到等待符合标准为止。延迟时间通常少于 72 小时。因此,在 TTL 过期后,行可能会在您的表中保留最多 3 天;例如,具有删除早于 4 天的行的行删除政策的表可能包含最多 7 天的行以及更旧的不可删除的行。

有关如何创建 GoogleSQL 行的分步说明 删除政策,请参阅创建 TTL 政策

将 TTL 与 PostgreSQL 搭配使用

使用 PostgreSQL,数据库所有者可以在TTL INTERVAL CREATE TABLEALTER TABLE 语句来定义行删除政策。

如需对 PostgreSQL 表设置行删除政策,该表必须包含数据类型为 TIMESTAMPTZ 的列。TTL INTERVAL 子句使用 此列用于为某一行何时符合 删除。

该子句必须计算为整数天数。例如,允许使用 '3 DAYS''4 DAYS 2 MINUTES - 2 MINUTES',但不允许使用 '4 DAYS 3 MINUTES',并且会返回错误。您不能使用否定值 数字。

TTL 垃圾回收功能会在后台持续删除符合条件的行。 由于这是一个异步后台进程,因此在 资格和删除。表可能包含符合 TTL 删除条件但尚未完成 TTL 的行。延迟时间通常少于 72 小时。

如需了解如何创建 PostgreSQL 行删除政策, 请参阅创建 TTL 政策

备份和 TTL

恢复备份

从备份恢复数据库时,系统会自动删除源数据库上配置的所有行删除政策。这样可以防止 Spanner 在备份恢复后立即删除过期数据。因此,您需要手动重新配置 TTL。

数据一致性

备份是指您的数据的快照, 特定时间点 (version_time)。备份可以包含 可能符合 TTL 删除条件,但 TTL 尚未完成。 同样,Dataflow 导出作业会按 固定时间戳。

审计

TTL 支持通过变更数据流审核其删除操作。 用于跟踪数据库 TTL 更改的更改流数据记录将 transaction_tag 字段设置为 RowDeletionPolicy,并将 is_system_transaction 字段设置为 true。变更数据流读者 能够过滤掉所有 TTL 记录或除 TTL 以外的所有记录 具体取决于其使用场景请参阅使用 Beam 按事务标记过滤的示例。

后续步骤