文档首页/ 云数据库 RDS/ 用户指南/ RDS for PostgreSQL用户指南/ 性能调优/ 存在非活跃逻辑复制槽问题定位及处理方法
更新时间:2024-09-05 GMT+08:00

存在非活跃逻辑复制槽问题定位及处理方法

指标异常说明(影响)

生产数据库一定要及时清理非活跃逻辑复制槽。配置非活跃逻辑复制槽监控指标(连续3个周期 上报值≥1 Counts),当存在时,需要及时关注并处理。

存在非活跃逻辑复制槽产生的影响:

  • 数据库残留的非活跃逻辑复制槽,会一直保留逻辑复制所需要的资源。数据库wal日志无法被清理,从而导致wal日志积压,占用更多的磁盘空间,严重时会导致磁盘满。
  • 可能意味着应用侧的业务未按预期运行,存在风险。

问题排查思路

数据库存在非活跃逻辑复制槽排查和处理的思路是:

  1. 排查是否存在失效的逻辑复制槽。
  2. 业务确认是否需要继续使用该逻辑复制槽。
  3. 删除失效的逻辑复制槽。

排查及解决方法

  1. 排查是否存在失效的逻辑复制槽。

    在发布端执行如下SQL,排查是否存在失效的逻辑复制槽。

    若有返回时,则说明数据库中存在失效的逻辑复制槽,其中返回的slot_name字段为失效逻辑复制槽的名称。

    select slot_name,database,active from pg_replication_slots where active ='f' and slot_type='logical';
  2. 业务确认是否需要继续使用该逻辑复制槽。

    联系业务方排查是否要继续使用该逻辑复制槽,若不使用时执行3

    若需继续使用,建议业务按照以下方向排查:

    1. 订阅端创建订阅时未启用逻辑复制槽的复制,手动设置为disable状态。
      在订阅端执行以下SQL查看subenabled列的字段返回。
      select  subname,subenabled from pg_subscription;
      • 若subenabled列的字段返回为f,说明订阅未启用逻辑复制,执行以下SQL启用订阅的逻辑复制。
        ALTER SUBSCRIPTION sub_name ENABLE;
      • 若返回为t,则进行以下步骤排查。
    2. 使用其他工具执行任务时使用的逻辑复制槽未自动清理,由于任务中断或源数据库或目标数据库的某些操作,如备份、重建索引等意外情况产生。
      在发布端执行如下SQL查询,观察返回的“slot_name”字段的值是否是以drs等开头,则说明是执行drs任务产生的该逻辑复制槽,此时可根据任务情况,判断是否执行3清理。
      select slot_name,database,active from pg_replication_slots where active ='f' and slot_type='logical';
  3. 如果确认不再使用逻辑复制槽,则删除失效的逻辑复制槽。
    select pg_drop_replication_slot('slot_name');