开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

pg_wal 文件夹里面的wal文件一直没删除 一直曾 不知道这东西怎么清理

pg_wal 文件夹里面的wal文件一直没删除 一直曾 不知道这东西怎么清理

展开
收起
游客6vdkhpqtie2h2 2022-09-21 11:19:47 787 0
1 条回答
写回答
取消 提交回答
  • 在某些情况下,WAL 文件消耗的 PostgreSQL 磁盘空间可能会激增或超出正常比例。这种情况有几个可能的原因:

    连接器接收到数据的 LSN在服务器视图的confirmed_flush_lsn列中可用。pg_replication_slots早于此 LSN 的数据不再可用,数据库负责回收磁盘空间。

    同样在pg_replication_slots视图中,该restart_lsn列包含连接器可能需要的最旧 WAL 的 LSN。如果 for 的值confirmed_flush_lsn定期增加并且值 restart_lsn滞后,则数据库需要回收空间。

    数据库通常以批处理块的形式回收磁盘空间。这是预期行为,无需用户采取任何行动。

    正在跟踪的数据库中有许多更新,但只有极少数更新与连接器正在捕获更改的表和模式相关。这种情况可以通过周期性的心跳事件轻松解决。设置heartbeat.interval.ms连接器配置属性。

    PostgreSQL 实例包含多个数据库,其中一个是高流量数据库。Debezium 捕获与另一个数据库相比流量较低的另一个数据库中的更改。然后,Debezium 无法确认 LSN,因为复制槽在每个数据库中工作,并且没有调用 Debezium。由于 WAL 由所有数据库共享,因此使用量趋于增长,直到 Debezium 正在捕获更改的数据库发出事件。为了克服这个问题,有必要:

    heartbeat.interval.ms使用连接器配置属性启用定期心跳记录生成。

    定期从 Debezium 捕获更改的数据库中发出更改事件。

    在wal2json解码器插件的情况下,生成空事件就足够了。这可以通过例如截断一个空的临时表来实现。对于其他解码器插件,建议创建一个 Debezium 未捕获更改的补充表。

    然后,一个单独的进程将通过插入新行或重复更新同一行来定期更新表。PostgreSQL 然后调用 Debezium,它确认最新的 LSN 并允许数据库回收 WAL 空间。此任务可以通过heartbeat.action.query连接器配置属性自动执行。(此答案整理自Flink CDC 社区)

    2022-09-21 11:59:27
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
俞航翔|基于Log的通用增量Checkpoint 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多