|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 84 ![]() |
Bonjour,
Je suis sur Oracle 10g. J'ai une requête qui peut prendre en entré un très grand nombre d'identifiants (plus de 1 000). Pour contourner le problème, j'utilise une table temporaire : j'insère les identifiants, puis je fais une jointure sur cette table pour ne sélectionner que les enregistrements que je souhaite. La table est ensuite vidée. Cela fonctionne bien, sauf qu'après un certain temps, le temps d'exécution de la requête se augmente considérablement (multiplié par 2 ou 3), mais je ne trouve pas la raison. Si je supprime puis recrée la table temporaire, tout redevient normal. Ma table temporaire est définie ainsi : Code :
TMP_IDSELECTION contient la valeur que je veux selectionner A l'utilisation, cela donne : Code :
Code :
|
||||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Ajoutez le hint dynamic sampling à 5 pour la requête utilisant la table temporaire.
|
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 84 ![]() |
Merci pour la réponse.
J'ai essayé, mais cela ne change rien au temps d'execution |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Dans ce cas faite une trace SQL étendu de votre traitement pour voir clairement ce qui se passe.
|
|
|
00
|
|
|
#5 | |
|
Membre Expert
![]() ![]() Franck PachotDBA Oracle Inscription : novembre 2007 Messages : 703 ![]() |
Bonjour,
Citation:
Sinon, c'est probablement l'index sur la pk qui grossit et est plus long à mettre à jour (plus profond, moins de blocks en cache,...) Cordialement, Franck.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
|
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 84 ![]() |
mnitu:
J extrais la trace SQL, mais la requete est relativement complexe, donc le plan d'execution aussi... pachot: Comme indiqué dans la definition de la table temporaire, (ON commit DELETE rows) elle est vidée à chaque utilisation merci de vos réponses |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Franck PachotDBA Oracle Inscription : novembre 2007 Messages : 703 ![]() |
Oui, en fait je voulais savoir s'il y avait un commit entre chaque exécution
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 84 ![]() |
Autant pour moi...
Oui, la table est vidée à chaque fois. |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
|
|
|
00
|
|
|
#10 | ||||||
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 84 ![]() |
Voici une partie représentative de la requete que je traite avec son plan d'execution
Code :
Code :
Code :
|
||||||
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
C’est compliqué avec les informations que vous fournissez de tirer les bonnes conclusions. Néanmoins vos plans d’exécution montrent des différences dans l’estimation des cardinalités des étapes du plan ce qui est le signe de mauvais plans d’exécution.
L’utilisation des tables temporaires qui n’ont pas des statistiques pose ce type de problème surtout quand elle entre en jointure avec des autres tables. Dans ces cases vous pouvez utiliser soit le hint dynamic sampling soit un autre non documenté cardinality ou opt_estimate. |
|
|
10
|
|
|
#12 |
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 84 ![]() |
J'ai essayé les différents hints sans succès.
Le problème semble être résolu en supprimant les statistiques sur la table temporaire puis en verrouillant la génération des statistiques dessus. Merci pour vos réponses |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com