Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
Вот вырезка из sysprocesses
datespidkpidblockedwaittimelastwaittypewaitresourcedbidlogin_timelast_batchopen_transtatuscmd
2016-02-03 05:00:00.983441960805448295CXPACKET752016-02-03 03:29:12.3872016-02-03 03:29:12.3872suspended UPDATE
2016-02-03 05:00:00.9834411441605410777CXPACKET752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.9834412241205410777CXPACKET752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.9834411974005410777CXPACKET752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.9834411334805410777CXPACKET752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.9834411691205410777CXROWSET_SYNC752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.9834411008010875410777LCK_M_IXHBT: 75:72057939270238208752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.9834411997605410777CXROWSET_SYNC752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.983441995205410777CXROWSET_SYNC752016-02-03 03:29:12.3872016-02-03 03:29:12.3870suspended UPDATE
2016-02-03 05:00:00.9831087231044415410728LCK_M_ISHBT: 75:72057862924730368752016-02-03 03:29:07.5132016-02-03 03:29:07.5132suspended INSERT


Казалось бы явный deadlock и сервер должен бы прибить один из процессов. Однако в таком состояния всё провисело почти 5 часов пока сервис, инициировавший эти процессы, не был вручную перезапущен.

Может кто-то объяснить почему и как с этим бороться? Смоделировать ситуацию принудительно не получается. Сам deadlock является в данном случае ожидаемым поведением и в случае его автоматического разрешения система продолжит функционировать в штатном режиме.
3 фев 16, 12:56    [18766672]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
komrad
Member

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

показать результат
select @@version 

+ показать скрипт, который выдал эту табличку
3 фев 16, 13:01    [18766728]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Картинка не очевидная... Конкуренции явно нет за ресурс, цепочка блокировок не видна.
Я предполагаю, что конкуренции вообще нет, а блокировка изменения схемы накладывается на все время обновления и вставки.
3 фев 16, 13:08    [18766803]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

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

1. select @@version

Microsoft SQL Server 2014 - 12.0.4213.0 (X64)
Jun 9 2015 12:06:16
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: )

2. это просто набор столбцов из sysprocesses, сохранённый в момент date
3 фев 16, 14:01    [18767312]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а в errorlog нет ничего интересного? типа были дисковые операции шибко длинные или типа того?
3 фев 16, 14:33    [18767549]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
Crimean,
в errorlog нет ничего. Там постоянно крутятся тяжёлые селекты в TIL SNAPSHOT, выкачивающие миллионы записей. Причем именно выбирающие записи из тех таблиц, на которых эти INSERT и UPDATE происходили.

Такое зависание происходит переиодически, но нечасто. Может раз в месяц-два.
3 фев 16, 14:51    [18767706]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
invm
Member

Откуда: Москва
Сообщений: 9402
sti,

У вас UPDATE распараллелен.
Это полный вывод строк, относящихся к 441-му? Потому что 1087-й может ожидать совершенно другой поток, так же относящийся к 441-му.
3 фев 16, 15:59    [18768196]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

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

да, это все строки для 441 и 1087. Могу вообще все строки вывалить, но есть ли смысл?
3 фев 16, 16:32    [18768490]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
Кстати, что меня ещё удивляет, во всех UPDATE стоит опция OPTION (MAXDOP 4). А 441 распараллелился на 9 потоков.
3 фев 16, 16:37    [18768537]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
invm
Member

Откуда: Москва
Сообщений: 9402
sti
Могу вообще все строки вывалить, но есть ли смысл?
Не нужно :)
Лучше покажите, если такая инфа есть, что было в sys.dm_os_waiting_tasks и sys.dm_tran_locks
3 фев 16, 16:48    [18768626]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

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

datespidblockedwait_duration_mswait_typeresource_addressresource_description
2016-02-03 05:00:00.9334410736160176CXPACKETexchangeEvent id=Port25fa101400 WaitType=e_waitPortOpen nodeId=10
2016-02-03 05:00:00.93344110875410735LCK_M_IXhobtlock hobtid=72057939270238208 subresource=FULL dbid=75 id=lock6a6dabff00 mode=X associatedObjectId=72057939270238208
2016-02-03 05:00:00.933441108716232207CXROWSET_SYNCNULLNULL
2016-02-03 05:00:00.933441043285880LCK_M_IXhobtlock hobtid=72057939270238208 subresource=FULL dbid=75 id=lock6a6dabff00 mode=X associatedObjectId=72057939270238208
2016-02-03 05:00:00.9334410129857656CXROWSET_SYNCNULLNULL
2016-02-03 05:00:00.933441108792020022CXPACKETexchangeEvent id=Port25fa101400 WaitType=e_waitPortOpen nodeId=10
2016-02-03 05:00:00.933108744121642764LCK_M_IShobtlock hobtid=72057862924730368 subresource=FULL dbid=75 id=lockab69f3580 mode=X associatedObjectId=72057862924730368


