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 :

Etude cycle de vie SQL


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut Etude cycle de vie SQL
    Bonjour a tous

    Oracle 11gr2, solaris 10

    Je suis en train de creer un tool de detection de requêtes SQL, plus precisement de detection de changement de profile d'une requête SQL.
    Ceci n'est pas un post avec une question que je n'arrive pas a resoudre, mais plutôt une etude qui je crois peux être profitable pour tous.
    Donc tous ceux qui veulent participer...sont les bien venus.
    La premiere info c'est que j'ai creer un repository AWR dans une de nos base 11g. Tous les jours nous exportons les snap_id de toute une journée en format dmp et le fichier et ensuite importé dans le repository awr.
    Ici le link avec les explicactions que j'ai utiliser: http://www.pythian.com/blog/awr-extract-and-load/

    Donc j'ai le repository... cool
    Maintenant je veux comparer 2 franges de dates pour savoir si apres une release, il existe de nouvelles requêtes sql, et voici comment je fais cette recherche:
    Je croise dba_hist_snapshot (pour definir les dates) avec sba_hist_sqlstat pour avoir les sql_id et ensuite d'autres infos comme exec, disk reads.. consistent ets etc.
    et je crois aussi dba_hist_active_sess_history pour filtrer par user_id car je ne veux pas recuperer les sql que genere Oracle, seulement les sql de mes utilisateurs de l'appication.
    La premiere requête je crois fonctionne bien, peu être l'un de vous a deja travailler la dessus et le fait diferement. Par exemple je me demandais si ça serait pas mieux de croiser avec plan:hash_value au lieu de sql_id...
    Car une même requête avec bind variable peu generer un sql_id diferent selon les literals qui lui arrive...

    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
     
    set timing on 
     select
        ss.sql_id 
     from dba_hist_sqlstat ss
     inner join DBA_HIST_SNAPSHOT dhs ON dhs.dbid=ss.dbid and ss.snap_id=dhs.snap_id
     inner join dba_hist_active_sess_history dhas ON dhas.SQL_ID=ss.SQL_ID       
     where dhs.begin_interval_time > to_date('20141027 06:00:00','YYYYMMDD HH24:MI:SS')
     and dhs.begin_interval_time < to_date('20141027 19:16:00','YYYYMMDD HH24:MI:SS')
     and dhs.dbid=3765810940
     and dhas.USER_ID in (2772,2716,2333,2420,2709,2425,2418,2600,2704,2383)
     and ss.sql_id not in(
     select
         ss.sql_id
     from dba_hist_sqlstat ss
     inner join DBA_HIST_SNAPSHOT dhs ON dhs.dbid=ss.dbid and ss.snap_id=dhs.snap_id
     inner join dba_hist_active_sess_history dhas ON dhas.SQL_ID=ss.SQL_ID       
     where dhs.begin_interval_time > to_date('20141020 06:00:00','YYYYMMDD HH24:MI:SS')
     and dhs.begin_interval_time < to_date('20141020 19:16:00','YYYYMMDD HH24:MI:SS')
     and dhs.dbid=3765810940)
     and dhas.USER_ID in (2772,2716,2333,2420,2709,2425,2418,2600,2704,2383)
     group by ss.sql_id;
    Voila le debat est lancé
    Merci a tous ceux qui veulent participer.

    Ciao !

  2. #2
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Points : 289
    Points
    289
    Par défaut
    Bonjour a tous,
    j'ai trouvé un champs dans las table dba_hist_sqlstat qui permet de filter par schema, au lieu de faire ce join:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    inner join dba_hist_active_sess_history dhas ON dhas.SQL_ID=ss.SQL_ID
    La nouvelle formule est:

    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
     
     select
        ss.sql_id, hsp.OBJECT_NAME
     from dba_hist_sqlstat ss
     inner join DBA_HIST_SNAPSHOT dhs ON dhs.dbid=ss.dbid and ss.snap_id=dhs.snap_id
     inner join DBA_HIST_SQL_PLAN hsp ON hsp.dbid=ss.dbid and hsp.PLAN_HASH_VALUE=ss.PLAN_HASH_VALUE
     where dhs.begin_interval_time > to_date('20141020 06:00:00','YYYYMMDD HH24:MI:SS')
     and dhs.begin_interval_time < to_date('20141020 07:16:00','YYYYMMDD HH24:MI:SS')
     and dhs.dbid=3765810940
     and ss.PARSING_SCHEMA_ID in (2772,2716,2333,2420,2709,2425,2418,2600,2704,2383)
     and hsp.OBJECT_TYPE='TABLE' 
     and ss.sql_id not in(
     select
         ss.sql_id
     from dba_hist_sqlstat ss
     inner join DBA_HIST_SNAPSHOT dhs ON dhs.dbid=ss.dbid and ss.snap_id=dhs.snap_id
     inner join DBA_HIST_SQL_PLAN hsp ON hsp.dbid=ss.dbid and hsp.sql_id=ss.sql_id
     where dhs.begin_interval_time > to_date('20141027 06:00:00','YYYYMMDD HH24:MI:SS')
     and dhs.begin_interval_time < to_date('20141027 07:16:00','YYYYMMDD HH24:MI:SS')
     and dhs.dbid=3765810940)
     and ss.PARSING_SCHEMA_ID in (2772,2716,2333,2420,2709,2425,2418,2600,2704,2383)
     group by ss.sql_id,hsp.OBJECT_NAME;
    J'ai ajouté un join avec DBA_HIST_SQL_PLAN car j'ai trouvé interessant de savoir la table utilisée dans la requête, dans notre cas tout du moins car les tables ont des nom qui permettent d'associer avec les equipes de developpement.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/04/2015, 13h46
  2. Model de cycle de vie d'un logiciel
    Par apt dans le forum Méthodes
    Réponses: 4
    Dernier message: 29/10/2014, 23h54
  3. Réponses: 7
    Dernier message: 08/03/2007, 09h23
  4. Réponses: 6
    Dernier message: 07/03/2007, 09h32
  5. [EJB Stateful] [Cycle de vie] methode remove()
    Par anitshka dans le forum Java EE
    Réponses: 3
    Dernier message: 05/12/2006, 17h31

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