Проблемы
Предположим, что вы используете Microsoft SQL Server 2016 и 2017. Если вы включите событие xml_deadlock_report для сбора данных для взаимоблокировок, многие события xml_deadlock_report регистрируются для одного отдельного экземпляра взаимоблокировки внутри запроса.
Обходное решение
Чтобы устранить эту проблему, вы можете получить error_reported XEvent, используя фильтр ERROR_NUMBER = 1205 вместо xml_deadlock_report, как показано в следующем примере:
Создание сеанса событий [Deadlock_Collection] на сервере
Добавление SQLServer.error_reported событий (
WHERE ([error_number] = (1205)))
ADD TARGET package0. гистограмма (SET filtering_event_name = N "sqlserver.lock_acquired"; Source = N ' sqlserver.query_hash ')
WITH (MAX_MEMORY = 4096 КБ, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY = 30 СЕКУНД, MAX_EVENT_SIZE = 0 КБ, MEMORY_PARTITION_MODE = НЕТ, TRACK_CAUSALITY =, STARTUP_STATE = ВЫКЛ.)
Щелкните
Решение
Эта проблема исправлена в перечисленных ниже накопительных обновлениях для SQL Server.
Накопительное обновление 10 для SQL Server 2017
Накопительное обновление 2 для SQL Server 2016 SP2
Примечание. С помощью этого исправления никаких событий xml_deadlock_report не сообщается о взаимоблокировках внутри запроса, если блокировка может быть разрешена без завершения потока.
Все новые накопительные обновления для SQL Server содержат все исправления и все исправления для системы безопасности, которые были включены в предыдущий накопительный пакет обновления. Ознакомьтесь с самыми последними накопительными обновлениями для SQL Server.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Ссылки
Ознакомьтесь с терминологией, которую корпорация Майкрософт использует для описания обновлений программного обеспечения.