powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Странное поведение слейва PG при потоковой репликации и изменениях на мастере
13 сообщений из 13, страница 1 из 1
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38883938
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Есть два похожих больших приложения. На одном 9.3.4, на втором 9.2.9. Ситуация и там и там одна и таже.
Потоковая репликация, по 1-3 слейва. На каждой машине баунсер.

Есть регулярный ночной процесс, в котором меняется много данных.
Есть в этом процессе один этап, в котором удаляется чистится таблица (делит), делается большой инсерт в эту таблицу.
Таблица 100 мб, индексов 50 мб. Данных вставляется не много, но для что бы их посчитать уходит много времени и ресурсов. Там запрос по нескольким большим таблицам (десятки гб) с группировкой, агрегатами и юнионами.

В этот момент на мастере подскакивает CPU и другие показатели, но ничего критичного, мастер вывозит. Слейв такой же по конфигурации и железу по непонятным причинам затыкается. Продолжаться этот может 30 мин. Постгрес на слейве жрет много цпу, как бы вешается. Заканчивается все это перезапуском баунсера, который тоже в результате висит и даже после того как ПГ приходит в себя он не начинает работать.

Проблема в том, что постгрес вешается очень зло. Все новые соединения получают accept(), но дальше постгрес их не обрабатывает.
Таким образом любое подключение к постгресу в этот момент висит до бесконечности.

Чем занят постгрес в это время пока не смотрели. Мониторинг в это время так же не работает, т.к. его конекты к постгресу так же висят и прерывается процесс опроса метрик.

На слейвах в этот момент есть читающая нагрузка. Причем эта таблица так же активно читается.

Есть понимание что процесс нужно облегчать, уходить от полной перезаписи, уменьшать кол-во изменений.
Не понятно почему мастер переваривает, а слейв, который должен только накатить логи (таблица 100 мб), так вешается.

Планируем переделку процесса, обновление ПГ до 9.3.6.

Есть мысли о том, что происходит?
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38883942
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Artemiy,
DDL не делаете например, перед этим инсертом не делаете?
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38883964
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_,

В этой транзакции или в другой до?

В этой транзакции в одном аппликейшене делается create/drop temp table + индекс на ней.
В этой транзакции в другом аппликейшене не делается DDL.

В другой транзакции, раньше, делается:
TRUNCATE TABLE
setval
create/drop temp
SET CONSTRAINTS ALL DEFERRED
SET CONSTRAINTS ALL IMMEDIATE
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884008
Gold_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Artemiy,

Код: sql
1.
TRUNCATE TABLE


Эта TABLE на реплике активно читается? длинными транзакциями?
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884028
Artemiy,
а логи потгреса на стендбае и его баунсера не пробовали читать ?
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884031
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gold_,

Нет это постоянная таблица используется как "временная" в регулярном процессе. Пишется и читается только на мастере одним процессом. В нее заливаются данные из внешней системы.
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884128
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemiyGold_,

В этой транзакции или в другой до?

В этой транзакции в одном аппликейшене делается create/drop temp table + индекс на ней.
В этой транзакции в другом аппликейшене не делается DDL.

В другой транзакции, раньше, делается:
TRUNCATE TABLE
setval
create/drop temp
SET CONSTRAINTS ALL DEFERRED
SET CONSTRAINTS ALL IMMEDIATE


Без изучения ситуации глазами на репликах во время проблем вряд ли что то удасться сказать.
Обратить внимание на вывод top (LA/cpu usage) и на вывод iostat -x -m 10.

Вариантов много, один из наиболее вероятных - то что что после "делается большой инсерт" вы не делаете принудительный analyze таблицы в той же транзакции.

В итоге если реплика активно с этой таблицей работает может сложится ситуация кривых планов на реплике пока autoanalyze не сработает на мастере, а дальше домино:
кривые планы на реплике ->
CPU/LA в небо ->
замедляется проигрывание WAL c мастера так как ресурсов не хватает
-> даже если мастер быстро сделал autoanalyze когда он там еще проиграется на реплике в таких условиях никто не скажет
-> все грустно и печально (я такое на практике наблюдал пару раз).

В качестве острой приправы при большом max_connections/work_mem сервер у вас еще и в swap улетит вместе с кусками shared_buffer, и станет совсем весело.

PS: включите лог всех запросов с временами на реплике и посмотрите по логу потом чем реплика была занята в это время (если CPU/LA или io utilization были высокими). Ну и не надо ставить max_connections больше чем cpu*2 на чтобы в случае если все коннекты были всетаки заняты работой сервер ну хоть как то отвечал.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884187
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
swapoff -a

наше всё)
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884199
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurinswapoff -a

наше всё)

