|
побороть дедлок
|
|||
---|---|---|---|
#18+
Привет, Есть довольно длинный запрос. Он дропает констрэйнты и удаляет строки, все это в одной таблице. Во время его выполнения возникает дедлок. Подскажите, как можно заблокировать таблицу, оставив ей доступ только для чтения для других сессий? Чтобы запрос без помех сделал свое дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 16:59 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
УткъПривет, Есть довольно длинный запрос. Он дропает констрэйнты и удаляет строки, все это в одной таблице. Во время его выполнения возникает дедлок. Подскажите, как можно заблокировать таблицу, оставив ей доступ только для чтения для других сессий? Чтобы запрос без помех сделал свое дело. begin; set local deadlock_timeout to '1h'; все ващи запрос; commit; И будет вам щастие. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 17:07 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
Maxim BogukУткъПривет, Есть довольно длинный запрос. Он дропает констрэйнты и удаляет строки, все это в одной таблице. Во время его выполнения возникает дедлок. Подскажите, как можно заблокировать таблицу, оставив ей доступ только для чтения для других сессий? Чтобы запрос без помех сделал свое дело. begin; set local deadlock_timeout to '1h'; все ващи запрос; Интересный, вариант, благодарю! И все же, можно ли напрямую на таблицу блокировку наложить чтобы ее другие не могли поменять? Или это не имеет смысла от дедлока? commit; И будет вам щастие. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 17:12 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
Maxim Boguk, Интересный, вариант, благодарю! И все же, можно ли напрямую на таблицу блокировку наложить чтобы ее другие не могли поменять? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 17:13 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
УткъMaxim Boguk, Интересный, вариант, благодарю! И все же, можно ли напрямую на таблицу блокировку наложить чтобы ее другие не могли поменять? Читайте доку про уровни блокировок. https://www.postgresql.org/docs/11/explicit-locking.html#LOCKING-TABLES -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2018, 17:42 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
Maxim Boguk, А можно пояснение как это работает? Ведь если дедлок на самом деле есть увеличение deadlock_timeout просто отложит его выявление(разрешится за это время он же никак не может). А увеличение времени deadlock_timeout позволит избежать лишний раз дорогостоящей проверки, если там просто длинные блокировки, а не дедлок. И если Уткъ говорит именно о дедлоках, то эта опция не должна помочь. Что я понимаю не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 14:33 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
SerGrr1898, на дедлоки проверяет каждый backend сам себя, когда не может дождаться требуемую блокировку по истечении deadlock_timeout. Соответственно, если у одного deadlock_timeout = 1h, а у другого процесса deadlock_timeout = 1s, то первый спокойно спит и ждёт когда ему дадут блокировку, а второй просыпается и отстреливает сам себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 14:47 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
Melkij, Да, про бэкенды понимаю. Таким образом мы как бы приоритет выставляем, и гарантируем, что наша длиная транзакция по-любому не отстрелится? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 15:11 |
|
побороть дедлок
|
|||
---|---|---|---|
#18+
SerGrr1898, да, получается что-то вроде приоритета. Но нет, не гарант. Только очень сильно понижаем вероятность. Гарантированно по дедлоку не может быть снят только startup. (хотя может быть ещё wraparound autovacuum защищён, не хочу в код зарываться сейчас) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 15:36 |
|
|
start [/forum/topic.php?fid=53&tid=1995435]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
92ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 268ms |
total: | 451ms |
0 / 0 |