6
Реплика для отчетов
запросы на реплике должны отрабатывать, в том числе и долгие
(но не требуются самые актуальные данные)
мастер не должен испытывать негативного влияния обратной связи
чтобы совсем развязать серверы — убрать слот и использовать архив WAL
основной сервер
(мастер)
сегменты WAL
select, insert
update, delete
резервный сервер
(реплика)
wal sender wal receiver startup
synchronous_commit = off
hot_standby_feedback = off
max_standby_streaming_delay = −1
Еще один возможный вариант — разделение по серверам нагрузки
разного типа. Основной сервер может брать на себя OLTP-нагрузку,
а длительные читающие запросы (отчеты) можно вынести на реплику.
Кроме распределения нагрузки между серверами, такое решение
позволит избежать проблемы с тем, что длительные запросы на
основном сервере могут задерживать выполнение очистки и приводить
к разрастанию таблиц.
Из этих соображений «отчетная» реплика должна быть максимально
отделена от основного сервера. Должна быть отключена обратная
связь (hot_standby_feedback = off), но время откладывания
конфликтующих журнальных записей нужно сильно увеличить, вплоть
до бесконечности (max_standby_streaming_delay = −1).
Поскольку для длительных отчетов не требуются сиюминутные данные,
можно, при наличии архива, отказаться от слота репликации (не забыв
выставить параметр max_standby_archive_delay аналогично
max_standby_streaming_delay). Тогда, если мастер успеет удалить
необходимый реплике файл, реплика возьмет его из архива.
Такую реплику можно также использовать для выполнения резервного
копирования.
Разумеется, на практике возможны и другие сочетания параметров.
Главное — четко понимать, какую задачу требуется решить, и какое
влияние оказывают те или иные параметры.