İstatistik sağlığı: ne zaman güncellendi, kaç satır değişti
SQL ServerBakımKomut
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();Ne yapar?
Her istatistiğin son güncellenme zamanını, örnekleme oranını, son güncellemeden bu yana değişen satır sayısını ve otomatik güncellemenin tetikleneceği eşiği (compat 130+ dinamik eşik) gösterir.
Ne zaman kullanılır?
Tahmini ve gerçek satır sayısı arasında büyük fark olan planlarda, büyük veri yüklemesi sonrası, istatistik bakım job'ının etkinliğini kontrol ederken.
Dikkat
Eşik formülü compat level 130+ içindir (MIN(500 + %20, SQRT(1000 x satır))); daha düşük compat'ta %20 + 500 kuralı geçerlidir. Hiç güncellenmemiş istatistiklerde (boş tablo) değerler NULL döner. Düşük sample_pct'li ve çarpık dağılımlı sütunlarda FULLSCAN veya PERSIST_SAMPLE_PERCENT gerekebilir. Sadece sorgu; risksiz.