Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Решаю проблему с деадлоком?
автор
Transaction (Process ID) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.


Пытаюсь понять, откуда в моем случае в принципе мог взяться деадлок. Ловлю exception на запросе, которые делает выборку из вьюхи, джойнит на разные таблицы, возвращает результат. Во вьюхе в свою очередь также идет выборка из разных таблиц с джойнами.
Изменение данных нигде НЕ происходит, запрос выполняется БЕЗ транзакции.
Подскажите пожалуйста, какие могут быть варианты, из-за чего случается деадлок?
1 июн 12, 12:11    [12649837]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kudep
Изменение данных нигде НЕ происходит, запрос выполняется БЕЗ транзакции.

Блокировки происходят и без изменения данных

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

Нужно смотреть в граф дедлока.
1 июн 12, 12:12    [12649856]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
VFl
Member

Откуда:
Сообщений: 126
Kudep
Пытаюсь понять, откуда в моем случае в принципе мог взяться деадлок.


Вот тут http://msdn.microsoft.com/ru-ru/library/ms178104%28v=sql.105%29.aspx описано, когда может случатся дедлок. Это не только блокировки, но и например недостаток памяти для сервера, и другие варианты.
1 июн 12, 12:24    [12649975]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
BOL->READ_COMMITTED_SNAPSHOT database option
1 июн 12, 12:44    [12650096]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Я нашел по логам сиквела свой deadlock.
Подскажите, как понять, что это за номер строки 489? Откуда он считаестя?
05/21/2012 18:59:16,spid22s,Unknown,frame procname=MyProcName line=489 stmtstart=43874 stmtend=46944 sqlhandle=0x030005007ed3155e3f995201679f00000100000000000000

Начиная с ALTER proc? или с begin?
1 июн 12, 15:32    [12651766]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
VFl
Member

Откуда:
Сообщений: 126
Kudep,

Начиная с ALTER proc
1 июн 12, 16:00    [12652010]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Glory
Блокировки происходят и без изменения данных

Т.е. может быть такая блокировка:
Процедура A захватила эксклюзивный доступ к таблице Table1, меняет в ней данные
Процедура B пытается прочитать данные из таблицы Table1.
Поулчается deadlock, процедура B убивается.

Но разве такое возможно?
1 июн 12, 16:19    [12652139]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kudep
Но разве такое возможно?

В вашем примере нет 2х ресурсов, а только один
При одном ресурсе разумеется дедлок невозможен.
1 июн 12, 16:23    [12652175]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Разобрал по полочкам лог сиквела, получается такая картина:

--Два процесса, два кейлока
05/25/2012 14:40:20,spid15s,Unknown,waiter id=process6d05708 mode=X requestType=wait
05/25/2012 14:40:20,spid15s,Unknown,waiter-list
05/25/2012 14:40:20,spid15s,Unknown,owner id=process6a3fb88 mode=S
05/25/2012 14:40:20,spid15s,Unknown,owner-list
05/25/2012 14:40:20,spid15s,Unknown,keylock hobtid=72057594058506240 dbid=5 objectname=MyTable indexname=ix_MyTable___create_dt___ID id=lock1b48c0500 mode=S associatedObjectId=72057594058506240
05/25/2012 14:40:20,spid15s,Unknown,waiter id=process6a3fb88 mode=S requestType=wait
05/25/2012 14:40:20,spid15s,Unknown,waiter-list
05/25/2012 14:40:20,spid15s,Unknown,owner id=process6d05708 mode=X
05/25/2012 14:40:20,spid15s,Unknown,owner-list
05/25/2012 14:40:20,spid15s,Unknown,keylock hobtid=72057594061717504 dbid=5 objectname=MyTable indexname=PK_MyTable id=lock2f23e8f00 mode=X associatedObjectId=72057594061717504

