你可以看到这些问题
https://www.reddit.com/r/aws/comments/7snob5/postgresql_transaction_logs_fill_up_storage_till/
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。