Envoyé par
devkais
Pour des raisons de gain de temps et de stabilité des plans d’exécution les statistiques sont FIGEES depuis la 8i en 2004 (même lors de la migration précédente 9i/10g).
...
Il faut remédier à cela sans recalculer les stats en 11g(une vraie contrainte).
...
Faut-il forcer le calcul des stats en 11g après avoir inhibé tous les hints dans le code de l’application ? 3000 hints environ !
Il y a en 11g différents outils, nouveaux ou non, qui faciliteront vos tests pour sortir de ce que je considère comme une fuite en avant (en plutôt en arrière).
1) désactivation globale des directives d'optimisation (les hints), à titre de test :
alter session set "_optimizer_ignore_hints" =true;
2) statistiques "privées"
- vous calculez les stats avec l'option PUBLISH=FALSE
1 2
| exec dbms_stats.set_database_prefs('PUBLISH', 'FALSE');
exec dbms_stats.gather... |
- vous activez ces statistiques uniquement dans la session de test
alter session set optimizer_use_pending_statistics=true;
- si elles s'avèrent bénéfiques, vous les publiez pour tout le monde
EXEC DBMS_STATS.PUBLISH_PENDING_STATS(NULL, NULL);
3) émulation d'un optimiseur de version inférieure, par exemple
alter session set optimizer_features_enable='8.1.7';
4) fonctionnalité "sql performance analyzer" appartenant à l'option payante Real Application Testing, qui permet de comparer les performances individuelles d'un jeu de requêtes avant et après modification (ici le changement de version)
5) "sql plan management", qui fournit une sorte d'assurance anti régression, grâce à des plans de référence qu'on peut transférer depuis la V10 par exemple
De plus, il se pourrait, d'après ce que vous décrivez, que vous traîniez dans votre INIT.ORA V11 des vieux paramètres qui sont désormais complètement inadaptés.
Partager