DBAtlas · Atlas d'exploitation des bases de données

Santé des statistiques : date de mise à jour, nombre de lignes modifiées

SQL ServerMaintenance

Commande

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();

Ce que fait la commande

Affiche pour chaque statistique l'heure de la dernière mise à jour, le taux d'échantillonnage, les lignes modifiées depuis la dernière mise à jour et le seuil auquel l'auto update se déclenche (seuil dynamique pour compat 130+).

Quand l'utiliser

Pour les plans avec un grand écart entre lignes estimées et réelles, après un gros chargement de données, ou pour vérifier l'efficacité du job de maintenance des statistiques.

Attention

La formule du seuil s'applique au niveau de compatibilité 130+ (MIN(500 + 20%, SQRT(1000 x rows))) ; les niveaux inférieurs utilisent la règle 20% + 500. Les statistiques jamais mises à jour (tables vides) renvoient NULL. Les colonnes asymétriques avec un sample_pct faible peuvent nécessiter FULLSCAN ou PERSIST_SAMPLE_PERCENT. Requête en lecture seule ; sûre.

Ouvrir dans DBAtlas →

Voir aussi