powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Select во время Insert
25 сообщений из 36, страница 1 из 2
Select во время Insert
    #40056166
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как избежать Deadlock ?

1. Приложение вызывает процедуру, которая делает инсерт в таблицу
2. Приложение делает запрос к этой таблице и вот на этом запросе - вешается на deadlock

как разрулить?

Можно ли в процедуре, делающей инсерт изменить ISOLATION LEVEL? это поможет?
...
Рейтинг: 0 / 0
Select во время Insert
    #40056171
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фикс дедлоков обычно начинается с анализа графа дедлока.
...
Рейтинг: 0 / 0
Select во время Insert
    #40056173
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

обычно причина в "неверном" порядке обращений к таблице
...
Рейтинг: 0 / 0
Select во время Insert
    #40056179
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
Ролг Хупин,

обычно причина в "неверном" порядке обращений к таблице


и что это ?
...
Рейтинг: 0 / 0
Select во время Insert
    #40056180
ol_chig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин

как разрулить?

а в запросе with (nolock) недопустим?
...
Рейтинг: 0 / 0
Select во время Insert
    #40056181
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик
Ролг Хупин,

обычно причина в "неверном" порядке обращений к таблице


С этого места подробнее - я записываю!
...
Рейтинг: 0 / 0
Select во время Insert
    #40056188
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ol_chig
Ролг Хупин

как разрулить?

а в запросе with (nolock) недопустим?


можно посмотреть, но это же плохая практика

Хорошо бы сделать так, что бы селект дождался завершения инсерта
...
Рейтинг: 0 / 0
Select во время Insert
    #40056191
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
С этого места подробнее - я записываю!


Разные индексы. Как следствие, разный порядок обхода записей.
...
Рейтинг: 0 / 0
Select во время Insert
    #40056193
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex
aleks222
С этого места подробнее - я записываю!


Разные индексы. Как следствие, разный порядок обхода записей.


Гм? Вы индексы от таблицы, а тем паче от "обращения к таблице" отличаете?

ЗЫ. Я в курсе причин возникновения дедлоков.
...
Рейтинг: 0 / 0
Select во время Insert
    #40056195
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
ol_chig
пропущено...

а в запросе with (nolock) недопустим?


можно посмотреть, но это же плохая практика

Хорошо бы сделать так, что бы селект дождался завершения инсерта


Ну нарисуйте для начала with(readpast) в селекте.
Не поможет - нарисуйте with(tablockx) в селекте. Это радикальное средство.
...
Рейтинг: 0 / 0
Select во время Insert
    #40056200
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Гм? Вы индексы от таблицы, а тем паче от "обращения к таблице" отличаете?


Я то да, а вы?

На те вам два варианта трактовки термина "таблица", и в обоих случаях индексы приводят к разному порядку доступа к данным в ней.

1. Нормальный
Таблица включает в себя индексы, а значит обращение к любому из них есть обращение к таблице.


2. Притянутый за уши
Таблица - это куча, без кластерного индекса

Наличие на такой таблицы некластерных индексов не запрещено. При использовании этих индексов с последующим RID Lookup-ом, идет обращение к этой таблице (кучи в данном случае).
...
Рейтинг: 0 / 0
Select во время Insert
    #40056209
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Хорошо бы сделать так, что бы селект дождался завершения инсерта
Для начала граф дедлока покажите, в формате xml.
Если желания разбираться нет - допишите к таблице в select хинт with (tablock), тогда получите желаемое ожидание.
...
Рейтинг: 0 / 0
Select во время Insert
    #40056212
Fox Malder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин,
Приведите примеры кода (процедура с инсертом, селект), где видно как вы запускает insrt в транзакции, и, если есть, объявленные уровни изоляции.
...
Рейтинг: 0 / 0
Select во время Insert
    #40056243
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала надо получить граф взаимоблокировки и изучить его.
...
Рейтинг: 0 / 0
Select во время Insert
    #40056618
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fox Malder
Ролг Хупин,
Приведите примеры кода (процедура с инсертом, селект), где видно как вы запускает insrt в транзакции, и, если есть, объявленные уровни изоляции.


1. Уровень изоляции в процедуре не объявляется, используется по умолчанию
Прицедура по сути никакая: используется чисто для инсерта

