Objawy
Załóżmy, że używasz programu Microsoft SQL Server 2016 i 2017. Po włączeniu xml_deadlock_report zdarzeń w celu zbierania danych dotyczących zakleszczeń zgłaszanych jest wiele xml_deadlock_report zdarzeń dla jednego wystąpienia zakleszczenia wewnątrz zapytania.
Obejście
Aby obejść ten problem, można zebrać error_reported XEvent za pomocą filtru error_number = 1205 zamiast xml_deadlock_report, jak widać w poniższym przykładzie:
Uwaga
- CREATE EVENT SESSION [Deadlock_Collection] ON SERVER
- DODAWANIE ZDARZENIA sqlserver.error_reported(
- WHERE ([error_number]=(1205)))
- ADD TARGET package0.histogram(SET filtering_event_name=N'sqlserver.lock_acquired',source=N'sqlserver.query_hash')
- WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SEKUND,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=BRAK,TRACK_CAUSALITY=WŁ,STARTUP_STATE=WYŁ.)
- GO
Rozwiązanie
Ten problem został rozwiązany w następujących aktualizacjach zbiorczych programu SQL Server:
Aktualizacja zbiorcza 10 dla programu SQL Server 2017
Aktualizacja zbiorcza 2 dla programu SQL Server 2016 z dodatkiem SP2
Uwaga: Dzięki tej poprawce nie są zgłaszane żadne zdarzenia xml_deadlock_report dla zakleszczenia wewnątrz zapytania, gdy zakleszczenie można rozwiązać bez zabijania wątku.
Informacje o aktualizacjach zbiorczych programu SQL Server:
Każda nowa aktualizacja zbiorcza programu SQL Server zawiera wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji skumulowanej. Sprawdź najnowsze aktualizacje zbiorcze dla programu SQL Server:
Najnowsza aktualizacja zbiorcza dla programu SQL Server 2017
Najnowsza aktualizacja zbiorcza dla programu SQL Server 2016
Stan
Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.
Źródła informacji
Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.