Suis à l' aide que SQL SERVER 2012
j'ai mon Auto Update Stats
ON dans ma base de données.
À partir du lien ci-dessous, j'ai appris que les statistiques de mise à jour automatique se déclencheront pour chaque SQRT(1000 * Table rows)
modification des lignes du tableau.
https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/
J'ai créé une table avec 1000 enregistrements
SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
name
INTO stst
FROM sys.objects
Création de statistiques
CREATE STATISTICS rn
ON stst (rn)
CREATE STATISTICS name
ON stst (name)
Vérification des statistiques créées
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
Selon la formule
select SQRT(1000 * 500) -- 707.106781186548
Donc, si j'ajoute / modifie des 707.106781186548
enregistrements dans ma table, les statistiques de mise à jour automatique doivent se déclencher
Ajouter 1000
plus d'enregistrements à ma table qui devraient être plus que suffisants pour tirerauto update stats
INSERT INTO stst(rn,name)
SELECT TOP 1000 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
a.name
FROM sys.objects a
Pour tirer le auto update stats
Select * from stst
Vérification des statistiques
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
Malheureusement encore l' Rows
est 500
seulement.
Même après avoir inséré des 1000
enregistrements dans ma table, ce qui est évidemment plus important que 707.106781186548
lors de l'exécution SELECT
pourquoi les statistiques de mise à jour automatique ne se sont pas déclenchées? Qu'est-ce que j'oublie ici
la source
Réponses:
Le nouveau calcul n'est utilisé que si l'indicateur de trace 2371 est activé, sauf sur SQL Server 2016 lorsque le niveau de compatibilité de la base de données de contexte est défini sur 130, où il s'agit du comportement par défaut. Voir Microsoft KB 2754171:
Contrôle du comportement d'Autostat (AUTO_UPDATE_STATISTICS) dans SQL Server
Les statistiques ne sont pas mises à jour lorsque les données sont modifiées. Une mise à jour des statistiques est déclenchée lorsque l' optimisation basée sur les coûts constate que les statistiques intéressantes pour la requête sont périmées.
L'optimiseur n'entre pas dans l'optimisation basée sur les coûts pour les requêtes très simples ("triviales"), où un seul plan évident est toujours optimal. Aucune mise à jour des statistiques ne se produit dans ce scénario.
Consultez la mise en cache et la recompilation du plan du livre blanc de Microsoft dans SQL Server 2012 par Greg Low.
la source