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 :

Question sur les plans d'exec


Sujet :

Administration Oracle

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 727
    Points : 261
    Points
    261
    Par défaut Question sur les plans d'exec
    Bonjour,

    Je cherche la procédure à suivre pour détecter si une requête a changé de plan d'exécution ? et comment à faire pour fixer l'ancien plan?

    MERCI.

    A+

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Quelle est la version de ta base ?
    Edition Standard ou Entreprise ?
    As-tu le Diagnostic Pack?

    Avec les réponses à ces questions, on pourra mieux t'aider.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 727
    Points : 261
    Points
    261
    Par défaut
    Bonjour,

    Merci de retour.

    EE (édition entreprise) sans pack diag.

    A+

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Désolé de te dire ça, mais tu es dans le caca

    Sans Diagnostic Pack pas de AWR et, sans AWR, pas d'historique de tes plans d'exécution dans les vues DBA_HIST***

    Une piste serait alors de créer un job qui, toutes les X minutes, va récupérer le plan de ton ordre (avec le bon sql_id) et le stocke dans une table que tu as créée : comme ça, pas de purge de ta table : tu auras les plans sur plusieurs jours.

    J'exécute mon ordre posant pb, de sql_id 9420hwvnq6jsj.
    Je crée ma table qui va stocker les plans d'exécution. On voit qu'elle a une seule colonne. Attention : seulement 4 000 caractères.
    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
    CREATE TABLE SYSTEM.ZZ_TAB_EXPORT_PLAN AS SELECT * FROM TABLE(DBMS_XPLAN.display_cursor(sql_id=>'9420hwvnq6jsj',format=>'ALLSTATS LAST +cost +bytes +outline +peeked_binds'));
     
     
    SQL> desc SYSTEM.ZZ_TAB_EXPORT_PLAN
     Name												       Null?	Type
     ----------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------
     PLAN_TABLE_OUTPUT												VARCHAR2(4000)
     
     
    SQL> select * from SYSTEM.ZZ_TAB_EXPORT_PLAN;
    PLAN_TABLE_OUTPUT
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID	9420hwvnq6jsj, child number 0
    -------------------------------------
    select D.DEPARTMENT_NAME, E.DEPARTMENT_ID, E.FIRST_NAME, E.LAST_NAME,
    E.EMPLOYEE_ID from employees E, departments D where E.DEPARTMENT_ID =
    D.DEPARTMENT_ID AND (D.DEPARTMENT_ID = 50 OR D.DEPARTMENT_ID = 80)
    order by D.DEPARTMENT_NAME, E.FIRST_NAME, E.LAST_NAME
     
    Plan hash value: 2480766633
    ...

    C'est là où ça coince, je n'ai pas réussi à créer le job et, aïe, je n'ai pas de message d'Oracle disant où est le pb... Je te laisse débugger cela...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    BEGIN
      DBMS_SCHEDULER.create_job (
        job_name        => 'ZZ_Export_Plan_Ex_9420hwvnq6jsj',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'BEGIN INSERT INTO SYS.ZZ_TAB_EXPORT_PLAN SELECT * FROM TABLE(DBMS_XPLAN.display_cursor(sql_id=>''9420hwvnq6jsj'',format=>''ALLSTATS LAST +cost +bytes +outline +peeked_binds''));END;',
    start_date      => '04-JUL-2022 10:00:00 AM',
    repeat_interval => 'FREQ=HOURLY; BYHOUR=4,5; BYMINUTE=00,10,20,30,40,50',
       end_date        => '04-JUL-2022 11:00:00 PM',
        enabled         => TRUE,
        comments        => 'Generation Plan Execution Export 9420hwvnq6jsj');
    end;
    /
    Il faudra que tu revois les parties start_date, repeat_interval, end_date.

    Je pense que cette piste n'est pas bête, il faut juste réussir à créer le job

    Ensuite, pour forcer un plan d'exécution, il faut passer par les Baselines ou les Stored Outlines (deprecated depuis la 11 je crois) : à voir s'il ne faut pas le SQL Tuning Pack pour cela.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 727
    Points : 261
    Points
    261
    Par défaut
    Merci de retour.



    Si non comment procéder avec AWR que j'ai su un autre périmètre.

    MERCI.

    A+

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    La vue DBA_HIST_SQL_PLAN devrait faire l'affaire car on y trouve les colonnes SQL_ID et PLAN_HASH_VALUE.
    Si pour ton sql_id tu as plusieurs plans, cela se verra dans cette vue; attention, il faut que l'ordre SQL se retrouve, bien évidemment, dans les snapshots AWR : en clair, il doit consommer suffisamment de ressources pour être considéré comme un "gros" ordre SQL.

    Pour les baselines : https://blogs.oracle.com/connect/pos...d-better-plans
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

Discussions similaires

  1. [12c] Question sur les plans
    Par agdid04 dans le forum Administration
    Réponses: 7
    Dernier message: 22/03/2021, 17h57
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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