--Два стектрейса
======= Stack trace для процесса process6d05708 =======
======= В конечном счете ведет на строку update MyTable =======
05/25/2012 14:40:20,spid15s,Unknown,frame procname=MyStoredProc1 line=213 stmtstart=22516 stmtend=26944
05/25/2012 14:40:20,spid15s,Unknown,executionStack
05/25/2012 14:40:20,spid15s,Unknown,process id=process6d05708 taskpriority=0 logused=12184 waitresource=KEY: 5:72057594058506240 (4efb21868c33) waittime=1264 ownerId=7852310339 transactionname=user_transaction lasttranstarted=2012-05-25T14:40:19.147 XDES=0x3b3a323b0 lockMode=X schedulerid=23 kpid=762280 status=suspended spid=53 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2012-05-25T14:40:19.170 lastbatchcompleted=2012-05-25T14:40:19.170 clientapp=.Net SqlClient Data Provider hostname=MyServer hostpid=5820 loginname=MyLogin isolationlevel=read committed (2) xactid=7852310339 currentdb=5 lockTimeout=4294967295 clientoption1=673384544 clientoption2=128056
======= Stack trace для процесса process6d05708 =======
======= В конечном счете ведет на строку select o.ID from MyTable o =======
05/25/2012 14:40:20,spid15s,Unknown,frame procname=MyStoredProc2 line=48 stmtstart=6172 stmtend=12298
05/25/2012 14:40:20,spid15s,Unknown,executionStack
05/25/2012 14:40:20,spid15s,Unknown,process id=process6a3fb88 taskpriority=0 logused=0 waitresource=KEY: 5:72057594061717504 (96cd338b8f83) waittime=1264 ownerId=7852310369 transactionname=SELECT INTO lasttranstarted=2012-05-25T14:40:19.173 XDES=0x4e0afa3b0 lockMode=S schedulerid=16 kpid=522192 status=suspended spid=63 sbid=0 ecid=0 priority=0 trancount=2 lastbatchstarted=2012-05-25T14:40:19.173 lastbatchcompleted=2012-05-25T14:40:19.173 clientapp=.Net SqlClient Data Provider hostname=MyServer hostpid=5820 loginname=MyLogin isolationlevel=read committed (2) xactid=7852310369 currentdb=5 lockTimeout=4294967295 clientoption1=673384544 clientoption2=128056

--До свидания процесс process6a3fb88
05/25/2012 14:40:20,spid15s,Unknown,process-list
05/25/2012 14:40:20,spid15s,Unknown,deadlock victim=process6a3fb88
05/25/2012 14:40:20,spid15s,Unknown,deadlock-list


Подскажите, куда дальше копать, чтобы понять причину проблемы?
1 июн 12, 17:00    [12652493]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kudep
--Два процесса, два кейлока

Только вот коннект то один - spid15s

Там наверное ваш update нашел запись по индексу ix_MyTable___create_dt___ID, а данные изменяет в PK_MyTable, который является кластерным ?
1 июн 12, 17:05    [12652524]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Glory
Kudep
--Два процесса, два кейлока

Только вот коннект то один - spid15s

Там наверное ваш update нашел запись по индексу ix_MyTable___create_dt___ID, а данные изменяет в PK_MyTable, который является кластерным ?

А если так, то что в этом случае можно предпринять?

Да и кстати есть полностью аналогичный deadlock. Один процесс обновляет, другой читает, всё точно так же, только у обоих процессов один и тот же keyLock:
05/23/2012 18:10:38,spid23s,Unknown,keylock hobtid=72057594061717504 dbid=5 objectname=MyTable indexname=PK_MyTable id=lock117e07d80 mode=U associatedObjectId=72057594061717504
05/23/2012 18:10:38,spid23s,Unknown,keylock hobtid=72057594061717504 dbid=5 objectname=MyTable indexname=PK_MyTable id=lock4e76bae80 mode=X associatedObjectId=72057594061717504
1 июн 12, 17:16    [12652581]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Glory
Member

Откуда:
Сообщений: 104751
Kudep
А если так, то что в этом случае можно предпринять?

А вы меняете поля входящие в кластерный индекс ?
1 июн 12, 17:18    [12652597]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Glory
Kudep
А если так, то что в этом случае можно предпринять?

А вы меняете поля входящие в кластерный индекс ?

В кластерном индексе только одно поле - ID:
ALTER TABLE MyTable ADD  CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [FG_Data_01]
GO

Апдейт идет с поиском по этому полю:
update MyTable 
   set field1 = @field1, ...
 where ID = @ID
1 июн 12, 17:25    [12652632]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Glory
Member

Откуда:
Сообщений: 104751
procname=MyStoredProc1 line=213
и
procname=MyStoredProc2 line=48

это у вас одинаковые update ?
1 июн 12, 17:27    [12652639]     Ответить | Цитировать Сообщить модератору
 Re: Transaction (Process ID) was deadlocked on lock resources with another process  [new]
Kudep
Member

Откуда: From Russia
Сообщений: 146
Glory
procname=MyStoredProc1 line=213
и
procname=MyStoredProc2 line=48

это у вас одинаковые update ?

так нет,
вот здесь procname=MyStoredProc2 line=48 не апдейт. Там простая выборка из таблицы MyTable.
1 июн 12, 17:31    [12652654]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить