IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

[VIEW] [FUNCTION] probleme de performances


Sujet :

SQL Oracle

  1. #1
    Membre averti Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Points : 353
    Points
    353
    Par défaut [VIEW] [FUNCTION] probleme de performances
    Bonjour,

    J'ai d'une part une fonction qui me permet de recéperer des valeurs pour une clé donnée, d'autre part une VUE qui utilise plusieur fois cette fonction ...
    Le résultat est que les performances sont plutôt mauvaises ...
    Je ne suis pas expert SQL donc si quelqu'un peut me donner un avis ou une piste à creuser.

    Voici quelques infos :

    Ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE FUNCTION XXXXX.GET_MULTIVALUED_FOLDER_VALUES(processId IN VARCHAR2, attrName IN VARCHAR2) RETURN VARCHAR2 IS
    	attrValue VARCHAR2(4000);
    BEGIN
    	attrValue := '';
    	FOR c IN (SELECT FV.CWFVALUE FROM CWFFOLDERELEMENT FE, CWFFOLDERVALUES FV WHERE FV.CWFFOLDERELEMENTID = FE.CWFFOLDERELEMENTID AND FE.CWFPROCESSINSTID = processID AND FE.CWFLABEL = attrName) LOOP
    		attrValue := attrValue || ';' || c.CWFVALUE;
    	END LOOP;
    	RETURN SUBSTR(attrValue, 2);
    END;
    Voici un resumé de ma vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CREATE OR REPLACE FORCE VIEW XXXXXX.V_PROCESS2SYNTHETISE
    (CWFPROCESSINSTID, CWFACCESSDATE, CWFCREATIONDATE, CWFDESCRIPTION, CWFENDDATE, 
     CWFHOSTENGINE, CWFLONGNAME, CWFMODIFIEDDATE, CWFPARENTNODE, CWFPARENTPROCESS, 
     CWFPROCESSBLOCKED, CWFPROCESSCDMAPPLICATION, CWFPROCESSINITIATOR, CWFPROCESSINSTNAME, CWFPROCESSLABEL, 
     CWFPROCESSMODEL, CWFPROCESSSTATE, CWFPROCESSSUMUPFORM, CWFPROCESSTIMEOUT, CWFTIMEOUTREFERENCE, 
     CWFSYNCPROCESS, CWFLINKALARM, CWFPROCESSINITFORM, CWFPROCESSSTATUS, POSSIBLEMODELS, 
     REQUESTER_DN, ID_PROCESS, REQUESTER_NAME, DELAITIME, OBSERVER_NAMES, 
     OBSERVER_DNS, APPLICATION_QUERIES, LIBRARY_NAME, RECIPIENT_NAMES, RECIPIENT_DNS)
    AS 
    select 
    	   CWFPROCESSINSTANCE.CWFPROCESSINSTID,
    CONCAT(GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipientNames'),GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipientsNames')) AS RECIPIENT_NAMES,
    CONCAT(GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipients'),GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipientDns')) AS RECIPIENT_DNS
     
    from CWFPROCESSINSTANCE
    where CWFPROCESSINSTANCE.CWFPARENTPROCESS IS NULL AND  CWFPROCESSINSTANCE.CWFPROCESSINSTID LIKE 'XXXXX%';
    La vue ne se base que sur une seule table mais la fonction sur plusieurs ...

    Merci à ceux ou celles qui ont lu jusqu'ici ... et encore plus à ceux qui me répondraient !!!
    Take it HiSy

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par hisy Voir le message
    Bonjour,

    J'ai d'une part une fonction qui me permet de recéperer des valeurs pour une clé donnée, d'autre part une VUE qui utilise plusieur fois cette fonction ...
    Le résultat est que les performances sont plutôt mauvaises ...
    ...
    Le résultat ne peut être que mauvais.
    Supprimez la fonction. Essayez de faire les jointures en SQL sans PL/SQL.
    Essayez d'expliquer ce que vous voulez faire.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Points : 237
    Points
    237
    Par défaut
    Hello;

    Volumétrie des tables concernée ? + indexation des dites tables ?

    Ensuite, il peut être utile sur un exemple (dont tu as pu voir que les temps sont mauvais ...) et d'utiliser un bon vieux Tkprof sera riche en informations.

    laurent
    http://www.lao-dba.com

Discussions similaires

  1. [oracle 9i] traquer les problemes de performances
    Par jojo22222 dans le forum Oracle
    Réponses: 1
    Dernier message: 01/02/2006, 18h48
  2. Réponses: 9
    Dernier message: 31/01/2006, 22h42
  3. probleme de performance dans l'insertion
    Par chafikha dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/08/2005, 07h59
  4. Réponses: 14
    Dernier message: 09/08/2004, 13h42
  5. problemes de performances avec les requetes select
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/07/2003, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo