OMS中Postgresql 的增量同步任务,被释放后复制槽依然存在。

【 使用环境 】 测试环境
【 OB or 其他组件 】OMS
【 使用版本 】4.2.8_CE
【问题描述】 使用 OMS 配置 PGtoOB 的增量同步任务后, 暂停并释放任务,但是复制槽依然存在,导致多次测试后复制槽满,再次创建增量任务会失败,必须手动到数据库中删除复制槽才能正常。

PG 数据库为 15.3

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

1 个赞

根据文档库中的信息,OMS 社区版在释放数据同步任务后,确实会终止当前任务,但不会删除该任务的详细信息(如任务名称、最新位点等)。然而,对于 PostgreSQL 的复制槽是否会被自动清理的问题,文档中并未明确提及。以下是针对您问题的分析和建议:


1. 问题分析

  • OMS 释放任务的行为
    根据文档片段 4 的描述,OMS 社区版在释放数据同步任务时,会终止当前任务,但不会删除任务本身,用户仍可以查看任务的详细信息。然而,文档未提到是否会清理与任务相关的外部资源(如 PostgreSQL 的复制槽)。

  • PostgreSQL 复制槽的行为
    PostgreSQL 的复制槽(Replication Slot)是用于逻辑复制的机制,通常需要显式删除。如果 OMS 在释放任务时没有主动调用 PostgreSQL 的接口来清理复制槽,则复制槽可能会一直保留,直到手动删除。

  • 问题表现
    您提到在多次测试后,复制槽满导致增量任务创建失败。这表明 OMS 在释放任务时并未清理对应的复制槽,需要手动干预。


2. 解决方案

(1)手动清理复制槽

您可以登录 PostgreSQL 数据库,使用以下 SQL 查询并删除不再需要的复制槽:

-- 查询现有的复制槽
SELECT * FROM pg_replication_slots;

-- 删除指定的复制槽(替换 slot_name 为实际的复制槽名称)
SELECT pg_drop_replication_slot('slot_name');

(2)反馈给 OMS 开发团队

根据您的描述,OMS 在释放任务时未清理复制槽可能是一个功能缺失或 Bug。建议将此问题反馈给 OMS 的开发团队或技术支持团队,以便在未来版本中修复此问题。

(3)自动化清理脚本

如果您频繁遇到此问题,可以编写一个自动化脚本来定期清理不再需要的复制槽。例如:

#!/bin/bash

# PostgreSQL 连接参数
PG_HOST="your_pg_host"
PG_PORT="5432"
PG_USER="your_pg_user"
PG_DB="your_pg_db"

# 查询所有复制槽
slots=$(psql -h $PG_HOST -p $PG_PORT -U $PG_USER -d $PG_DB -c "SELECT slot_name FROM pg_replication_slots;" -t)

# 遍历并删除每个复制槽
for slot in $slots; do
    echo "Dropping replication slot: $slot"
    psql -h $PG_HOST -p $PG_PORT -U $PG_USER -d $PG_DB -c "SELECT pg_drop_replication_slot('$slot');"
done

(4)检查 OMS 日志

您可以检查 OMS 的日志文件,确认在释放任务时是否有尝试清理复制槽的相关记录。如果日志中没有相关操作记录,则可以进一步验证这是 OMS 的功能缺失。


3. 改进建议

为了防止类似问题再次发生,您可以向 OMS 团队提出以下改进建议:

  • 在释放任务时,自动清理与任务相关的复制槽。
  • 提供配置选项,允许用户选择是否在释放任务时清理复制槽。
  • 在任务释放页面增加提示信息,提醒用户手动清理复制槽(如果未自动清理)。

4. 总结

目前,OMS 社区版在释放 PostgreSQL 增量同步任务时,未明确说明是否会清理复制槽。因此,您需要手动清理复制槽以避免资源占用问题。同时,建议将此问题反馈给 OMS 团队,以便在未来版本中改进此功能。

如果需要进一步帮助,请随时联系 OceanBase 的人工答疑团队。

具体信息可参考以下文档:

  1. 批量操作数据同步任务
  2. 释放和删除数据同步任务
  3. 批量操作数据迁移任务
  4. 启动和暂停数据同步任务
1 个赞