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...
Voila le debat est lancé
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;
Merci a tous ceux qui veulent participer.
Ciao !
Partager