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

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


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


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


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

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

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

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

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

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

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

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



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


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

Т.е. получается что в любом случае запрос не может быть дольше чем max_standby_streaming_delay ? (Хоть со слотом хоть без)
...
Рейтинг: 0 / 0
08.10.2019, 16:46
    #39873499
user_t0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
Как же тогда настроить мастер-реплика, чтобы реплика могла выдержать запросы по несколько минут и при этом не было отставания от мастера более чем 10-20 сек ?
...
Рейтинг: 0 / 0
08.10.2019, 16:56
    #39873502
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
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
08.10.2019, 17:13
    #39873517
user_t0
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
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
08.10.2019, 18:30
    #39873559
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DETAIL: Пользователь удерживал блокировку таблицы слишком долго.
user_t0Правильно ли я понял что слот репликации нужен только для того, чтобы мастер не удалил WAL файлы, которые не применились на реплике?
пока реплика не ответила что эти сегменты получила. Никакой зависимости от "применились". Слот может читать вовсе не реплика. а barman какой-нибудь для целей ведения PitR бекапа.

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

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


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