由于复制槽导致wal大量堆积的处理方案

环境

系统平台:N/A
版本:N/A

症状

数据库中的pg_wal占用大量空间,且不删除。

问题原因

复制槽占用早期的wal日志,导致wal归档后无法正常删除。

1. 排查复制槽情况:

highgo=# select * from pg_replication_slots ;

  slot_name  | plugin | slot_type | datoid | database | temporary | active        | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn 

-------------+--------+-----------+--------+----------+-----------+---------------+------------+------+--------------+-------------+---------------------

 node_c_slot |        | physical  |        |          | f         | t   |            |      |              | 155/8802AD50| 

 node_b_slot |        | physical  |        |          | f         | f   <-- 不活动 |      20314 |      |              | 53/1A005320 | 

(2 rows)

查询复制槽的lsn对应的wal文件

highgo=# SELECT  pg_walfile_name(pg_lsn('53/1A005320')) AS wal_file_name_offset;

   wal_file_name_offset   

--------------------------

 00000007000000530000001A

(1 row)

2. 查询wal最早的文件:

cd $PGDATA/pg_wal

ls -lth
......

-rw------- 1 root root  16M Feb 29 15:50 00000007000000530000001A    <--与前面复制槽占用的文件一致

-rw------- 1 root root  258 Feb 15 14:16 00000007.history

-rw------- 1 root root  214 Feb 15 13:54 00000006.history

与最早的wal文件相符,说明wal是被复制槽占用,无法正常删除。

解决方案

与客户确认该复制槽node_b_slot未在使用,决定删除该复制槽

highgo=# select pg_drop_replication_slot('node_b_slot');

 pg_drop_replication_slot 

--------------------------

(1 row)


--手动执行checkpoint,触发清理wal

highgo=# checkpoint ;

CHECKPOINT

wal正常被清理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值