Я збираюся додати трохи оновленої інформації та посилання на відмінну відповідь @ max-malysh вище.
Коротше кажучи, якщо ви щось робите на господаря, це потрібно повторити на рабі. Postgres використовує для цього записи WAL, які надсилаються після кожної реєстраційної дії на ведучому до раба. Потім підлеглий виконує дію, і вони знову синхронізуються. В одному з декількох сценаріїв ви можете вступити в конфлікт між рабом із тим, що надходить від ведучого в дії WAL. У більшості з них на рабі відбувається транзакція, яка суперечить тому, що дія WAL хоче змінити. У цьому випадку у вас є два варіанти:
- На деякий час затримайте застосування дії WAL, що дозволить підлеглому закінчити свою конфліктну транзакцію, а потім застосувати дію.
- Скасуйте суперечливий запит на підлеглому.
Ми стурбовані №1 та двома значеннями:
max_standby_archive_delay
- це затримка, яка використовується після тривалого відключення між ведучим і веденим, коли дані зчитуються з архіву WAL, що не є поточними даними.
max_standby_streaming_delay
- затримка, що використовується для скасування запитів, коли записи WAL надходять через поточну реплікацію.
Як правило, якщо ваш сервер призначений для реплікації високої доступності, ви хочете, щоб ці номери були короткими. Для 30000
цього достатньо встановлення за замовчуванням (мілісекунд, якщо не вказано одиниць). Якщо ви хочете налаштувати щось на зразок архіву, репортажу чи читання-репліки, які можуть мати дуже тривалі запити, тоді вам потрібно встановити це на щось вище, щоб уникнути скасованих запитів. Рекомендована 900s
настройка вище здається гарною відправною точкою. Я не згоден з офіційними документами щодо встановлення нескінченного значення-1
як хорошої ідеї - це може замаскувати якийсь баггі-код і спричинити багато проблем.
Одне застереження щодо довготривалих запитів та встановлення цих значень вище - це те, що інші запити, що працюють на підлеглому, паралельно довгого запущеного, який спричиняє затримку дії WAL, бачитимуть старі дані, поки довгий запит не буде завершений. Розробникам необхідно зрозуміти це і послідовно виконувати запити, які не повинні працювати одночасно.
Для повного пояснення того, як max_standby_archive_delay
і як max_standby_streaming_delay
працювати і навіщо, перейдіть сюди .