Bon, on a fait des tas de trucs avec les DBA.
Tout d'abord, plutôt que d'attendre d'un jour sur l'autre de refaire les tests de différence entre la 1ère exécution et la seconde, ils ont pu vider le cache de la base :
Ensuite sur un exemple pris à la seconde exécution, les temps sont très différents d'un outil à l'autre bien que tous soient en mode CHOOSE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 alter system flush buffer_cache; --blocs de données alter system flush shared_pool; --analyse requete
DBA : TOAD : 22" / PL/SQL Developer : 9"
Moi : CAST et SQL Developer : <2"
On se met en mode trace pour analyser tout ça
Dans tous les cas, le plan d'exécution est le même (1ère ou 2e exécution)
Sur le pire des exemples, on a atteint 78" (CAST)
1ère exécution
2e exécution
On s'aperçoit dans le détail que c'est la lecture des données sur le disque sur qui prend le plus de temps :
Idée1 --> utiliser le conseiller Oracle (-->ne conseille rien)
Idée2 --> faire un rebuild des index concernés
Ca y est un "miracle" se produit et ce qui prenait 45" prend 5" et la requête ci-dessus qui prenait 78" ne prend plus que 45" (bon, c'est pas divisé par 5 comme j'espérais mais c'est nettement mieux).
Les DBA m'ont dit que sur certaines des bases de PROD, un export/import des données était prévu, ce qui permet à Oracle de mieux s'organiser (blocs de données, etc) et que parmi les conséquences, ça implique aussi le recalcul des index.
Par conséquent, le recalcul des stat ne suffit pas, il faut de temps à autre reconstruire aussi les index
alter index IDX_MY_INDEX rebuild; (si tout le monde est déconnecté)
alter index IDX_MY_INDEX rebuild online; (duplique l'index avant de le remplacer si personne n'est connecté : risque de dupliquer la mémoire)
Partager