Логическая репликация больших таблиц PostgreSQL с бесконечной синхронизацией

У меня есть большая и быстрорастущая таблица PostgreSQL (индекс 166 ГБ и база данных 72 ГБ). И я хочу настроить логическую репликацию этой таблицы. Версия 11.4 с двух сторон.

Пытаюсь сделать это 2 недели, но единственное, что у меня есть, это бесконечная синхронизация и растущий размер таблицы на реплике (уже индекс 293 Гб и таблица 88 Гб, больше оригинала, и ошибок в журнале нет). Я также пытался сделать дамп, восстановить его и начать синхронизацию, но получил ошибки с существующими первичными ключами. Значение Backend_xmin статистики репликации меняется раз в неделю, но состояние синхронизации по-прежнему «запускается». Сетевое соединение между этими серверами вообще не используется (они находятся в одном центре обработки данных), фактическая скорость составляет 300-400 КБ (похоже, это в основном потоковая часть процесса репликации).

Итак, вопрос в том, как правильно настроить логическую репликацию большой и быстрорастущей таблицы, возможно ли это каким-то образом? Спасибо.


person wishcaster    schedule 28.08.2019    source источник
comment
Вы говорите, что ваша база данных быстро растет, поэтому, когда вы говорите, что она составляет 72 ГБ, в какой момент времени это было 72 ГБ?   -  person jjanes    schedule 28.08.2019


Ответы (2)


Пытаюсь сделать это 2 недели, но единственное, что у меня есть, это бесконечная синхронизация и растущий размер таблицы на реплике (уже индекс 293 Гб и таблица 88 Гб, больше оригинала, и ошибок в журнале нет).

Отбросьте неидентификационные индексы на реплике до завершения синхронизации.

person jjanes    schedule 28.08.2019
comment
Спасибо, после удаления индексов рабочий логической репликации начал синхронизировать таблицу с высокой скоростью, и через несколько часов синхронизация была выполнена. - person wishcaster; 29.08.2019

Проблема точно такая же. Проверьте журналы, я обнаружил следующую ошибку:

ERROR:  could not receive data from WAL stream: ERROR:  canceling statement due to statement timeout

Из-за больших таблиц репликация отвалилась по таймауту Увеличив таймауты, проблема исчезла

PS В идеале было бы круче выставить отдельные таймауты для репликации и для основной базы.

person unlike777    schedule 12.03.2021