Немножко не то время, но не принципиально. Меньше строк, потому что это
GROUP BY spid, blocked, wait_type
4 фев 16, 10:05    [18771242]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
данных из sys.dm_tran_locks нет, увы
4 фев 16, 10:06    [18771244]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34620
sti,
очевидно, потому что это был не дедок...
4 фев 16, 11:36    [18771748]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
Владислав Колосов
Member

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

и я о том же... Типичная бабка.
4 фев 16, 11:42    [18771791]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
MasterZiv
sti,
очевидно, потому что это был не дедок...

С точки зрения сервера - да. Только от этого же не легче. Делать то что? Процессы зависают навечно, пока руками не вмешаешься. Да ещё и последующие процессы блокируют.
4 фев 16, 16:08    [18773350]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а вы бы прежде чем прибивать ресеч сделали. на каком ресурсе оно друг дружку ждет.
4 фев 16, 16:17    [18773408]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34620
sti
MasterZiv
sti,
очевидно, потому что это был не дедок...

С точки зрения сервера - да. Только от этого же не легче. Делать то что? Процессы зависают навечно, пока руками не вмешаешься. Да ещё и последующие процессы блокируют.


Не блокировать или меньше блокировать данные, закрывать транзакции быстрее, переходить на snapshot isolation...
Вариантов дофига... Но так, чтобы включить одну галочку -- и всё бы заработало -- не будет, придётся повпахивать...
4 фев 16, 16:42    [18773571]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
Crimean
а вы бы прежде чем прибивать ресеч сделали. на каком ресурсе оно друг дружку ждет.

Кто ж позволит... Висят процессы. Могу только на будущее автоматически что-нибудь сохранить.

А так я таблицу знаю. Один процесс делает UPDATE, другой INSERT. Причем одна партиция, но строки разные. Вывод напрашивается - блокируется на страничном уровне. Нет?
4 фев 16, 17:08    [18773769]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> Кто ж позволит... Висят процессы.

они висят уже долго. все равно убиваете. так вот перед тем как - еще 5 минут ничего не решат. а информация очень поможет. я молчу про то, что можно повесить задачку на планировщик, которая будет по sysprocesses такое детектить и сливать нужную инфу. скажем, раз в 5 минут
4 фев 16, 17:12    [18773790]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
Crimean
> Кто ж позволит... Висят процессы.

они висят уже долго. все равно убиваете. так вот перед тем как - еще 5 минут ничего не решат. а информация очень поможет. я молчу про то, что можно повесить задачку на планировщик, которая будет по sysprocesses такое детектить и сливать нужную инфу. скажем, раз в 5 минут


Это с нашей в вами точки зрения 5 минут ничего не решают. У них регдамент: зависло - убить немедленно ))
Висит и так тут каждые три минуты сборка по sysprocesses. Буду допиливать, а то инфы там мало.
4 фев 16, 17:24    [18773886]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
Crimean
Member

Откуда:
Сообщений: 13148
более жесткий вариант - ставить lock timeout на, скажем, 10 минут. ну и обрабатывать ошибку, соответственно
это не решит проблему, но позволит не висеть по 5 часов
4 фев 16, 17:33    [18773935]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
sti
Member

Откуда:
Сообщений: 769
Crimean
более жесткий вариант - ставить lock timeout на, скажем, 10 минут. ну и обрабатывать ошибку, соответственно
это не решит проблему, но позволит не висеть по 5 часов

Способов наставить костылей много. Примерно такой вариант и планируется.
Интересно же понять откуда ноги растут и, быть может, не наступать на такие грабли снова.
5 фев 16, 22:52    [18780287]     Ответить | Цитировать Сообщить модератору
 Re: Сервер не "видит" deadlock? Почему_  [new]
Crimean
Member

Откуда:
Сообщений: 13148
я сходу повторить вашу картинку не смог. так что пока нужно больше информации.
6 фев 16, 00:03    [18780485]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить