График взаимоблокировки SQL Server - блокировка таблицы, страницы или строки?

10

Есть ли способ расшифровать, если блокировка на графике взаимоблокировки имеет уровень таблицы, страницы или строки? У меня есть вся необходимая информация из графика, включая уровень изоляции (2), но я действительно хочу это знать.

Спасибо всем, кто может помочь!

tuseau
источник

Ответы:

13

В графике взаимоблокировки XML вы увидите что-то вроде:

<deadlock-list>
  <deadlock victim="...">
    <process-list>
      <process id="..." ... waitresource="X:..."
...

XИнтересная бит, возможные значения , которые вы заинтересованы в том, являются:

  • RID для идентификатора строки (блокировка уровня строки)
  • PAG для блокировки на уровне страницы
  • OBJECT(что может быть дополнительно уточнено с TABуказанием блокировки таблицы)

Есть несколько других видов, перечисленных в документации также.

Gaius
источник
Спасибо, это полезно. Хотя в моем графике есть 2 процесса, которые, кажется, используют разные страницы: waitresource = "RID: 21: 1: 2588: 0" waitresource = "RID: 21: 1: 2699: 1" Так что, если они используют разные страницы тогда они не могут конфликтовать в одном ряду, верно? Потому что я использую подсказку WITH (ROWLOCK) для этого запроса.
tuseau
2
Если процесс 1 удерживает 2699 и хочет 2588, а процесс 2 держит 2588 и хочет 2699, это приведет к тупику. Помните, что тупик подразумевает круговую зависимость.
Гай