powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
7 сообщений из 7, страница 1 из 1
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
    #39873477
user_t0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер.

Вот такая ошибка возникает при потоковой репликации и длинном запросе.


ОШИБКА: выполнение оператора отменено из-за конфликта с процессом восстановления
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.


Подскажите пожалуйста из-за чего эта ошибка?


И как от нее избавиться?
...
Рейтинг: 0 / 0
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
    #39873494
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_t0,

из-за конфликта репликации, как написано. Репликация говорит делай Х, реплика видит "не могу сделать Х, оно ещё нужно моему выполняемому запросу".. Что делать реплике?

- ждать завершение запроса и приостановить репликацию
- продолжить репликацию и отменить запущенный запрос

Сначала ждём до max_standby_streaming_delay, затем отменяем.
...
Рейтинг: 0 / 0
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
    #39873498
user_t0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkijuser_t0,

из-за конфликта репликации, как написано. Репликация говорит делай Х, реплика видит "не могу сделать Х, оно ещё нужно моему выполняемому запросу".. Что делать реплике?

- ждать завершение запроса и приостановить репликацию
- продолжить репликацию и отменить запущенный запрос

Сначала ждём до max_standby_streaming_delay, затем отменяем.

Спасибо за ответ.



Но, на мастере есть слот репликации, который связан с репликой.


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

Т.е. получается что в любом случае запрос не может быть дольше чем max_standby_streaming_delay ? (Хоть со слотом хоть без)
...
Рейтинг: 0 / 0
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
    #39873499
user_t0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как же тогда настроить мастер-реплика, чтобы реплика могла выдержать запросы по несколько минут и при этом не было отставания от мастера более чем 10-20 сек ?
...
Рейтинг: 0 / 0
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
    #39873502
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_t0Но, на мастере есть слот репликации, который связан с репликой.

Я думал он как раз и служит для того, чтобы не было подобных конфликтов и чтобы он держал нужные реплике данные на мастере, не позволяя их вычищать вакууму.
Вообще никак не связан.
Слот репликации - чтобы база не удалила WAL. Писать в WAL база может что угодно и сколько угодно пока не закончится место на диске.
Реплика может вовсе не использовать протокол репликации и быть всё равно репликой. Старые file shipping через archive_command/restore_command - в этом случае между мастером и репликой канала связи может не быть в принципе.

user_t0Т.е. получается что в любом случае запрос не может быть дольше чем max_standby_streaming_delay ? (Хоть со слотом хоть без)
Может, max_standby_streaming_delay считается от начала конфликта репликации.

user_t0Как же тогда настроить мастер-реплика, чтобы реплика могла выдержать запросы по несколько минут и при этом не было отставания от мастера более чем 10-20 сек ?
hot_standby_feedback если вы понимаете как это будет воздействовать на весь кластер.
...
Рейтинг: 0 / 0
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
    #39873517
user_t0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkijuser_t0Но, на мастере есть слот репликации, который связан с репликой.

Я думал он как раз и служит для того, чтобы не было подобных конфликтов и чтобы он держал нужные реплике данные на мастере, не позволяя их вычищать вакууму.
Вообще никак не связан.
Слот репликации - чтобы база не удалила WAL. Писать в WAL база может что угодно и сколько угодно пока не закончится место на диске.
Реплика может вовсе не использовать протокол репликации и быть всё равно репликой. Старые file shipping через archive_command/restore_command - в этом случае между мастером и репликой канала связи может не быть в принципе.

user_t0Т.е. получается что в любом случае запрос не может быть дольше чем max_standby_streaming_delay ? (Хоть со слотом хоть без)
Может, max_standby_streaming_delay считается от начала конфликта репликации.

user_t0Как же тогда настроить мастер-реплика, чтобы реплика могла выдержать запросы по несколько минут и при этом не было отставания от мастера более чем 10-20 сек ?
hot_standby_feedback если вы понимаете как это будет воздействовать на весь кластер.

Благодарю, картина проясняется.

Правильно ли я понял что слот репликации нужен только для того, чтобы мастер не удалил WAL файлы, которые не применились на реплике? Т.е. на потоковую репликацию он вообще не влияет пока она не станет файловой (из-за недоступности порта, например).

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

Или есть еще какие-то подводные камни с hot_standby_feedback?
...
Рейтинг: 0 / 0
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
    #39873559
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user_t0Правильно ли я понял что слот репликации нужен только для того, чтобы мастер не удалил WAL файлы, которые не применились на реплике?
пока реплика не ответила что эти сегменты получила. Никакой зависимости от "применились". Слот может читать вовсе не реплика. а barman какой-нибудь для целей ведения PitR бекапа.

user_t0Т.е. на потоковую репликацию он вообще не влияет пока она не станет файловой (из-за недоступности порта, например).
То есть гарантирует, что сколько бы ни была недоступна реплика - она сможет догнать мастер только по streaming репликации. Потому что база где слот создан (это не обязательно мастер) эти WAL не удалит пока их кто-то не прочитает. Даже если при этом база грохнется в ошибку из-за полного исчерпания места на диске

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


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