在业务繁忙期间,PostgreSQL中的WAL生成量会显著增加。checkpointer进程会定期清理过期的WAL日志。然而,当非活跃的Replication Slot数量较多且未能及时清理时,可能导致WAL日志不断堆积。为了有效管理WAL日志,RDS PostgreSQL支持通过控制台或API查看和删除Replication Slot。
背景
Replication Slot是PostgreSQL数据库中的一种机制,用于在流复制中保存状态。使用Replication Slot可以避免在流复制中出现数据丢失或重复复制的问题,提高数据复制的效率和可靠性。
当非活跃的Replication Slot较多而未及时清理时,会导致WAL日志不断堆积,占用大量存储空间,甚至可能写满磁盘导致实例锁定,实例锁定时无法写入数据,从而影响业务。
RDS PostgreSQL支持通过控制台或API来删除非活跃的Replication Slot,减少WAL日志对磁盘空间的占用。
注意事项
Replication Slot状态为ACTIVE时,不允许删除该条Slot。
Replication Slot状态为INACTIVE时,如果不及时处理,可能会导致WAL日志不断堆积,当WAL日志写满磁盘空间时,将会导致实例锁定,无法写入数据,从而影响业务。
影响
状态为INACTIVE的Replication Slot被删除后,将会造成以下影响:
实例先前因INACTIVE Slot堆积而无法清理的WAL日志将被自动清理。
业务中无法再使用已删除的Slot。
操作步骤
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
在左侧导航栏单击日志管理。
在WAL日志管理页签即可看到所有Replication Slot相关信息。
Replication Slot信息中各参数与PostgreSQL的
pg_replication_slots
表中各字段对应,对应关系及解释如下:WAL日志管理参数
pg_replication_slots表对应字段
说明
Slot名称
slot_name
Replication Slot的名称。
Slot类型
slot_type
Replication Slot的类型,Slot类型包括:
physical
logical
使用插件(plugin)
plugin
RDS PostgreSQL默认支持三种插件:
test_decoding
pgoutput
wal2json
临时Slot(temporary)
temporary
是否为临时Slot。临时Slot是一种特殊类型的Slot,它仅在当前数据库会话期间存在,并在会话结束时自动删除。
true:临时Slot
false:永久Slot
数据库名称
database
Replication Slot所处的数据库。
WAL堆积量
无对应字段。
该参数取值由RDS内核计算所得。
Replication Slot造成的WAL日志堆积量,单位为MB。
逻辑订阅延迟
无对应字段。
该参数取值由RDS内核计算所得。
当前Replication Slot对应订阅端的逻辑订阅的具体延迟,单位为秒(s)。
是否活跃
active
Replication Slot当前是否被使用。
INACTIVE:不活跃
ACTIVE:活跃
(可选)如果某个Replication Slot的是否活跃列为INACTIVE,则会造成WAL日志不断堆积,请及时处理,处理方法如下:
在业务中使用此Slot,使其状态变为ACTIVE。
如果此Slot是冗余的,请单击操作列的删除。
相关OpenAPI
查询实例所有Replication Slot相关信息:DescribeSlots
删除实例Replication Slot:DeleteSlot
相关文档
通过排查PostgreSQL WAL日志堆积,可以有效识别主库和只读库的WAL日志堆积问题。
以下参数用于控制WAL日志的大小及其自动清理,您可以通过设置实例参数来进行配置。
max_wal_size:设置触发检查点的WAL日志大小。
min_wal_size:设置回收WAL日志的最小大小,只要WAL磁盘用量保持在此配置之下,在检查点时旧的WAL文件总是被回收以便未来使用,而不是直接被删除。
wal_buffers:为WAL设置共享内存中的磁盘页缓冲区大小,即用于尚未写入磁盘的WAL数据的共享内存量。