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

Откуда: ->|<- :адуктО
Сообщений: 21523
SQL2KSP4

Получил сообщение о откате транзакции из за дедлока при выполнении одной процедуры. Все бы понятно, но в процедуре используется только одна команда, селект только из одной таблицы. Как такое могло создать дедлок?

И параллельный вопрос - хотел профайлером поотслеживать кое-какие блокировки, но не разобрался, когда я включаю трассировку блокировок, я вижу только кучу самих фактов наложения и снятия блокировок, но информативные поля не заполнены. Как узнать, на какие именно таблицы накладываются блокировки или это принципиально невозможно сделать профайлером?
7 окт 09, 11:51    [7752361]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shocker.Pro
SQL2KSP4

Получил сообщение о откате транзакции из за дедлока при выполнении одной процедуры. Все бы понятно, но в процедуре используется только одна команда, селект только из одной таблицы. Как такое могло создать дедлок?

Это вам покажет граф дедлока
Сколько процессоров и есть ли параллелизм ?

Сообщение было отредактировано: 7 окт 09, 11:53
7 окт 09, 11:52    [7752380]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Deadlock создает не одна процедура с одной командой, а как миниум две транзакции. Так что надо смотреть граф дедлока.
7 окт 09, 11:53    [7752384]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21523
pkarklin
Deadlock создает не одна процедура с одной командой, а как миниум две транзакции.


Это я понимаю. Но ведь дедлок - это когда две+ транзакции захватили по ресурсу и ждут друг друга для захвата других ресурсов. А у моей процедуры ресурс только один, получается она, захватив один объект уже ничего ждать не должна... Либо ей не удалось захватить объект и тогда она просто ждет или падает с таймаутом....

Или ресурсы могут быть не на уровне таблицы, а на уровне страниц?


pkarklin
Так что надо смотреть граф дедлока.


Упс, тут у меня пробел в знаниях. Что это такое, подтолкните в нужном направлении плиз....
7 окт 09, 11:58    [7752421]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
http://msdn.microsoft.com/en-us/library/aa937573(SQL.80).aspx
7 окт 09, 12:01    [7752441]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
Feos
Member

Откуда: Химки
Сообщений: 151
Самый простой способ через профайл разрулить блокировки - это посмотреть те процессы, которые закончились вместе с отторгнутым.
7 окт 09, 12:02    [7752456]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
включить трасфлаги 1204, 3604, 3605 и получить граф в errorlog
дальше видно все будет
7 окт 09, 14:38    [7753733]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Помнится, GreenSunrise натыкалась на deallock в единственном соединении при настроенной MERGE репликации...
7 окт 09, 14:46    [7753789]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
DeColo®es
Помнится, GreenSunrise натыкалась на deallock в единственном соединении при настроенной MERGE репликации...

Еще были дедлоки при параллелизме в запросе
7 окт 09, 14:49    [7753811]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
Crimean
Member

Откуда:
Сообщений: 13148
DeColo®es
Помнится, GreenSunrise натыкалась на deallock в единственном соединении при настроенной MERGE репликации...


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

но в одном соединении, как уже правильно указал тов.Glory, - только от паралелизьма дедлоки случаются
7 окт 09, 15:57    [7754271]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
DeColo®es
Помнится, GreenSunrise натыкалась на deallock в единственном соединении при настроенной MERGE репликации...

Дык это уже не единственное, а как минимум 2 - пользовательский коннект и коннект мерж-агента. Так что ситуация была пребанальнейшая...

А то я вот еще видела дедлок чисто на системных процедурах (тоже от репликации). Два агента подрались. Это что ж, считать, что дедлок при нуле соединений?
7 окт 09, 22:36    [7755993]     Ответить | Цитировать Сообщить модератору
 Re: Дедлок на одной таблице ?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
А по теме - Crimean уже написал. ПолУчите граф дедлока - заходите.
7 окт 09, 22:37    [7755995]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить