Вы можете увидеть эти проблемы
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, но после этого данные больше не меняются.И подтвержденный_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 удалять некоторые журналы транзакций.
-------- update ------------
Я изменил трюк, чтобы изменить две строки вместо одной строки (то есть немного изменить данные), на этот раз журнал транзакций может быть уменьшен, но все же не слишком уменьшен, как этот png.В выходные дни работает мой трюк, который уменьшает размер журнала транзакций.Но не так, как в обычный день, когда происходит большее изменение данных, а размер можно уменьшить до 0.