|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 951 ![]() |
Hello,
J'ai un souci avec le calcul des stats sur Oracle, en version 9i et 11g. Que ce soit avec un ANALYZE TABLE ou un DBMS_STATS.GATHER_TABLE_STATS, que ce soit en estimate ou en compute Oracle ne choisit pas le bon chemin, et je dois forcer via un hint le passage ou non par un index. En regardant de plus près les cardinalités estimées sont fausses, ce qui explique le chemin choisi. Mais bon, les requêtes ne sont pas si compliquées, je m'étonne du résultat. Et puis je n'aime pas forcer via un hint; d'un environnement à un autre la situation pourrait être différente. Aussi y a t-il d'autres méthodes pour "améliorer" les stats et le choix de l'optimiseur ? ps : J'avoue utiliser la syntaxe basique ( et peu de paramètres ) lors du calcul
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Donnez nous plus des informations: requête, indexes, volumétrie, cardinalités estimés et réelles, paramètrage d'optimiseur, temps de réponses, ...
|
|
|
00
|
|
|
#3 |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 951 ![]() |
Par exemple sur une requête ...
Ci joint les explain plan "anonymisés" ko ( choisi par Oracle ) et ok ( avec un hint FULL ). La requête renvoie 121716 lignes. Le hint évite de passer par un index - car d'après ce que je comprends Oracle s'attend en fait à n'avoir qu'environ 2000 lignes ... c'est ça ? |
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Je ne vois pas d’accès via index. Je vois que du FULL. De plus je vois qu’il s’agit d’une requête distribué et que la différence entre les deux plans est lié à la méthode de jointure: Hash Join vers Nested Loop
|
|
|
00
|
|
|
#5 |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 951 ![]() |
Le Nested Loop se fait sur du remote dans le cas de l'explain plan ko. On ne voit pas l'index mais je m'en doute car il n'y a pas de FULL, la cardinalité est à 1 et il y a un index bien placé sur la table ( pk ).
Et j'ai oublié de dire que la requête avec le nested loop met plus de 3h, celle sans met 4'. |
|
00
|
|
|
#6 | |||||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
Savez-vous aussi qu’un explain plan amputé de sa partie ‘’Predicate’’ est un explain plan incomplet car ladite partie comprend des informations parfois cruciales (comme les conversions implicites qui empêchent l’utilisation des indexes). Ceci dit, pourquoi vous n’utilisez pas Code :
Code :
|
|||||
|
|
00
|
|
|
#7 | |
![]() ![]() Consultant en Business Intelligence Inscription : juillet 2008 Messages : 951 ![]() |
Merci de votre réponse.
Hélas ici je n'ai pas tous les droits, le Code :
SELECT * FROM TABLE(dbms_xplan.display_cursor(NULL,NULL,'ALLSTATS LAST')) ; Bizarrement même le Citation:
|
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Pour le parameter ça peut être contourné
Code :
|
||
|
|
20
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Il y a une différence importante dans les cardinalités sur la deuxième table accensée en REMOTE: 1 vers 167070. Si vous trouvez la réponse à la question que est-ce qu'il explique cette différence, vous avez la solution à votre problème.
|
|
|
00
|
|
|
#10 | |
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com