powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / побороть дедлок
9 сообщений из 9, страница 1 из 1
побороть дедлок
    #39746811
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,

Есть довольно длинный запрос.

Он дропает констрэйнты и удаляет строки, все это в одной таблице.

Во время его выполнения возникает дедлок.




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

Чтобы запрос без помех сделал свое дело.
...
Рейтинг: 0 / 0
побороть дедлок
    #39746821
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УткъПривет,

Есть довольно длинный запрос.

Он дропает констрэйнты и удаляет строки, все это в одной таблице.

Во время его выполнения возникает дедлок.




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

Чтобы запрос без помех сделал свое дело.

begin;

set local deadlock_timeout to '1h';

все ващи запрос;

commit;

И будет вам щастие.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
побороть дедлок
    #39746827
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukУткъПривет,

Есть довольно длинный запрос.

Он дропает констрэйнты и удаляет строки, все это в одной таблице.

Во время его выполнения возникает дедлок.




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

Чтобы запрос без помех сделал свое дело.

begin;

set local deadlock_timeout to '1h';

все ващи запрос;


Интересный, вариант, благодарю!

И все же, можно ли напрямую на таблицу блокировку наложить чтобы ее другие не могли поменять?

Или это не имеет смысла от дедлока?

commit;

И будет вам щастие.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
побороть дедлок
    #39746828
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,


Интересный, вариант, благодарю!

И все же, можно ли напрямую на таблицу блокировку наложить чтобы ее другие не могли поменять?
...
Рейтинг: 0 / 0
побороть дедлок
    #39746847
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УткъMaxim Boguk,


Интересный, вариант, благодарю!

И все же, можно ли напрямую на таблицу блокировку наложить чтобы ее другие не могли поменять?

Читайте доку про уровни блокировок.
https://www.postgresql.org/docs/11/explicit-locking.html#LOCKING-TABLES

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
побороть дедлок
    #39747939
SerGrr1898
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

А можно пояснение как это работает? Ведь если дедлок на самом деле есть увеличение deadlock_timeout просто отложит его выявление(разрешится за это время он же никак не может).
А увеличение времени deadlock_timeout позволит избежать лишний раз дорогостоящей проверки, если там просто длинные блокировки, а не дедлок.
И если Уткъ говорит именно о дедлоках, то эта опция не должна помочь. Что я понимаю не так?
...
Рейтинг: 0 / 0
побороть дедлок
    #39747950
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerGrr1898,

на дедлоки проверяет каждый backend сам себя, когда не может дождаться требуемую блокировку по истечении deadlock_timeout.
Соответственно, если у одного deadlock_timeout = 1h, а у другого процесса deadlock_timeout = 1s, то первый спокойно спит и ждёт когда ему дадут блокировку, а второй просыпается и отстреливает сам себя.
...
Рейтинг: 0 / 0
побороть дедлок
    #39747968
SerGrr1898
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,
Да, про бэкенды понимаю.
Таким образом мы как бы приоритет выставляем, и гарантируем, что наша длиная транзакция по-любому не отстрелится?
Спасибо
...
Рейтинг: 0 / 0
побороть дедлок
    #39747986
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerGrr1898,

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


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