从dataworks同步任务中新增postgresql一键实时同步到hologres后,postgresql wal日志有积压,这个如何处理?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用DataWorks新增PostgreSQL一键实时同步到Hologres后,如果发现PostgreSQL的WAL日志出现积压问题,可能是由于消费WAL日志的客户端未能及时上传消费位点信息,或者相关参数配置不合理导致的。以下是针对该问题的具体排查和解决方法:
通过以下SQL查询pg_replication_slots
表,确认是否存在较大的WAL延迟:
SELECT coalesce(max(pg_wal_lsn_diff(pg_current_wal_flush_lsn(), restart_lsn)), 0) AS max_slot_wal_delay
FROM pg_replication_slots
WHERE restart_lsn IS NOT NULL;
restart_lsn
是消费WAL日志的客户端上报的位点信息。如果restart_lsn
不向前推进,会导致WAL日志堆积。wal_sender
进程是否正常执行以下SQL检查是否有空闲可用的wal_sender
进程:
SHOW max_wal_senders;
SELECT count(*) FROM pg_stat_replication;
max_wal_senders
值大于pg_stat_replication
的数量,否则可能需要增加max_wal_senders
的配置。如果确认是消费客户端上传消费位点信息延迟导致的WAL积压,可以采取以下措施进行优化:
restart_lsn
能够及时向前推进。如果WAL日志积压是由于参数配置不合理导致的,可以参考以下推荐值进行调整:
wal_keep_segments
或wal_keep_size
wal_keep_segments
参数,推荐值为128
。wal_keep_size
参数,推荐值为2048MB
。max_wal_size
和min_wal_size
max_wal_size
:控制WAL日志的最大大小,推荐值为{LEAST(GREATEST(DBInstanceClassMemory/2097152, 2048), 16384)}
。min_wal_size
:控制保留WAL日志文件的最小大小,推荐值为{LEAST(GREATEST(DBInstanceClassMemory/8388608, 256), 8192)}
。如果实时同步任务停止或下线后未正确清理Replication Slot,可能会导致WAL日志持续增长。可以通过以下步骤手动清理无用的Slot:
SELECT slot_name, restart_lsn FROM pg_replication_slots;
di_slot_ + 解决方案ID
)。SELECT pg_drop_replication_slot('slot_name');
slot_name
为实际的Slot名称。为了避免类似问题再次发生,建议对PostgreSQL实例的WAL日志使用情况进行监控,并设置报警规则: - 监控指标包括WAL日志大小
、Replication Slot延迟
等。 - 在阿里云控制台中配置告警策略,当WAL日志占用磁盘空间达到一定阈值时触发告警。
通过以上步骤,您可以有效排查和解决PostgreSQL WAL日志积压问题,同时优化实时同步任务的性能和稳定性。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。