Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1621 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Procédures stockées -> plus lentes ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Oracle] Procédures stockées -> plus lentes ?

n°771434
[ ZeD ]
Désigné volontaire
Posté le 21-06-2004 à 14:36:25  profilanswer
 

salut,
 
j'ai un problème de lenteur avec la requête suivante :

Code :
  1. SELECT DISTINCT
  2. t.TOUR_DATE AS jour, t.TOUR_DESTINATAIRE AS destinataire, t.TOUR_NUMERO AS tournee, Get_Nomtech(t.TOUR_IDTECH) AS technicien, Get_Etat_Tournee(t.TOUR_ETAT) AS etat, Nb_Statuttgc(t.TOUR_ID, '0') AS ok, Nb_Statuttgc(t.TOUR_ID, '1') AS nok, Nb_Statuttgc(t.TOUR_ID, '3') AS inc, Nb_Statuttgc(t.TOUR_ID, '2') AS rendus
  3. FROM TOURNEES_SVR t
  4. WHERE t.TOUR_DATE>='01/03/04' AND t.TOUR_DATE<='28/04/04' AND t.TOUR_ETAT>0 AND t.TOUR_IDSITE='SAR'
  5. ORDER BY t.TOUR_DATE DESC;


la requête dure 7 secondes pour 40 lignes retournées, ce qui me paraît plutôt énorme...  :sweat:
 
j'ai remarqué que ce qui prenait le plus de temps c'était les procédures stockées mais elles ont l'air classiques:

Code :
  1. FUNCTION Nb_Statuttgc(idtournee NUMBER, statut NUMBER)
  2. RETURN NUMBER
  3. AS
  4. nb NUMBER;
  5. BEGIN
  6. SELECT COUNT(*) INTO nb FROM BI_SVR b WHERE b.BI_TOURNEEREELLE=idtournee AND b.BI_ETAT='T' AND b.BI_STATUTTGC=statut;
  7. RETURN (nb);
  8. END Nb_Statuttgc;


donc question : est-ce que l'utilisation des procédures stockées dans un select est à bannir ?
j'ai aussi remarqué que les tables ne disposaient que de très peu d'indexes et d'aucune clé étrangère, est-ce que le fait d'en mettre va  accélérer la requête au point de lui faire gagner 6 secondes ?
 
merci d'avance.

mood
Publicité
Posté le 21-06-2004 à 14:36:25  profilanswer
 

n°771539
[ ZeD ]
Désigné volontaire
Posté le 21-06-2004 à 16:10:17  profilanswer
 

up  :bounce:

n°772334
Arjuna
Aircraft Ident.: F-MBSD
Posté le 22-06-2004 à 09:44:59  profilanswer
 

Première chose, vérifie que les procédures tapent bien dans les bons indexes. Crées-en d'autres si nécessaire.
 
Idem pour la requête elle-même.
 
Sinon, personnellement, j'aime pas trop mettre des appels a des fonctions au niveau des lignes (donc dans le select) dans une requête qui retourne plusieurs lignes, surtout s'il y en a beaucoup. En effet, ça oblige Oracle à faire tourner la proc autant de fois qu'il y a de lignes, même si certains peuvent soutenir le contraire, je reste convaincu que dans ce cas, deux trois jointures de bourrins avec de jolies sous-requêtes et de beaux group by resteront plus performant. Il faudrait bencher pour s'en assurer mais bon.
 
Ceci-dit... Vérifie déjà tes indexs, parceque tu tapes dans une pauvre table à chaque fois, je trouve ça étrange que ca soit aussi lent... Et vu le nombre de lignes ca justifie pas vraiment...
 
PS: Tu peux forcer l'utilisation d'un index comme ça :
 

select
/* +index(alias nom_index) */
les champs
from table alias, ...
where ...

n°772427
[ ZeD ]
Désigné volontaire
Posté le 22-06-2004 à 10:50:37  profilanswer
 

effectivement je viens de passer de 6 secondes à 140 ms en rajoutant des index, c'est déjà mieux  :p
 
merci  ;)

n°772455
Arjuna
Aircraft Ident.: F-MBSD
Posté le 22-06-2004 à 11:09:02  profilanswer
 

Ca me semble plus normal comme temps de réponse ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Oracle] Procédures stockées -> plus lentes ?

 

Sujets relatifs
[Tips] Utilisation de masques avec Oracle[Oracle] Requête très lente. Que faire ?
Création base de données depuis procédure stockéesutiliser OCI avec oracle 7
executer une procedure oracle dans la consoleCréation hierarchique XML via ADO & Arbre Oracle SQL
Oracle : Arbre SQLQuery sur DB Oracle via PHP : charge CPU énorme !
Connexion Oracle JSP [RESOLU]supprimer verrou base de donnée oracle 8.1.7
Plus de sujets relatifs à : [Oracle] Procédures stockées -> plus lentes ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR