问题现象
数据量在没有发生变化的情况下,发现存储空间不断增长,我们该如何解决此类问题。
根因描述
Replication Slot 是 PostgreSQL 数据库中的一种机制,replication Slot 用于提高数据复制的效率和可靠性,避免 WAL 日志丢失或重复消费。 在常见的场景中,如果 PostgreSQL 中有处于非 active 的 slot,会导致WAL日志不断堆积,占用大量存储空间,甚至可能写满磁盘导致业务受损。 如果有其他的下游消费组件,未能及时提交 WAL LSN 信息,则也会导致 WAL 日志堆积,此时需要排查下游组件的问题。
解决方案
- 检查当前实例的 replication slot
select * from pg_replication_slots
输出的部分字段如下:
- slot_name: replication slot 的名称。
- plugin:插件名称,支持 wal2json,pgoutput 等。
- slot_type:表明 slot 类型 为 physical 或 logical。
- temporary:是否为临时 slot。仅在当前数据库会话期间存在,并在会话结束时自动删除
- active:是否为 active 状态
- 删除 replication slot
SELECT pg_drop_replication_slot('slot_name');
注意事项
- replication slot 状态为ACTIVE 时,不允许删除该 slot。
- replication slot 状态为 INACTIVE 时,建议及时删除。
- 删除 INACTIVE 状态的 replication slot 后,占用空间会被自动清理。
- 业务中无法再使用已删除的 slot。
参考文档
[1] https://www.postgresql.org/docs/12/view-pg-replication-slots.html [2] https://www.postgresql.org/docs/9.4/functions-admin.html#FUNCTIONS-REPLICATION 如果您有其他问题,欢迎您联系火山引擎技术支持服务