powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
16 сообщений из 16, страница 1 из 1
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39732872
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На кластере (1 мастер, 2 стендбая) наблюдается следующая картина:

1. Начинает расти лаг репликации между мастером и одним стендбаем.
2. Иду на сервер со стенбаем и вижу SELECT запрос, который читает данные из таблицы T. К этому времени запрос выполняется, скажем, один час.
3. По списку процессов на standby вижу, что WAL'ы получены с мастера, но не накатываются (в ps статус "waiting").
4. Смотрю на эту таблицу на местере и вижу что как раз перед тем, как начал расти лаг (скажем, за минуту до этого), по таблице T отработал автовакум.
5. Как только убиваю запрос на standby сервере WAL'ы начинают накатываться и лаг исчезает.

Настройки:

Код: css
1.
2.
3.
4.
5.
wal_receiver_status_interval = 10s
hot_standby_feedback = on
max_standby_streaming_delay = -1
max_standby_archive_delay = -1
vacuum_defer_cleanup_age = 0



Версия 9.5.13. Репликация streaming, асинхронная, используются слоты репликации.

Вопрос - почему строки могут чиститься н мастере (все симптомы говорят о том, что это именно так).
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39732995
gav21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bff7755a,
Как правило реплика может отставать по причинам нагрузки в сети, слабые диски на реплике, ну или аномально высокая активность на мастере которая порождает тонны WAL , которая реплика не успевает переварить.
Попробуйте оценить запросом в момент проблемы на мастере:

SELECT
client_addr AS client,
usename AS user,
application_name AS name,
state,
sync_state AS mode,
(pg_xlog_location_diff(pg_current_xlog_location(),sent_location) / 1024)::int as pendingKB, --network?
(pg_xlog_location_diff(sent_location,write_location) / 1024)::int as writeKB, --disks?
(pg_xlog_location_diff(write_location,flush_location) / 1024)::int as flushKB, --disks?
(pg_xlog_location_diff(flush_location,replay_location) / 1024)::int as replayKB, --disks/cpu?
(pg_xlog_location_diff(pg_current_xlog_location(),replay_location))::int / 1024 as total_lag_KB
FROM pg_stat_replication
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733037
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gav21bff7755a,
Как правило реплика может отставать по причинам нагрузки в сети, слабые диски на реплике, ну или аномально высокая активность на мастере которая порождает тонны WAL , которая реплика не успевает переварить.
Попробуйте оценить запросом в момент проблемы на мастере:
FROM pg_stat_replication

Мне кажется, вы невнимательно прочитали моё сообщение. Причём тут высокая нагрузка на мастере? Говорю же, WAL'ы не пишутся, процесс подвис из-за standby recovery конфликта.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733042
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикладываю картинку, которая отлично иллюстрирует описанное мной.

Внизу фиолетовый - это vacuum на мастере. а зелёный - длинный запрос на standby Видно, что как только vacuum заканчивается, начинает расти лаг а как только заканчивается длинный запрос на standby, лаг уменьшается.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733048
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bff7755aВопрос - почему строки могут чиститься н мастере (все симптомы говорят о том, что это именно так).
А почему бы им не чистится?..

Это типичная ситуация с запросами на реплике, если они идут по таблицам, которые активно пользуются на мастере.
Надо выбирать: или долгие запросы, или актуальная реплика.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733087
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bff7755aВопрос - почему строки могут чиститься н мастере (все симптомы говорят о том, что это именно так).

Тут все сложнее. Вы попали на ситуацию когда не мертвые строки чистятся а autovacuum в какой то из таблиц пытается обрезать свободное место в конце таблицы (а это требует коротокго acccessexclusive lock который wal replay не может взять если у вас есть долгая транзакция на реплике зацепившая эту таблицу).
См обсуждение:
https://www.postgresql.org/message-id/flat/c9374921e50a5e8fb1ecf04eb8c6ebc3@postgrespro.ru
и
https://www.postgresql.org/message-id/flat/CAHGQGwE5UqFqSq1=kV3QtTUtXphTdyHA-8rAj4A=Y e4kyp3BQ@mail.gmail.com

в общем в текущих версиях не лечится.
Я бы рекомендовал управлять через max_standby_streaming_delay если надо очень отсутствие лага.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733122
gav21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,
а если это будет синхронная реплика?
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733127
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gav21Maxim Boguk,
а если это будет синхронная реплика?

