DBAtlas · Veritabanı operasyon atlası

İstatistik sağlığı: ne zaman güncellendi, kaç satır değişti

SQL ServerBakım

Komut

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.

DBAtlas'ta aç →

İlgili