Поделиться через


Анализ взаимоблокировок в приложении SQL Server Profiler

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

Для трассировки событий взаимоблокировки добавьте в трассировку класс событий Deadlock graph. События этого класса заполнят столбец данных TextData трассировки XML-данными, характеризующими процесс и объекты, участвующие во взаимоблокировке. Приложение Приложение SQL Server Profiler может извлекать XML-документ в файл взаимоблокировки XML (файл XDL), который можно потом просматривать в среде SQL Server Management Studio. Приложение Приложение SQL Server Profiler можно настроить на извлечение событий Deadlock graph в единый файл, содержащий все события класса Deadlock graph, или в отдельные файлы. Это извлечение можно выполнить одним из следующих способов.

  • При настройке трассировки на вкладке Настройки извлечения событий. Обратите внимание на то, что эта вкладка не отображается до тех пор, пока не будет выбрано событие Deadlock graph на вкладке Выбор событий.

  • С помощью параметра Извлечь события SQL Server в меню Файл.

  • Отдельные события можно также извлекать и сохранять, щелкнув правой кнопкой конкретное событие и выбрав Извлечь данные события.

Графы взаимоблокировок

Приложение Приложение SQL Server Profiler и среда SQL Server Management Studio для описания взаимоблокировки используют граф ожидания взаимоблокировки. Граф ожидания взаимоблокировки содержит узлы процессов, узлы ресурсов и ребра, представляющие связи между процессами и ресурсами. Компоненты графов ожидания взаимоблокировки определяются в следующей таблице:

  • Узел процесса
    Поток, выполняющий задачу, например INSERT, UPDATE или DELETE.

  • Узел ресурса
    Объект базы данных, например таблица, индекс или строка.

  • Ребро
    Связь между процессом и ресурсом. Связь request возникает, когда процесс ожидает ресурса. Связь owner возникает, когда ресурс ожидает процесс. В описание ребра включен режим блокировки. Например, Режим: X. Сведения о возможных значениях, которые назначают режимы блокировки, см. в разделе Режимы блокировки.

Взаимоблокировка узла процесса

В графе ожидания узел ожидания содержит информацию о процессе. В следующей таблице поясняются компоненты процесса.

Компонент

Определение

Идентификатор процесса сервера

Идентификатор процесса сервера (SPID), назначенный сервером процессу, владеющему блокировкой.

Идентификатор пакета сервера

Идентификатор пакета сервера (SBID).

Идентификатор контекста выполнения

Идентификатор контекста выполнения (ECID). Идентификатор контекста выполнения данного потока, связанного с определенным идентификатором SPID.

ECID = {0,1,2,3, ...n}, где 0 всегда представляет главный или родительский поток, а значения {1,2,3, ...n} представляют подчиненные потоки.

Приоритет взаимоблокировки

Приоритет взаимоблокировки для процесса. Дополнительные сведения о возможных значениях см. в разделе SET DEADLOCK_PRIORITY (Transact-SQL).

Используемый журнал

Объем пространства журнала, используемого для процесса.

Идентификатор владельца

Идентификатор транзакции для процессов, которые используют транзакции и в настоящее время ожидают окончания блокировки.

Дескриптор транзакции

Указатель на дескриптор транзакции, описывающий состояние транзакции.

Входной буфер

Входной буфер текущего процесса определяет тип события и выполняемую инструкцию. Возможные значения.

  • Язык

  • RPC

  • Нет

Инструкция

Тип инструкции. Допустимые значения:

  • NOP

  • SELECT

  • UPDATE

  • INSERT

  • DELETE

  • Неизвестно

Взаимоблокировка узла ресурса

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