postgresql-WAL激增相关

现象:wal激增,超过了wal_keep_segments

​ 如果开了归档,不成功就一直保存——手动执行归档命令检查
​ 复制槽 FALSE——pg_replication_slots
​ 主备同步失败——pg_stat_replication
​ 长事务存在——pg_stat_activity where EXTRACT(EPOCH FROM (now()-query_start))>60

什么时候归档?

​ select pg_switch_wal();

​ wal写满一个16M的文件之后

​ 达到archive_timeout

问题:wal堆积

处理:

  • 检查保存个数

    select current_setting('wal_keep_segments') as wal_keep_segments,(select count(1) from pg_ls_dir('./pg_wal/')) as dir ;

  • 检查 hot_standby、hot_standby_feedback

  • 检查复制槽 pg_replication_slots

  • 检查长事务

  • 如果归档失败的,可以用pg_archivecleanup先清

问题:wal堆积,status大量ready归档正常

排查archive进程是否正常,正在归档哪一个,正在归档之后的wc -l 和ready是否对的上

处理:

  • archive_command 可手动执行检查是否报错,或观察archive 进程是否有推进

  • 检查服务器io

  • 关闭归档,或者archive_command='echo 0';

  • 快速释放ready文件:

​		find *.ready | sed 's/.ready$//'| xargs -I {} mv {}.ready {}.done

​		select pg_switch_wal(); 

​		checkpoint;
  • 观察wal数量是否有减少
posted @ 2022-05-17 21:00  y_dou  阅读(110)  评论(0)    收藏  举报