Что приводит к тому, что данные в реплике чтения становятся old_snapshot и вызывают конфликт? - PullRequest
1 голос
/ 09 мая 2020

После нескольких встреч (на экземпляре RDS Postgres):

ERROR: canceling statement due to conflict with recovery
Detail: User query might have needed to see row versions that must be removed

Я запустил (в горячем резерве):

SELECT *
FROM pg_stat_database_conflicts;

И обнаружил, что все конфликты связаны с confl_snapshot

Что объясняется в документации как:

confl_snapshot: количество запросов в этой базе данных, которые были отменены из-за к старым снимкам

Что может быть причиной этого конфликта (старый снимок)?

Если это поможет, вот некоторые из соответствующих настроек (запустив SHOW ALL ; на в режиме ожидания):

hot_standby: on
hot_standby_feedback: off
max_standby_archive_delay: 30s
max_standby_streaming_delay: 1h
name,setting
old_snapshot_threshold: -1
vacuum_defer_cleanup_age: 0
vacuum_freeze_min_age: 50000000
vacuum_freeze_table_age: 150000000
vacuum_multixact_freeze_min_age: 5000000
vacuum_multixact_freeze_table_age: 150000000
wal_level: replica
wal_receiver_status_interval: 10s
wal_receiver_timeout: 30s
wal_retrieve_retry_interval: 5s
wal_segment_size: 16MB
wal_sender_timeout: 30s
wal_writer_delay: 200ms
...