Бөлісу құралы:


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

Область применения: SQL Server Управляемый экземпляр SQL Azure

Используйте 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 для извлечения событий графа Взаимоблокировки в один файл, содержащий все события графа Взаимоблокировки или отдельные файлы. Это извлечение можно выполнить одним из следующих способов.

  • Во время настройки трассировки с помощью вкладки "Параметры извлечения событий". Обратите внимание, что эта вкладка не отображается, пока не выберите событие графа взаимоблокировки на вкладке "Выбор событий".

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

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

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

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

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

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

Microsoft Edge
Связь между процессом и ресурсом. Связь 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

Unknown

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

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