Les Statistiques Incrémentales de SQL 2014
Les Statistiques dans SQL Server
Les statistiques sont utilisées par l'optimiseur pour évaluer la sélectivité des expressions, et donc la taille des résultats intermédiaires et finaux.
Elles peuvent être:
- Crées automatiquement ou manuellement.
- Mises à jour automatiquement ou manuellement.
- Mises à jour en synchrone ou en asynchrone
- Basées sur un échantillonnage de valeurs ou toutes les valeurs
Le plus elles sont à jour, le meilleur c’est. Il faut donc s’appuyer sur la mise à jour automatique ou les faire manuellement. La mise à jour automatique est déclenchée quand au moins 500 + 20% des données de la table ont évoluées.
Problème sur les grosses tables
Pour une tables avec des millions de lignes, il peut prendre des jours voir des mois avant d’atteindre le seuil de 20%.
Si une nouvelle partition est ajoutée à la table et que ça ne modifie pas 20% du total de celle-ci, les statistiques ne sont pas mises à jour et il n’y a pas d’information sur cette nouvelle partition.
Une mise à jour manuelle des statistiques peut être déclenché mais elle va échantillonner toute la table ce qui peut être trop long.
Les Statistiques Incrémentales de SQL 2014
Objectif:
- Mise à jour plus rapide sur des tables avec de larges partitions
- Des mises à jour automatiques plus fréquentes
Les statistiques incrémentales ne sont disponible que pour tables partitionnées. Une page de statistique est créée par partition, puis un merge est effectué en chaque pages deux a deux jusqu’à la page globale de la table. L’ensemble des pages sont persistante sur disque. Lors de l’ajout d’une partition une nouvelle branche est créée.
La mise à jour automatique se déclenche avec un nouveau seuil:
- 500 + 20% de la taille moyenne des partitions en ne prenant en compte que les partitions non vides et en enlevant la plus petite et la plus grosse.
- Seules les partitions avec 20% de modification sont mises à jour.
Prenons un exemple :
- Une table avec 6 partitions, 10000 rows
- L’ancien seuil de mise à jour est : 500 + 20% * 10000 = 2500
Auto Stat avec 900 enregistrements modifiés :
- Le nouveau seuil est :
- Moyenne des partitions non vide en éliminant la plus petite et la plus grande : (2000 + 2000 + 2000) /3 = 2000
- Seuil : 500 + 20% * 2000 = 900
- Les partitions mises à jour :
- Partition 2 = 2000*20% = 400 (autostat)
- Partition 4 = 1000*20% = 200 (autostat)
- Partition 5 = 3000*20% = 600 (no autostat)
- Le nouveau seuil est :
Script: