|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Bonjour,
Quand j'exécute une requête SQL, son temps d'exécution est (trop) long. J'ai effectué une trace et j'obtiens le résultat (uniquement le cas pertinent) suivant : ________________________________________________ Code :
Citation:
Code :
J'ai déjà modifié (augmenté) le cache tampon (SGA) et la mémoire PGA. Le résultat obtenu est : _____________________________________________________ Citation:
Le temps "elapsed" a diminué, par contre le temps "CPU" a légérement augmenté ainsi que le nombre de "query". Pourriez-vous m'indiquer ce que je dois faire pour obtenir un temps plus bas? Encore augmenter les 2 paramètres SGA et PGA?? Auriez-vous des références à des documents, forums, ... pour optimiser les requêtes depuis une trace? Car je vois bien qu'il y a un problème et je ne sais pas sur quoi je dois agir pour le corriger. En vous remerciant d'avance. Cédric |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
![]() Tu ne prends pas le problème dans le bon sens, on ne connait pas l'explain plan, les waits ni rien... comment pourrait-on t'aider ? Pourquoi avoir augmenter la SGA (à noter que la SGA n'est pas le cache tampon) et PGA ? ![]() PS : c'est pas la 1° qu'on te demande de mettre les balises |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Désolé, c'est mon deuxième poste et la dernière fois c'était au mois de septembre!
J'y ferais plus attention.Précision : J'ai augmenter le paramètre du cache tampon (paramète dynamique) qui dépend de la mémoire allouer à SGA afin de diminuer le nombre d'accès disque. Pour le paramètre PGA, j'avais un pourcentage de succès en mémoire cache de ~64% et il devrait être aux alentours de 95%, non? J'ai ajouté l'explain plan dans le post de départ. Une trace pour une session n'indique pas d'autres informations. Je dois faire un "snapshot" pour avoir plus d'informations, n'est-ce pas? Désolé de ces questions de débutants et ce sont des éléments que je découvre, car avant j'utilisais la trace de session que pour les indexes car les paramètres par défaut d'Oracle suffisait. Merci pour les liens! |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
Table Access full ?
Tu n'as aucun index sur la table ? Combien de ligne fait-elle ? Combien en ramènes-tu avec ta requête ?
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
|
|
00
|
|
|
#5 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
Ceci étant, le problème c'est pas la base mais la requête... FTS c'est pas bon, vérifie index et stat. Tu peux aussi enlevé le ORDER BY rowid
|
|
|
|
00
|
|
|
#6 |
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Les deux index que j'ai sont :
Le nombre de ligne dans la table est de 116854, le nombre de ligne retourné est de 151. En exécutant le requête seul, le résultat est quasi instantané. Tandis que dans l'application c'est le contraire. Je n'ai pas directement la main sur la requête. C'est l'application (Magic) qui se charge de convertir les demandes de condition (filtre) des développeurs en requêtes SQL. Par contre, il doit être possible de modifier les paramètres du language Magic. Car le problème ne vient peut-être pas directement d'oralce. |
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
bah voila... je crois que c'est clair, il manque un index au moins sur une partie des colonnes limitant le résultat
|
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
D'accord!
Mais je ne vois pas comment vous êtes arrivé à cette conclusion. Et c'est quoi un FTS??? Promi je ferme le post après! Merci! |
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
FTS = FULL TABLE SCAN = parcourt de toutes la table ce qui signifie qu'il n'y a pas d'index sur les colonnes de la clause WHERE
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
Ce qui m'étonne c'est que la requête exécutée toute seule soit quasi instantannée. Dans ce cas là le problème vient soit du tuyau entre Oracle et l'application (mais bon pour 150 lignes...) soit de l'application elle même et là c'est grave.
Est-ce que tu es SUR que la requête exécutée par l'application est la même que celle que tu exécutes à la main ?
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Pas tous a fait!
Apparament il parcours une boucle dans laquelle, il va chercher X fois des informations pour chaque élément de la boucle. Ce n'est donc pas la même chose. J'ai ajouté deux index sur la table DO_LOT_BON et le traitement c'est effectué nettement plus vite. Merci bcp et à l'avenir je crérai un index sur un des éléments de la clause where! |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
Un des éléments oui, mais le plus sélectif si possible (ou alors le plus utile, m'enfin on va partir en débat là).
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com