|
Select во время Insert
|
|||
---|---|---|---|
#18+
Как избежать Deadlock ? 1. Приложение вызывает процедуру, которая делает инсерт в таблицу 2. Приложение делает запрос к этой таблице и вот на этом запросе - вешается на deadlock как разрулить? Можно ли в процедуре, делающей инсерт изменить ISOLATION LEVEL? это поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:43 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Фикс дедлоков обычно начинается с анализа графа дедлока. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:50 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин, обычно причина в "неверном" порядке обращений к таблице ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 11:55 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Критик Ролг Хупин, обычно причина в "неверном" порядке обращений к таблице и что это ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:00 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин как разрулить? а в запросе with (nolock) недопустим? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:01 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Критик Ролг Хупин, обычно причина в "неверном" порядке обращений к таблице С этого места подробнее - я записываю! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:02 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
ol_chig Ролг Хупин как разрулить? а в запросе with (nolock) недопустим? можно посмотреть, но это же плохая практика Хорошо бы сделать так, что бы селект дождался завершения инсерта ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:10 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
aleks222 С этого места подробнее - я записываю! Разные индексы. Как следствие, разный порядок обхода записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:14 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
msLex aleks222 С этого места подробнее - я записываю! Разные индексы. Как следствие, разный порядок обхода записей. Гм? Вы индексы от таблицы, а тем паче от "обращения к таблице" отличаете? ЗЫ. Я в курсе причин возникновения дедлоков. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:19 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин ol_chig пропущено... а в запросе with (nolock) недопустим? можно посмотреть, но это же плохая практика Хорошо бы сделать так, что бы селект дождался завершения инсерта Ну нарисуйте для начала with(readpast) в селекте. Не поможет - нарисуйте with(tablockx) в селекте. Это радикальное средство. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:21 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
aleks222 Гм? Вы индексы от таблицы, а тем паче от "обращения к таблице" отличаете? Я то да, а вы? На те вам два варианта трактовки термина "таблица", и в обоих случаях индексы приводят к разному порядку доступа к данным в ней. 1. Нормальный Таблица включает в себя индексы, а значит обращение к любому из них есть обращение к таблице. 2. Притянутый за уши Таблица - это куча, без кластерного индекса Наличие на такой таблицы некластерных индексов не запрещено. При использовании этих индексов с последующим RID Lookup-ом, идет обращение к этой таблице (кучи в данном случае). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:25 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин Хорошо бы сделать так, что бы селект дождался завершения инсерта Если желания разбираться нет - допишите к таблице в select хинт with (tablock), тогда получите желаемое ожидание. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:40 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин, Приведите примеры кода (процедура с инсертом, селект), где видно как вы запускает insrt в транзакции, и, если есть, объявленные уровни изоляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 12:54 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Сначала надо получить граф взаимоблокировки и изучить его. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2021, 14:16 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Fox Malder Ролг Хупин, Приведите примеры кода (процедура с инсертом, селект), где видно как вы запускает insrt в транзакции, и, если есть, объявленные уровни изоляции. 1. Уровень изоляции в процедуре не объявляется, используется по умолчанию Прицедура по сути никакая: используется чисто для инсерта 2. Селект тоже никакой - сделано вью, по сути обертка над 3 таблицами, из них идет выборка. Одна из них та, в которую делается инсерт в п.1. Добавил в определение вью на эту таблицу nolock - прошло. Но это же неправильно. Да и формально, в этом случае возможны грязные чтения? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2021, 12:48 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин, Не важно, какие у вас там процедуры или не процедуры. Важно какие и в какой последовательности транзакции накладывают блокировки. Вы граф делока покажете, или так и дальше будете всех мучать невнятными описаниями той фотографии, по которой предлагается лечить вашу проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2021, 13:02 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич Ролг Хупин, Не важно, какие у вас там процедуры или не процедуры. Важно какие и в какой последовательности транзакции накладывают блокировки. Вы граф делока покажете, или так и дальше будете всех мучать невнятными описаниями той фотографии, по которой предлагается лечить вашу проблему? Понимаю, но сам мучаюсь по той же причине Это живая база у кустомера, пытался ему рассказать как сделать граф - ноль на выходе. Стал бы мутить, если бы не было проблемы? нет, не стал бы. Хотел бы не мутить? да, хотел бы, если бы этой долбаной проблемы не было Поставив nolock в селекте на ту таблицу, в которую делается инсерт - проблема "ушла", но я понимаю, что nolock в данном случае - примочка, и скорее вредная. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2021, 13:31 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Еще вот ыловил такой дедлок: два одинаковых приложения на разных хостах делают update vt set vt.state=@p1 where vt.id=@p2 Естественно, один из запросов - жертва, обламывается. Здесь @p2 разные, но таблица небольшая, дедлок. vt - это view враппер над таблицей Как решить проблему в этом случае? 1. заменить в исходном тексте приложения запрос на вызов процедуры, дальше было бы проще, типа прикрутить sp_applock 2. что еще можно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 14:53 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин, индексы на таблице какие? ну и план запроса, граф дедлока желательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 15:06 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин, автор2. что еще можно ? 1. set deadlock_priority high 2. Написать обработчик ошибок так, чтобы он после отката повторно передавал управление на начало процедуры до полного удовлетворения. У MS даже где-то был пример такого выполнения. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 15:23 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
felix_ff Ролг Хупин, индексы на таблице какие? ну и план запроса, граф дедлока желательно. да там, выяснилось, что update t1 trigger on update delete from t2 trigger on update, delete Вот интересно: можно ли прикрутить sp_getapplock\sp_releaseapplock внутри триггера? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 15:33 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин, можно, но надо понимать, что внутри триггера будет удержана транзакция. Так что не рекомендуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 15:51 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Владислав Колосов Ролг Хупин, можно, но надо понимать, что внутри триггера будет удержана транзакция. Так что не рекомендуется. ясно, тогда такой вариант: Скажем упираются друг в друга два приложения с такими запросами, причем в триггере Код: sql 1. 2. 3. 4.
А если я сделаю что-то типа Код: sql 1. 2. 3. 4.
такое поможет избежать дедлока? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 16:07 |
|
Select во время Insert
|
|||
---|---|---|---|
#18+
Ролг Хупин Как избежать Deadlock ? 1. Приложение вызывает процедуру, которая делает инсерт в таблицу 2. Приложение делает запрос к этой таблице и вот на этом запросе - вешается на deadlock как разрулить? Можно ли в процедуре, делающей инсерт изменить ISOLATION LEVEL? это поможет? переписать приложение ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 17:50 |
|
|
start [/forum/topic.php?fid=46&fpage=29&tid=1684885]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 147ms |
0 / 0 |