使用 PostgreSQL 数据库 WAL 日志文件

Datastream 使用 PostgreSQL WAL(预写式日志)事务日志来读取 PostgreSQL 流。日志存储在数据库服务器上的 WAL 文件中。WAL 日志中的每条记录都表示对数据库中某个表的实际数据进行的一项更改。

为 PostgreSQL WAL 文件设置配置参数

建议您将以下配置设置应用于 PostgreSQL 数据库:

  • max_slot_wal_keep_size:设置此参数(仅适用于 PostgreSQL 13 及更高版本)可限制复制槽使用的存储空间量。对于长时间运行的事务,这一点尤为重要,因为在极端情况下,长时间运行的事务可能会导致 WAL 文件大小占用整个存储空间,并使数据库崩溃。

  • statement_timeout:将此参数设置为所选值,以减少长时间运行的事务造成的延迟。对于不支持 max_slot_wal_keep_size 的数据库,您还可以使用 statement_timeout 作为替代的预防措施。

  • wal_sender_timeout:将此参数设置为 0(以停用超时)或大于或等于 10 分钟的值。

如果您计划创建 10 个以上的数据流,或者其他资源使用的逻辑复制槽数量加上计划的数据流数量超过 10 个,请务必修改以下参数:

  • max_replication_slots:根据为数据库设置的复制槽数量(每个数据流需要 1 个复制槽)增加此参数的值。您只能在服务器启动时设置 max_replication_slots

  • max_wal_senders:增加此参数的值,使其大于 max_replication_slots 参数的值。您只能在启动服务器时设置 max_wal_senders

优化 WAL 日志文件

为避免在从 PostgreSQL 源复制数据时出现流延迟较高和 WAL 日志文件大小快速增长的情况,请考虑采取以下预防措施:

  • 避免执行长时间运行的大型操作,因为这些操作会大幅增加 WAL 文件的大小。
  • 在批量操作期间使用 UNLOGGEDTEMPORARY 表。
  • 检查您的 WAL 配置,并考虑降低检查点频率。 如需了解详情,请参阅 WAL 配置
  • 检查是否存在大型 DELETE 操作,并考虑将其替换为 TRUNCATE 操作。这样做可以显著减少 WAL 文件数据,但您需要谨慎操作,因为 Datastream 不会复制 TRUNCATE 操作。

后续步骤