Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / побороть дедлок / 9 сообщений из 9, страница 1 из 1
12.12.2018, 16:59
    #39746811
Уткъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
побороть дедлок
Привет,

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

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

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




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

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

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

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

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




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

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

begin;

set local deadlock_timeout to '1h';

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

commit;

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

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

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

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

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




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

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

begin;

set local deadlock_timeout to '1h';

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


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

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

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

commit;

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

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


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

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


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

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

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

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

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

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

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


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