Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте 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 ВЫБИРАТЬ ОБНОВЛЯТЬ ВСТАВКА УДАЛИТЬ Неизвестный |
Взаимоблокировка ресурса узла
Во взаимоблокировке участвуют два процесса, каждый их которых ожидает освобождения ресурса, удерживаемого другим процессом. В графе взаимоблокировки ресурсы отображаются как узлы ресурсов.