2. Селект тоже никакой - сделано вью, по сути обертка над 3 таблицами, из них идет выборка.
Одна из них та, в которую делается инсерт в п.1.
Добавил в определение вью на эту таблицу nolock - прошло. Но это же неправильно.

Да и формально, в этом случае возможны грязные чтения?
...
Рейтинг: 0 / 0
Select во время Insert
    #40056623
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Не важно, какие у вас там процедуры или не процедуры. Важно какие и в какой последовательности транзакции накладывают блокировки.

Вы граф делока покажете, или так и дальше будете всех мучать невнятными описаниями той фотографии, по которой предлагается лечить вашу проблему?
...
Рейтинг: 0 / 0
Select во время Insert
    #40056630
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич
Ролг Хупин,

Не важно, какие у вас там процедуры или не процедуры. Важно какие и в какой последовательности транзакции накладывают блокировки.

Вы граф делока покажете, или так и дальше будете всех мучать невнятными описаниями той фотографии, по которой предлагается лечить вашу проблему?


Понимаю, но сам мучаюсь по той же причине
Это живая база у кустомера, пытался ему рассказать как сделать граф - ноль на выходе.

Стал бы мутить, если бы не было проблемы? нет, не стал бы.
Хотел бы не мутить? да, хотел бы, если бы этой долбаной проблемы не было

Поставив nolock в селекте на ту таблицу, в которую делается инсерт - проблема "ушла", но я понимаю, что nolock в данном случае - примочка, и скорее вредная.
...
Рейтинг: 0 / 0
Select во время Insert
    #40057809
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вот ыловил такой дедлок:

два одинаковых приложения на разных хостах делают

update vt set vt.state=@p1 where vt.id=@p2
Естественно, один из запросов - жертва, обламывается.

Здесь @p2 разные, но таблица небольшая, дедлок.

vt - это view враппер над таблицей

Как решить проблему в этом случае?

1. заменить в исходном тексте приложения запрос на вызов процедуры, дальше было бы проще, типа прикрутить sp_applock
2. что еще можно ?
...
Рейтинг: 0 / 0
Select во время Insert
    #40057813
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

индексы на таблице какие?
ну и план запроса, граф дедлока желательно.
...
Рейтинг: 0 / 0
Select во время Insert
    #40057822
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

автор2. что еще можно ?

1. set deadlock_priority high
2. Написать обработчик ошибок так, чтобы он после отката повторно передавал управление на начало процедуры до полного удовлетворения. У MS даже где-то был пример такого выполнения.
...
Рейтинг: 0 / 0
Select во время Insert
    #40057830
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Ролг Хупин,

индексы на таблице какие?
ну и план запроса, граф дедлока желательно.


да там, выяснилось, что

update t1
trigger on update
delete from t2
trigger on update, delete


Вот интересно: можно ли прикрутить sp_getapplock\sp_releaseapplock внутри триггера?
...
Рейтинг: 0 / 0
Select во время Insert
    #40057849
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

можно, но надо понимать, что внутри триггера будет удержана транзакция. Так что не рекомендуется.
...
Рейтинг: 0 / 0
Select во время Insert
    #40057861
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
Ролг Хупин,

можно, но надо понимать, что внутри триггера будет удержана транзакция. Так что не рекомендуется.


ясно, тогда такой вариант:

Скажем упираются друг в друга два приложения с такими запросами, причем в триггере

Код: sql
1.
2.
3.
4.
update t1
  trigger 
      delete from t2....
      update t2



А если я сделаю что-то типа
Код: sql
1.
2.
3.
4.
update t1 with(updlock)
  trigger 
      delete from t2....
      update t2 with(updlock)




такое поможет избежать дедлока?
...
Рейтинг: 0 / 0
Select во время Insert
    #40057917
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
Как избежать Deadlock ?

1. Приложение вызывает процедуру, которая делает инсерт в таблицу
2. Приложение делает запрос к этой таблице и вот на этом запросе - вешается на deadlock

как разрулить?

Можно ли в процедуре, делающей инсерт изменить ISOLATION LEVEL? это поможет?


переписать приложение
...
Рейтинг: 0 / 0
Select во время Insert
    #40057927
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин

update vt set vt.state=@p1 where vt.id=@p2


Индекс (кластерный?) по vt.id , и, наверное посмотреть:
Код: sql
1.
SELECT name , lock_escalation, lock_escalation_desc FROM sys.tables
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Select во время Insert
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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