Postgres 逻辑复制停留在 LSN 值。我想用 pg_replication_origin_advance 超越它

问题描述 投票:0回答:1
  • AWS RDS 上的 Postgres 13
  • 复制槽的大小正在增长
  • 主站和从站的 CPU 和 I/O 都很低
  • 即使收到的 LSN 不断前进,订阅者似乎仍停留在
    33533/7D2841D8
    。有一个逻辑工作者在订阅者上运行,因为我在
    pg_stat_activity
    中看到它,但我不确定它在做什么。

无论这笔交易是什么,我都想终止,因为它已经持续了好几天了。我找到了

pg_replication_origin_advance
函数,它可以让我做到这一点,但是我不知道“下一个”LSN 值是什么。有什么办法可以查到吗?

postgresql replication database-replication
1个回答
0
投票

我弄清楚了我的问题是什么:订阅者上的触发器。

我在

pg_locks
看到一张桌子不断被撞击。表上有一个排他锁,并且没有其他查询想要使用它,这很好。一直很忙。

不知怎的,我发现了

pg_stat_user_functions
,它表示一个函数(如触发函数)执行了多少时间。有两个函数运行时间非常长,并且持续上升。

我做了一个

alter table foo disable trigger x
,一旦完成,复制立即开始流动。我的数据现在已经过时了,因为触发器没有运行,但只要我的发布商不会因为空间不足而崩溃,那就没问题。复制完成后,我重新启用了触发器,一切都运行正常。

© www.soinside.com 2019 - 2024. All rights reserved.