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

Administration Oracle Discussion :

Problème de TABLE ACCESS FULL


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut Problème de TABLE ACCESS FULL
    Bonjour,

    Je dois effectuer un update sur une table , et cet update est un update avec jointure, mais les temps de traitements sont super longs et je me pose des question, notamment sur ce bout de requete qui participe à la mise à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT   MAX (TO_NUMBER (fait_meteo.fm_heure)) fm_heure,
             dim_station_meteo.gm_code_gdf,
             dw.fait_meteo.dt_id
        FROM dw.fait_meteo, dw.dim_station_meteo
       WHERE ((dim_station_meteo.gm_id = fait_meteo.gm_id))
         AND dim_station_meteo.gm_code_gdf = 95
         AND fait_meteo.dt_id = 1340
    GROUP BY dim_station_meteo.gm_code_gdf, dw.fait_meteo.dt_id
    J'ai volontairement filtré sur une date ( le 1340 ) et un code ( le 95 ).
    Quand je regarde l'explain plan j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Operation	Object Name	Rows	Bytes	Cost	Object Node	In/Out	PStart	PStop
     
    SELECT STATEMENT Optimizer Mode=CHOOSE		1  	 	7  	 	      	             	 
      SORT GROUP BY NOSORT		1  	90  	7  	 	      	             	 
        NESTED LOOPS		5  	450  	7  	 	      	             	 
          TABLE ACCESS FULL	DW.DIM_STATION_METEO	1  	42  	1  	 	      	             	 
          INDEX RANGE SCAN	DW.FAIT_METEO_IN	146  	6 K	6

    On voit un TABLE ACCESS FULL, sachant que dans les indexes je n'ai que des PK sur fait_meteo.gm_id et dw.fait_meteo.fm_id ( pas de FK sur le gm_id, ni rien d'autre ) je me demande si il est normal d'avoir ce TABLE ACCESS FULL ?

    Comment remédier à ce TABLE ACCESS FULL ?

    Merci d'avance,

  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
    un index sur gm_code_gdf sera peut-être intéressant

  3. #3
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Et je peux poser un index sur la table, juste le temps de mon traitement et le retirer ensuite sans dommage pour les données ?

  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
    aucun intérêt de faire ça puisque la création d'un index est une phase très pénalisante pour les perfs

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    C'est le principe du NESTED LOOP que de fonctionner avec une boucle sur un FULL TABLE SCAN

  6. #6
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    la création d'un index est une phase très pénalisante pour les perfs
    Pourquoi donc ?

    C'est le principe du NESTED LOOP que de fonctionner avec une boucle sur un FULL TABLE SCAN
    Peut tu être plus explicite ?

    Merci d'avance

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Lorsque 2 tables sont jointe par NESTED LOOP, il y en a donc une qui boucle sur une autre. Le principe est donc de faire une TABLE ACCESS FULL sur l'une, et le résultat (chaque ligne) sert à parcourir l'autre (par INDEX SCAN).

    Le but consiste à boucler sur la plus petite table.

    Mais d'une façon générale, il faut arrêter d'envoyer le FULL TABLE SCAN au bûcher systématiquement. Il existe des tas de cas de figure ou Oracle détermine (souvent à raison) qu'il est moins goumand de faire une TABLE ACCESS FULL qu'un passage par le ou les indexes.

  8. #8
    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
    Citation Envoyé par elitost
    la création d'un index est une phase très pénalisante pour les perfs
    Pourquoi donc ?
    Parce qu'Oracle est obligé de parcourir toute la table pour écrire l'index, c'est donc complétement absurde de faire cette opération pour éviter un full scan

  9. #9
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Mais, est il possible de :
    1) Créer le ou les indexes sur la table ( même si ça prend du temps )
    2) Executer ma requete dans un contexte amélioré ( par le ou les indexes )
    3) Supprimer le ou les indexes et le tout sans altérations pour les données de la ou les table(s) impactée(s) ????

    Le but consiste à boucler sur la plus petite table.
    Cela sous entend il qu'il faut optimiser ses requêtes dans leur ecriture ? Comme par exemple dans les jointures, placer la plus petite table avant l'autre ?

    Remerci d'avance

  10. #10
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    Citation Envoyé par elitost
    Cela sous entend il qu'il faut optimiser ses requêtes dans leur ecriture ? Comme par exemple dans les jointures, placer la plus petite table avant l'autre ?
    tout dépend du mode d'optimisation utilisé par ta base de données... si elle est en mode RULE alors oui tu dois optimiser l'écriture de la requête, en mode CHOOSE, l'optimiseur s'en sort (devrait s'en sortir) tout seul...

    mais au vu de ton premier Post, ta base est en mode CHOOSE...

  11. #11
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Comment savoir en quel mode est ma base ?

  12. #12
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    c'est marqué sur l'explain plan que tu as mis sur ton premier Post...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT STATEMENT Optimizer Mode=CHOOSE
    sinon ça doit être visible dans une vue système, mais je ne sais plus laquelle et je ne peux pas tester pour le moment... désolé...

    mais il me semble que ça doit être v$instance ou bien v$database (à vérifier)

  13. #13
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    ok, merci.

    Donc si j'ai bien compris, on peut forcer une optimisation, mais si on choisit la mauvaise on peut plomber la requête ?

  14. #14
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    exact...
    mais tu as le choix de spécifier le mode d'optimisation pour toute la base dans le fichier init.ora, paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OPTIMIZER_MODE=CHOOSE ou RULE
    et s'il n'est pas renseigné explicitement alors ta base est en mode CHOOSE.

    l'autre solution consiste à laisser ta base dans un mode spécifique mais à "forcer" certaines requêtes à utiliser l'autre mode, pour le cas où elles auraient été écrites spécifiquement pour l'autre mode... tu peux faire ça avec les hints
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     /*+ CHOOSE */  ou bien /*+ RULE */
    ceci dit le mode RULE est un mode quasiment obsolète qui est appelé à disparaitre complètement dans la version 10g de Oracle...

  15. #15
    Membre Expert
    Avatar de elitost
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2003
    Messages
    1 985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 985
    Par défaut
    Ok, merci pour vos aides !!!

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

Discussions similaires

  1. Suppression d'un TABLE ACCESS FULL
    Par _-Sky-_ dans le forum Optimisations
    Réponses: 8
    Dernier message: 12/12/2008, 09h29
  2. [XMLTYPE] - Index - TABLE ACCESS FULL
    Par jacquesh dans le forum SQL
    Réponses: 10
    Dernier message: 16/01/2008, 22h51
  3. [9i] Eviter un table access full via une vue
    Par Débéa dans le forum SQL
    Réponses: 10
    Dernier message: 25/10/2006, 23h09
  4. Problème exportation table Access dans Excel
    Par Thiazung dans le forum Access
    Réponses: 5
    Dernier message: 02/10/2006, 17h12
  5. Optimisation de requette TABLE ACCESS (FULL)
    Par e77em dans le forum Oracle
    Réponses: 10
    Dernier message: 16/09/2005, 11h39

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