WAL日志管理

RDS PostgreSQL支持通过控制台或API查看和删除Replication Slot,实现WAL日志管理。

背景

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。

操作步骤

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击日志管理

  3. 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内核计算所得。

    计算方法

    SELECT pg_size_pretty(
      pg_wal_lsn_diff(
        pg_current_wal_insert_lsn(), 
        restart_lsn)
    	) AS wal_delay 
    FROM pg_replication_slots;

    Replication Slot造成的WAL日志堆积量,单位为MB。

    逻辑订阅延迟

    无对应字段。

    该参数取值由RDS内核计算所得。

    计算方法

    SELECT *, CAST(extract(epoch FROM replay_lag) AS BIGINT) 
    AS sub_replay_lag 
    FROM pg_stat_replication;

    当前Replication Slot对应订阅端的逻辑订阅的具体延迟,单位为秒(s)。

    是否活跃

    active

    Replication Slot当前是否被使用。

    • INACTIVE:不活跃

    • ACTIVE:活跃

  4. (可选)如果某个Replication Slot的是否活跃列为INACTIVE,则会造成WAL日志不断堆积,请及时处理,处理方法如下:

    • 在业务中使用此Slot,使其状态变为ACTIVE

    • 如果此Slot是冗余的,请单击操作列的删除

说明

了解更多Slot的相关用法及如何创建Slot,请参见:

相关OpenAPI