1

你可以看到这些问题

  1. https://www.reddit.com/r/aws/comments/7snob5/postgresql_transaction_logs_fill_up_storage_till/

  2. https://dba.stackexchange.com/questions/173267/aws-rds-postgres-logical-replication?rq=1

我的问题可能有点不同。当数据发生变化时,我使用https://github.com/jiamo/python-psql-replication进行从 postgres 到 es 的复制。当有数据更改时,事务日志很好。但是,当不再有数据更改时,事务日志将继续如下所示:

在此处输入图像描述

09/23 - 09/25 是周末(所以数据不再变化,事务日志继续运行)

我有一些技巧,想通过更新 crontab 中的一些数据来解决这个问题。但是当数据发生变化时,事务日志似乎不会立即下降(这需要更多时间来验证此方法)

我现在的问题是:任何人都可以解释这种现象并提供更好的解决方法吗?

添加更多关于诀窍的信息。

=> SELECT pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
CD/1C0005C0
(1 row)

两小时后:

=> SELECT pg_current_wal_lsn();
pg_current_wal_lsn
--------------------
CD/41000410

当没有插入/更新/删除活动时。pg_current_wal_lsn 仍在不断增加。

pg 插槽是这样的

=> select * from pg_replication_slots;
slot_name   |  plugin  | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn
--------------+----------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------
wal2json_rds | wal2json | logical   |  16400 | test | f         | t      |      11270 |      |       593776 | CD/140235B8 | CD/140235B8

confirmed_flush_lsn太小了pg_current_wal_lsn

诀窍(这里是日志),我使用 crontab 更新了一个简单的行,但之后数据不再更改。而confirmed_flush_lsn 保持在 CD/140235B8

host:25a5743b67db time:2018-10-01 09:23:21.865489 before sleep wal_end 875955403896 hex CB/F302BC78 next_lsn 876123392024 hex CB/FD060818
host:25a5743b67db time:2018-10-01 09:23:32.087501 before sleep wal_end 875955403896 hex CB/F302BC78 next_lsn 876123392024 hex CB/FD060818
host:25a5743b67db time:2018-10-01 09:23:38.705198 future len tmp_list is 1
host:25a5743b67db time:2018-10-01 09:23:38.763092 success bulk 1
host:25a5743b67db time:2018-10-01 09:23:38.763327 queue 0 getters 1 putters 0
host:25a5743b67db time:2018-10-01 09:23:38.763503 queue begin to wait......
host:25a5743b67db time:2018-10-01 09:23:42.310556 before sleep wal_end 880803984024 hex CD/14023298 next_lsn 880803984824 hex CD/140235B8
host:25a5743b67db time:2018-10-01 09:23:52.531998 before sleep wal_end 880803984024 hex CD/14023298 next_lsn 880803984824 hex CD/140235B8

我想要做的是增加confirmed_flush_lsn没有其他数据更改的时间(通过更新一行的状态列)。但似乎它增加了价值但不让RDS删除一些事务日志。

- - - - 更新 - - - - - -

我改变了改变两行而不是一行的技巧(意味着有更多的数据更改)这次可以减少事务日志,但仍然不会像这个 png 那样减少太多。在周末,我的技巧可以减少事务日志的大小。但不像正常的一天,数据变化更多,大小可以减少到0。 在此处输入图像描述

4

1 回答 1

1

在 CDC 模式下,AWS 的数据迁移服务 (DMS) 创建一个复制槽并订阅它,就像您正在做的那样。它包括一个发送常规虚拟查询的选项,以确保复制槽位置前进。我不确定它是如何实现的,但我相信它会为您指明正确的方向。在DMS 发行说明中搜索“WAL heartbeat” 。

于 2018-10-01T14:37:18.667 回答