订阅管理

为了有效管理WAL日志,PolarDB PostgreSQL支持通过控制台查看逻辑复制槽(Logical Replication Slots)。

背景

当非活跃的逻辑复制槽较多而未及时清理时,将导致WAL日志不断堆积,占用大量存储空间,甚至可能写满磁盘导致集群锁定,集群锁定时无法写入数据,从而影响业务。

PolarDB PostgreSQL支持通过控制台查看逻辑复制槽(Logical Replication Slots),便于查看逻辑复制槽的活跃状态,然后手动删除非活跃的逻辑复制槽来清理WAL日志。

前提条件

对于集中式PolarDB PostgreSQL集群(产品版本企业版标准版),您可以通过控制台设置wal_level参数logical,修改该参数后集群将会重启,请在修改参数前做好业务安排,谨慎操作。

说明

PolarDB PostgreSQL分布式版集群的wal_level参数默认为logical,无需关注。

查看逻辑复制槽

说明
  • 如集群中不存在逻辑复制槽,请先创建相关资源。

  • 如您需要通过控制台查看逻辑复制槽,请联系我们处理。

  1. 登录PolarDB控制台,选择集群所在地域,在集群列表中单击目标集群ID进入详情页。

  2. 在左侧导航栏选择配置与管理 > 订阅管理,在WAL日志管理页签可查看逻辑复制槽(Logical Replication Slots)信息。

    WAL日志管理参数

    说明

    Slot名称

    逻辑复制槽名称。

    Slot类型

    逻辑复制槽的类型,仅支持logical

    使用插件(plugin)

    PolarDB PostgreSQL默认支持以下插件:

    • decoderbufs

    • decoder_raw

    • wal2json

    • pgoutput

    临时Slot(temporary)

    是否为临时Slot。临时Slot是一种特殊类型的Slot,它仅在当前数据库会话期间存在,并在会话结束时自动删除。

    • true:临时Slot。

    • false:永久Slot。

    数据库名称

    逻辑复制槽所处的数据库。

    WAL堆积量

    逻辑复制槽造成的WAL日志堆积量,单位为MB。

    逻辑订阅延迟

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

    是否活跃

    逻辑复制槽当前是否被使用。

    • INACTIVE:不活跃。

    • ACTIVE:活跃。

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

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

    • 确认此Slot冗余时,可使用SELECT pg_drop_replication_slot('slot_name');删除。

(可选)创建逻辑复制槽

  1. 在发布端数据库中创建发布。

    CREATE PUBLICATION <发布名称> FOR TABLE <表名>;

    示例:

    CREATE PUBLICATION pub1 FOR TABLE public.t1;
    说明

    您可通过SELECT * FROM pg_publication;查看当前集群发布信息。

  2. 在订阅端创建新订阅。此处发布端和订阅端是同集群不同数据库。

    1. 使用高权限账号在发布端数据库中创建逻辑复制槽。

      SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
    2. 在订阅端数据库中,创建与待订阅的发布端数据库表具有相同结构和名称的表。

    3. 在订阅端数据库中创建逻辑订阅。

      CREATE SUBSCRIPTION my_subscription
      CONNECTION 'channel_name=localhost dbname=<发布端数据库名> user=<高权限账号> password=<账号密码>'
      PUBLICATION pub1 WITH (create_slot=false,slot_name=<slot_name>);
      重要

      发布端数据库和订阅端数据库位于相同的集群时,必须使用WITH添加订阅参数create_slot=false