301
9.2 Maîtrise de la compilation
requêtes avec lesquelles vous pouvez modifier la fréquence des recompilations : KEEP
PLAN, et KEEPFIXED PLAN.
KEEP PLAN et KEEPFIXED PLAN
l’indicateur de requêtes KEEP PLAN modifie les seuils de compilation des tables
temporaires (premiers seuils à 6 lignes modifiées, puis 500 lignes modifiées) qui
deviennent alors identiques à ceux des tables permanentes. Si les modifications
apportées à des tables temporaires entraînent de nombreuses recompilations, essayez
de placer cette option dans votre procédure, et vérifiez si cela diminue la fréquence
de recompilation. Exemple de syntaxe pour notre procédure :
SELECT * FROM #t WHERE col = 'e' OR id > 20
OPTION (KEEP PLAN)
L’indicateur KEEPFIXED PLAN est encore plus contraignant : il empêche simplement toute recompilation de l’instruction pour raison d’optimisation (nouvelles statistiques, changement de cardinalité…). Appliquez-le aux requêtes que vous avez
reconnues comme posant réellement un problème de recompilation.
Tracer les recompilations
Vous pouvez détecter les recompilations à l’aide d’une trace, et des événements
SP:Recompile et SQL:StmtRecompile. Ces événements vous indiquent, dans la
colonne EventSubClass de la trace, pour quelle raison la recompilation a été déclenchée. Les valeurs possibles sont celles du tableau 9.1.
Tableau 9.1– Valeurs
EventSubClass
Signification
1 La structure de l’objet a changé
2 Les statistiques ont changé
3 Compilation déférée : par exemple, lors de l’utilisation d’une table
temporaire, les instructions de la procédure utilisant cette table ne peuvent
être compilées au début de l’exécution de la procédure. Elles ne le pourront
que lorsque la table sera effectivement créée. Cela déclenchera à ce
moment une recompilation de ce type.
4 Une option de session a changé
5 Une table temporaire a changé
6 Un jeu de résultant distant (serveur lié) a changé
7 Une permission FOR BROWSE a changé.
8 L’environnement de Query Notification a changé
9 Une vue partitionnée a changé
➤
Précédent

- 313/334

Suivant