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