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

Oracle Discussion :

Optimisation vue matérialisées


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut Optimisation vue matérialisées
    Bonjour à tous,

    j'ai une petite question:

    actuellement j'ai des vues materialisées du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE MATERIALIZED VIEW MV_CONTRAT
    TABLESPACE mon_tablespace
    NOCACHE
    LOGGING
    NOPARALLEL
    REFRESH FORCE ON DEMAND
    AS 
    SELECT 
    ctr.*,
    ma_fonction1 (ctr.id_ctr),
    ma_fonction2 (ctr.id_ctr)
    from CONTRAT ctr
    j'ai optimiser au max les fonctions en utilisant les fonction analytiques d'oracle et en creant des indexes sur les champs scannés pour obtenir un plan sans full scan.

    le truc c'est que j'ai une table de plus de 5 millions d'enregistrement et donc 5 millions d'appels de ma fonction 1, 2 etc ...

    j'en ai pour en tout pour plus de 3 h de temps de refresh.

    j'ai mis a jour le plan oracle :

    analyze table CONTRAT compute statistics.

    bref je suis à cours d'idee ...

    je travail sur Oracle 9.2

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    déjà remplace ANALYZE par DBMS_STATS. Ensuite, t'as essayé sans les fonctions ? Ca prend combien de temps dans ce cas ? Tu aurais pas le code des fonctions par hasard et une trace de leur exécution ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut
    En fait sans les fonctions c'est immédiat.

    le truc c'est qu'il passe bien par le snapshot log de ma table CONTRAT mais recalcule quand meme les fonctions du coup je ne peux pas faire de refresh fast.
    Dois je faire appel à mes fonctions dans la création du snapshot log ?

    le code de mes fonctions :


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE OR REPLACE FUNCTION FXCP_PLUS_MOINS_VALUE_CONTRAT(VAL_ACQUISE_IN IN NUMBER, MT_TOT_VERSE_IN IN NUMBER,MT_ECHURAC_IN IN NUMBER ) RETURN NUMBER IS
    /******************************************************************************
       NAME:       FXCP_PLUS_MOINS_VALUE_CONTRAT
       PURPOSE:
     
       REVISIONS:
       Ver        Date        Author           Description
       ---------  ----------  ---------------  ------------------------------------
       1.0        05/07/2007          1. Created this function.
     
       NOTES: CALCUL DE LA PLUS MOINS VALUE DU CONTRAT
    ******************************************************************************/
     
       BEGIN
     
            return (NVL(VAL_ACQUISE_IN,0) - NVL(MT_TOT_VERSE_IN,0) + NVL(MT_ECHURAC_IN,0) )/( NVL(MT_TOT_VERSE_IN,0) - NVL(MT_ECHURAC_IN,0) )*100;
     
       EXCEPTION
       WHEN ZERO_DIVIDE THEN        
            RETURN(NULL);
       WHEN NO_DATA_FOUND THEN
            RETURN(NULL);
       WHEN OTHERS THEN        
    		RETURN(NULL);
       END;
    /
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    CREATE OR REPLACE FUNCTION FXCP_TX_PART_UC(IDSOUSUNIQUE IN VARCHAR2) RETURN NUMBER IS 
    /******************************************************************************
       NAME:       FXCP_TX_PART_UC
       PURPOSE:    
     
       REVISIONS:
       Ver        Date        Author           Description
       ---------  ----------  ---------------  ------------------------------------
       1.0        05/07/2007          1. Created this function.
     
       NOTES: CALCUL TAUX DE REPARTITION DU SUPPORT UC PAR RAPPORT À L'ENSEMBLE DES SUPPORTS
    ******************************************************************************/ 
    TX NUMBER;
       BEGIN
            SELECT SUM(DECODE(TYPE_SUP,'UC',NVL(MT_SUPPORT,0),0))/DECODE(SUM(NVL(MT_SUPPORT,0)),0,1,SUM(NVL(MT_SUPPORT,0)))*100 INTO TX 
            FROM TAEPREPARTSUP
            WHERE ID_SOUS_UNIQUE=IDSOUSUNIQUE; 
       RETURN(TX);
       EXCEPTION     
       WHEN NO_DATA_FOUND THEN
            DBMS_OUTPUT.PUT_LINE('LE CONTRAT '||IDSOUSUNIQUE||' A GENERE DANS LE FONCTION FXCP_TX_PART_UC - '||SQLCODE||' -ERROR- '||SQLERRM);
            RETURN(NULL);
       WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('LE CONTRAT '||IDSOUSUNIQUE||' A GENERE DANS LE FONCTION FXCP_TX_PART_UC - '||SQLCODE||' -ERROR- '||SQLERRM);
            RETURN(NULL);      
       END;         
    /

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    qu'est ce qui t'empêche de remplacer la 1° fonction par ce qu'elle fait dans la vue ?

    La 2° ne peut pas être remplacer par un traitement massif lancé à chaque refresh de la vue ou mieux, également intégré à la requête de la vue grâce aux fonctions analytiques ?

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut
    Les fonctions sont exteriorisées de la vue matérialisées pour pouvoir etre capitalisées par d'autre projet.

    le truc c'est qu'on ne fait pas toujours ce que l'on veut à son travail....

    en fait j'ai l'impression que le fait d'appeler des fonctions dans la MV empeche Oracle de faire de fast refresh...

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    bien sûr qu'Oracle peut pas faire un fast refresh... soit tu conserves les fonctions mais tu mets à jour les colonnes de manière globale après chaque refresh soit tu intégres le code des fonctions dans la vue.

    On fait pas toujours ce qu'on veut mais on a le droit de démontrer que le choix technique imposé ne convient pas à son besoin et le remettre en cause

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ORACLE 9i] Réplication via vue matérialisée
    Par had69 dans le forum Oracle
    Réponses: 3
    Dernier message: 26/10/2005, 10h47
  2. Rafraichissement vue matérialisée
    Par zach dans le forum Langage SQL
    Réponses: 17
    Dernier message: 31/08/2005, 17h49
  3. Réponses: 26
    Dernier message: 27/04/2005, 11h29
  4. Réponses: 2
    Dernier message: 06/12/2004, 14h43
  5. Fonctionnement et utilisation des vues matérialisées
    Par gOgHi dans le forum Administration
    Réponses: 7
    Dernier message: 19/10/2004, 14h29

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