лучше всетаки vm.swappiness=1 + swap
иначе начинает злой OOM killer приходить не по делу временами (т.е. в ситуации когда память на самом то деле есть).
Ну или надо аккуратно с overcommit memory настройками играться.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884234
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

> overcommit memory настройками играться

да, че-то там вроде надо настраивать
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884265
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В логах баунсера:
2015-02-16 03:39:10.520 15817 LOG S-0xeadc70: user/user@ip:5432 new connection to server
2015-02-16 03:39:11.813 15817 LOG S-0xeadb50: user/user@ip:5432 new connection to server
2015-02-16 03:39:13.154 15817 LOG S-0xeae450: user/user@ip:5432 new connection to server
2015-02-16 03:39:13.282 15817 LOG S-0xead910: user/user@ip:5432 new connection to server
2015-02-16 03:39:14.178 15817 LOG S-0xeae0f0: user/user@ip:5432 new connection to server
2015-02-16 03:39:15.903 15817 LOG S-0xeada30: user/user@ip:5432 new connection to server
2015-02-16 03:39:24.996 15817 LOG S-0xead5b0: user/user@ip:5432 new connection to server
2015-02-16 03:39:40.309 15817 LOG S-0xead5b0: user/user@ip:5432 closing because: connect timeout (age=15)
2015-02-16 03:39:40.309 15817 LOG S-0xeae330: user/user@ip:5432 new connection to server
2015-02-16 03:39:55.341 15817 LOG S-0xeae330: user/user@ip:5432 closing because: connect timeout (age=15)
2015-02-16 03:39:55.341 15817 LOG S-0xead5b0: user/user@ip:5432 new connection to server
2015-02-16 03:40:00.147 15817 LOG Stats: 115 req/s, in 24863 b/s, out 388726 b/s,query 92157 us
2015-02-16 03:40:10.371 15817 LOG S-0xead5b0: user/user@ip:5432 closing because: connect timeout (age=15)
2015-02-16 03:40:10.462 15817 LOG S-0xead5b0: user/user@ip:5432 new connection to server
2015-02-16 03:40:25.741 15817 LOG S-0xead5b0: user/user@ip:5432 closing because: connect timeout (age=15)
2015-02-16 03:40:25.741 15817 LOG S-0xeae330: user/user@ip:5432 new connection to server
2015-02-16 03:40:40.779 15817 LOG S-0xeae330: user/user@ip:5432 closing because: connect timeout (age=15)
2015-02-16 03:40:40.779 15817 LOG S-0xead5b0: user/user@ip:5432 new connection to server
2015-02-16 03:40:48.447 15817 LOG S-0xeae330: user/user@ip:5432 new connection to server


много новых коннектов, видимо потому-что сервер начал тормозить, запросы медленно выполняются

В лога ПГ из интересного только:
Feb 16 03:38:29 x postgres[8085]: [4-1] ERROR: recovery is in progress
Feb 16 03:38:29 x postgres[8085]: [4-2] HINT: WAL control functions cannot be executed during recovery.
Feb 16 03:38:29 x postgres[8085]: [4-3] STATEMENT: select pg_xlogfile_name(pg_current_xlog_location())
...
Feb 16 03:56:30 x postgres[28121]: [30659-1] LOG: restartpoint complete: wrote 346060 buffers (9.0%); 0 transaction log file(s) added, 0 removed, 139 recycled; write=1079.643 s, sync=1.138 s, total=1080.872 s; sync files=572, longes
t=0.706 s, average=0.001 s
Feb 16 03:56:30 x postgres[28121]: [30660-1] LOG: recovery restart point at FB3/5075A350
Feb 16 03:56:30 x postgres[28121]: [30660-2] DETAIL: last completed transaction was at log time 2015-02-16 03:43:32.929472+05


но это же просто накат лога.

и это из интересного
Feb 16 03:42:46 x postgres[9644]: [4-1] LOG: expected password response, got message type 88


плюс из-за кривого запроса, регулярная запись темп файла на 170 мб.
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884817
Artemiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Правильно я понимаю, что важность принудительного analyze стремится к нулю если таблица по сути не меняется?
Кол-во записей и их распределении меняется по минимуму. Меняется какая-то внутренняя статистика.
...
Рейтинг: 0 / 0
Странное поведение слейва PG при потоковой репликации и изменениях на мастере
    #38884866
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtemiyMaxim Boguk,

Правильно я понимаю, что важность принудительного analyze стремится к нулю если таблица по сути не меняется?
Кол-во записей и их распределении меняется по минимуму. Меняется какая-то внутренняя статистика.

да в принципе так.
А дальше логи и анализ поведения реплики во время проблемы.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Странное поведение слейва PG при потоковой репликации и изменениях на мастере
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]