postgresql - AWS RDS Postgresql 事务日志在没有数据更改时继续运行?

标签 postgresql amazon-web-services database-replication transaction-log wal

你可以看到这些问题

  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。当有数据更改时,事务日志很好。但是,当不再有数据更改时,Transactioin 日志会继续这样:

enter image description here

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_lsnpg_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(通过更新行的状态列)。但似乎增加了值(value)但没有让RDS删除一些事务日志。

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

这次我更改了更改两行而不是一行的技巧(意味着有更多的数据更改)事务日志可以减少但仍然不会像这个 png 那样减少太多。在周末,我的技巧奏效了,它减少了事务日志的大小。但不像平时有更多数据更改并且大小可以减少到 0。 enter image description here

最佳答案

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

关于postgresql - AWS RDS Postgresql 事务日志在没有数据更改时继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52589058/

相关文章:

ruby-on-rails - Rails 5.0.1,postgresql - 带别名的外键和包含失败的别名表

postgresql - 无法为 Amazon RDS Aurora 设置 postgres 9.6 数据库参数

mysql在表中创建记录时插入server_id

MySQL 到 MSSQL 复制

MySQL : data is not replicating

postgresql - 全文搜索缺失词

postgresql - monetdb 中的字符串函数

postgresql - 如何设置 pgx 以从数据库中获取 UTC 值?

java - 如何在并发环境中设计到数据库的http连接(是否为静态变量)

java - 同一用户多次发送推送通知的多个 GCM 注册 ID