it-swarm.com.de

Feststellen, ob die automatische Statistikaktualisierung ausgeführt wird

In unserem Produktionssystem bleiben Abfragen manchmal stehen. Während des Stillstands wird in sp_whoisactive keine inkrementelle Ressourcennutzung (CPU, Reads) angezeigt, und es erfolgt keine Blockierung.

In der retrospektiven Diagnose können wir sehen, dass sys.dm_db_stats_properties zuletzt aktualisiert wurde, als die Abfrage "blockiert" wurde.

Was wir tun möchten, ist - wenn wir eine blockierte Abfrage sehen - dann festzustellen, welche automatischen Statistikaktualisierungen ausgeführt werden.

Da wir dies ad-hoc tun möchten und auch die Produktionsleistung nicht beeinträchtigen möchten, ist die Verwendung von Profiler für uns wahrscheinlich keine Option.

(Wenn es keine Möglichkeit gibt, eine Ad-hoc-Bestimmung durchzuführen, müssen wir möglicherweise erweiterte Ereignisse oder eine andere vorbeugende Nachverfolgung mit geringeren Auswirkungen in Betracht ziehen.

Unsere Version ist 2014, aber Antworten für spätere Versionen wären auch nützlich.

8
Paul Holmes

SQL Server 2019 hat eine Wartestatistik eingeführt, um dies zu verfolgen. In früheren Versionen bleibt Traces/XE übrig. Siehe meine Beiträge zum neuen Wartestatus:

Um XE in früheren Versionen zu verwenden, möchten Sie nach auto_stats suchen. Eine minimale Sitzung, um Ihnen den Einstieg zu erleichtern, würde folgendermaßen aussehen:

CREATE EVENT SESSION auto_stats
    ON SERVER
    ADD EVENT sqlserver.auto_stats
    ADD TARGET package0.event_file
    ( SET filename = N'auto_stats' );

Obwohl Sie es wahrscheinlich mit einer gewissen Spezifität für Datenbanken oder Tabellen konfigurieren möchten, die Ihnen wichtig sind, und ich auf jeden Fall nach Dauer filtern möchte (WHERE [duration] > 1000000 wäre eine Sekunde) oder so, weil es sonst ziemlich laut wäre.

10
Erik Darling