Zustand der Statistiken: wann aktualisiert, wie viele Zeilen geändert
SQL ServerWartungBefehl
USE [Musteri];
SELECT OBJECT_SCHEMA_NAME(s.object_id) AS schema_name,
OBJECT_NAME(s.object_id) AS table_name,
s.name AS stats_name,
s.auto_created, s.has_filter, s.no_recompute,
sp.last_updated,
sp.rows, sp.rows_sampled,
CAST(100.0 * sp.rows_sampled / NULLIF(sp.rows, 0) AS DECIMAL(5,1)) AS sample_pct,
sp.modification_counter,
CAST(100.0 * sp.modification_counter / NULLIF(sp.rows, 0) AS DECIMAL(9,1)) AS modified_pct,
CAST(CASE WHEN 500 + 0.20 * sp.rows < SQRT(1000.0 * sp.rows) THEN 500 + 0.20 * sp.rows
ELSE SQRT(1000.0 * sp.rows) END AS BIGINT) AS auto_update_threshold,
sp.persisted_sample_percent
FROM sys.stats s
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id) sp
WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1
ORDER BY sp.modification_counter DESC;
SELECT name, is_auto_create_stats_on, is_auto_update_stats_on, is_auto_update_stats_async_on
FROM sys.databases
WHERE name = DB_NAME();Was es tut
Zeigt für jede Statistik den Zeitpunkt der letzten Aktualisierung, die Sampling-Rate, die seit der letzten Aktualisierung geänderten Zeilen und den Schwellenwert, bei dem Auto Update auslöst (dynamischer Schwellenwert ab Compat 130).
Wann einsetzen
Bei Plänen mit großer Abweichung zwischen geschätzten und tatsächlichen Zeilen, nach einem großen Datenladevorgang oder um zu prüfen, ob der Job zur Statistikpflege wirkt.
Vorsicht
Die Schwellenwertformel gilt ab Compatibility Level 130 (MIN(500 + 20%, SQRT(1000 x rows))); niedrigere Compat Levels nutzen die Regel 20% + 500. Nie aktualisierte Statistiken (leere Tabellen) liefern NULL. Ungleich verteilte Spalten mit niedrigem sample_pct brauchen eventuell FULLSCAN oder PERSIST_SAMPLE_PERCENT. Reine Leseabfrage; sicher.