А синхронность реплики это не про wal replay а только на ЗАПИСЬ принятого wal на реплике на диск.
Синхронная реплика ну совсем не гарантирует что на реплике и мастере вы одно и тоже в select получите.
Так что получится ровно тоже самое с асинхронной репликой.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733130
gav21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,
а как же режим remote_apply, который как я понимаю гарантирует видимость строк на реплике?
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733150
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukbff7755aВопрос - почему строки могут чиститься н мастере (все симптомы говорят о том, что это именно так).

Тут все сложнее. Вы попали на ситуацию когда не мертвые строки чистятся а autovacuum в какой то из таблиц пытается обрезать свободное место в конце таблицы (а это требует коротокго acccessexclusive lock который wal replay не может взять если у вас есть долгая транзакция на реплике зацепившая эту таблицу).
См обсуждение:
https://www.postgresql.org/message-id/flat/c9374921e50a5e8fb1ecf04eb8c6ebc3@postgrespro.ru]https://www.postgresql.org/message-id/flat/c9374921e50a5e8fb1ecf04eb8c6ebc3@postgrespro.ru
и
https://www.postgresql.org/message-id/flat/CAHGQGwE5UqFqSq1=kV3QtTUtXphTdyHA-8rAj4A=Y e4kyp3BQ@mail.gmail.com

в общем в текущих версиях не лечится.
Я бы рекомендовал управлять через max_standby_streaming_delay если надо очень отсутствие лага.

Максим, спасибо вас за ответ. Я читал про truncate но не думал, что это когда-нибудь коснётся меня... Вы случайно не знаете, сделали ли с этим что-нибудь в 11 версии? Вроде разговоры шли об этом.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733160
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bff7755a,

Да, я пропустил упоминание hot_standby_feedback в теме :(

Патч всё ещё в работе, в 11-й точно ничего не появилось вокруг AEL блокировок.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733165
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bff7755a,

Оба упомянутых обсуждения были уже после feature freeze, но хотя что-то как багфикс ещё возможно что портируют.
Соответствующая запись в commitfest для патча: https://commitfest.postgresql.org/20/1683/ Всё ещё Needs review. И судя по обсуждению есть большие вопросы к корректности предложенного алгоритма, оставшиеся авторами патча без ответа.
radix-tree патча сейчас тоже ещё пока нет, до feature freeze 12 осталось около 4 месяцев, маловероятно. Ну и его backpatch не будет точно.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733170
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vyegorovbff7755a,

Да, я пропустил упоминание hot_standby_feedback в теме :(

Патч всё ещё в работе, в 11-й точно ничего не появилось вокруг AEL блокировок.
Виктор, а почему, например, не решили добавить опцию "не транкейтить таблицу при lazy vacuum"? Не смертельно ведь было бы.
И пользуясь случаем - я нашёл, где берётся блокировка, когда обрезается таблица на master ( внутри lazy_truncate_heap() ), но не нашёл где это происходит во время проигрывания WAL (там как-то с smgr всё сложно). Не могли бы подсказать мне, для удовлетворения моего любопытсвта?

Спасибо.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733176
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,

я смотрю в этом патче даже новый вид блокировки добавляется, настолько всё серьёзно.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733193
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bff7755aя смотрю в этом патче даже новый вид блокировки добавляется, настолько всё серьёзно.
Так основная проблема как раз с тем, чтобы обеспечить удаление страниц на диске и в памяти непротиворечиво и безопасно для конкурентных процессов.

bff7755aя нашёл, где берётся блокировка, когда обрезается таблица на master ( внутри lazy_truncate_heap() ), но не нашёл где это происходит во время проигрывания WAL (там как-то с smgr всё сложно). Не могли бы подсказать мне, для удовлетворения моего любопытсвта
Вот здесь, блокировка пишется в WAL (XLogInsert из LogAccessExclusiveLocks) и читается затем: https://github.com/postgres/postgres/blob/REL9_5_STABLE/src/backend/storage/ipc/standby.c#L785
(по идее, с gdb не проверял)

bff7755aВиктор, а почему, например, не решили добавить опцию "не транкейтить таблицу при lazy vacuum"? Не смертельно ведь было бы.
Выпиливать потом настройки довольно больно и ожидался патч с другой реализацией buffer mapping, как минимум решили подождать. Но что-то не видно активности.
...
Рейтинг: 0 / 0
Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
    #39733194
bff7755a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,

спасибо большое. Теперь всё встало на свои места. Скорее всего для этих целей буду делать логическую реплику.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Автовакум на мастере чистит строки нужные реплике при включенном hot_standby_feedback
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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