为了有效管理WAL日志,PolarDB PostgreSQL版支持通过控制台查看逻辑复制槽(Logical Replication Slots)。
背景
当非活跃的逻辑复制槽较多而未及时清理时,将导致WAL日志不断堆积,占用大量存储空间,甚至可能写满磁盘导致集群锁定,集群锁定时无法写入数据,从而影响业务。
PolarDB PostgreSQL版支持通过控制台查看逻辑复制槽(Logical Replication Slots),便于查看逻辑复制槽的活跃状态,然后手动删除非活跃的逻辑复制槽来清理WAL日志。
前提条件
对于集中式PolarDB PostgreSQL版集群(产品版本为企业版或标准版),您可以通过控制台设置wal_level参数为logical
,修改该参数后集群将会重启,请在修改参数前做好业务安排,谨慎操作。
PolarDB PostgreSQL分布式版集群的wal_level
参数默认为logical
,无需关注。
查看逻辑复制槽
登录PolarDB控制台,选择集群所在地域,在集群列表中单击目标集群ID进入详情页。
在左侧导航栏选择
,在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:活跃。
(可选)如果某个逻辑复制槽的是否活跃列为INACTIVE,则会造成WAL日志不断堆积,请及时处理,处理方法如下:
在业务中使用此Slot,使其状态变为ACTIVE。
确认此Slot冗余时,可使用
SELECT pg_drop_replication_slot('slot_name');
删除。
(可选)创建逻辑复制槽
在发布端数据库中创建发布。
CREATE PUBLICATION <发布名称> FOR TABLE <表名>;
示例:
CREATE PUBLICATION pub1 FOR TABLE public.t1;
说明您可通过
SELECT * FROM pg_publication;
查看当前集群发布信息。在订阅端创建新订阅。此处发布端和订阅端是同集群不同数据库。
使用高权限账号在发布端数据库中创建逻辑复制槽。
SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
在订阅端数据库中,创建与待订阅的发布端数据库表具有相同结构和名称的表。
在订阅端数据库中创建逻辑订阅。
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
。