Oracle
 sql >> Base de données >  >> RDS >> Oracle

Trace SQL, événement 10046 dans Oracle :trcsess, utilitaire tkprof

Le traçage est une partie importante du réglage de la base de données Oracle. Cela aidera à capturer toutes les déclarations de problème, les événements d'attente qui sont responsables du fonctionnement lent de la session.
La base de données Oracle a fourni de nombreux moyens les plus rapides pour tracer la session locale, une autre session utilisateur   et formater la trace pour la rendre lisible

Voyons comment activer la trace SQL, événement 10046 dans la base de données Oracle et trcsess, utilitaire tkprof

Table des matières

  • Événement SQL Trace ,100046
  • Comment identifier les fichiers Trace
  • comment vérifier si la trace est activée dans oracle
  • Utilitaire Oracle tkprof
  • Utilitaire Oracle trcsess

Trace SQL, événement 100046

Si vous souhaitez tracer en session locale, voici les étapes pour activer la trace SQL 

Tracé normal modifier la session définie sql_trace =true ; -- Pour placer la trace sur une autre session, définissez sql_trace =false ; -- Pour désactiver la traceNiveau complet avec événement d'attente et liaison de trace alter session set events ='10046 trace name context forever, level 12';Pour désactiver le traçage, session set events ='10046 trace name context off';Identique à la trace normale exec DBMS_SESSION.set_sql_trace(sql_trace => TRUE);exec DBMS_SESSION.set_sql_trace(sql_trace => FALSE);

Si vous souhaitez tracer dans une autre session en cours d'exécution, voici les étapes

Tracé normal exécutez dbms_system.set_sql_trace_in_session ('sid','serial',true); -- Pour mettre le traçage onexecute dbms_system.set_sql_trace_in_session ('sid','serial',true); -- Pour désactiver le traçageNiveau complet avec événement d'attente et trace de liaison exécutez dbms_system.set_ev(‘sid’,’serial’,10046,12,’’);Pour désactiver la trace exécutez dbms_system.set_ev(‘sid’,’serial’,10046,0,’’);

Vous devez avoir vu l'utilisation de 12,0 dans diverses instructions ci-dessus. Ce sont des niveaux de traçage. Oracle Tracing a des niveaux de traçage. Voici les valeurs valides

0 Aucune trace. Comme désactiver sql_trace.
2 L'équivalent de sql_trace standard
Il fournit le chemin d'exécution, le nombre de lignes, le plus petit fichier plat
Avantages
Fournit le chemin d'exécution
Fournit le nombre de lignes
Produit le plus petit fichier plat
Inconvénients
Impossible de dire quelles valeurs ont été fournies au moment de l'exécution à SQL
Si les statistiques de la requête sont faibles mais que le temps d'exécution est long, impossible de dire quels événements ont causé la longue attente
4 Identique à 2, mais avec l'ajout de valeurs de variables liées
Avantages
Fournit le chemin d'exécution
Fournit le nombre de lignes
Peut dire pour quelles valeurs l'instruction a été exécutée
Inconvénients
Encore une fois, si le temps d'exécution est long et les statistiques faibles, il sera difficile de dire pourquoi dans ce type de trace.
Produit un fichier plat plus volumineux que la trace normale car les informations de variable de liaison doivent être stockées.
8 Identique à 2, mais avec l'ajout d'événements d'attente
Regular Trace plus les délais d'opération de base de données que le SQL a attendu d'avoir effectués pour se terminer. Par exemple :les horaires d'accès au disque.
Avantages
Fournit le chemin d'exécution
Fournit le nombre de lignes
Peut indiquer les horaires de tous les événements associés à SQL.
Inconvénients
Le fichier de trace peut facilement atteindre son maximum en raison de toutes les informations qu'Oracle doit écrire dans le fichier de trace et seules des informations partielles sont disponibles dans le fichier de trace.
Les informations de variable de liaison ne sont pas disponibles
12 Identique à 2, mais avec à la fois des valeurs de variable de liaison et des événements d'attente
Traçage régulier avec les informations d'attente et de liaison. Contient les informations les plus complètes et produira le fichier de trace le plus volumineux.
Fournit le chemin d'exécution
Fournit le nombre de lignes
Peut indiquer la durée de tous les événements associés à SQL.
Peut indiquer les valeurs du SQL a été exécuté avec
Avantages
Fournit le chemin d'exécution
Fournit le nombre de lignes
Peut indiquer les horaires de tous les événements associés à SQL.
Peut indiquer avec quelles valeurs le SQL a été exécuté
Inconvénients
Le fichier de trace peut facilement atteindre son maximum en raison de toutes les informations qu'Oracle doit écrire dans le fichier de trace et seules des informations partielles sont disponibles dans le fichier de trace.

Il existe également d'autres façons de faire le traçage. En voici quelques-uns
(1) ORADEBUG
Cela nécessite une connexion en tant que sysdba

oradebug setospid   1111   -- Session de débogage avec le processus Oracle spécifié idoradebug setorapid  1111  --- Session de débogage avec le contexte de nom de trace de l'événement processoradebug du système d'exploitation spécifié pour toujours, niveau 4 ; événement oradebug 10046 contexte de nom de trace désactivé ; --- Cela désactive le traceoradebug close_trace  --- Cela ferme le fichier de traceOradebug TRACEFILE_NAME ;

(2) Avec Oracle 10g, les options de traçage SQL ont été étendues à l'aide du package DBMS_MONITOR

EXECUTE dbms_monitor.session_trace_enableQui est similaireALTER SESSION SET EVENTS '10046 contexte de nom de trace pour toujours, niveau 2';EXECUTE dbms_monitor.session_trace_enable (binds=>true);Qui est similaireALTER SESSION SET EVENTS '10046 contexte de nom de trace pour toujours, niveau 4';EXECUTE dbms_monitor.session_trace_enable (waits=>true);Qui est similaireALTER SESSION SET EVENTS '10046 trace name context forever, level 8';EXECUTE dbms_monitor.session_trace_enable('sid','serial#')Qui est similaireexecute dbms_system.set_ev( 'sid','serial',10046,2,'');EXECUTE dbms_monitor.session_trace_enable ('sid','serial#',binds=>true);Qui est similaireexecute dbms_system.set_ev('sid','serial' ,10046,4,'');EXECUTE dbms_monitor.session_trace_enable ('sid','serial#',waits=>true);Qui est similaireexecute dbms_system.set_ev('sid','serial',10046,8,'' );

Il existe de nombreuses autres fonctionnalités disponibles dans dbms_monitor. Nous pouvons activer la trace en fonction de l'identifiant du client et de plusieurs façons

Comment identifier les fichiers Trace

Nous pouvons identifier les fichiers de trace en utilisant le spid de la session. De plus, le fichier de trace contiendra la paire sid,serial#  au début du fichier de trace.
La requête ci-dessous peut être utilisée pour trouver le fichier de trace de la session locale

select c.value || '/' || d.nom_instance ||'_ora_' || a.spid || '.trc' tracefrom v$process a, v$session b, v$parameter c, v$instance dwhere a.addr =b.paddrand b.audsid =userenv('sessionid')and c.name ='user_dump_dest'/ 

Il existe un autre moyen simple d'identifier le fichier de suivi, appelé identifiant de suivi.

alter session set tracefile_identifer=’ORAC’ ; Ceci est l'identifiant

Exemple de fichier de suivi

Fichier de trace /app/oracle/TEST/diag/rdbms/test/TEST/trace/TEST_ora_13025_IDEN.trcOracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, Real Application Clusters, OLAP, Data Mining and Options de test d'application réelleORACLE_HOME =/app/oracle/TEST/11.2.0/dbSystem name :    SunOS12Node name :sun12Release :   5.10Version :   Generic_144488-11Machine :   sun4uInstance name :TESTRedo thread monté par cette instance :1Oracle process number :202Unix process pid :13025 , image :[email protected] SunOS12*** 2013-10-21 12:28:56.461*** ID DE SESSION :(3875.17341) 2013-10-21 12:28:56.461*** ID CLIENT :() 2013 -10-21 12:28:56.461*** NOM DU SERVICE :(TEST) 2013-10-21 12:28:56.461*** NOM DU MODULE :([email protected](TNS V1-V3)) 2013-10 -21 12:28:56.461*** NOM DE L'ACTION :() 2013-10-21 12:28:56.461CLOSE #4:c=0,e=11,dep=1,type=1,tim=8866891135825=====================ANALYSE DANS LE CURSEUR #5 len=356 dep=1 uid=173 oct=3 lid=173 tim=8866891136821 hv=2468783182 ad='4c70e4398' sqlid='0wmwsjy9kd92f'SELECT PROFILE_OPTION_ID, APPLICATION_ID, SITE_ENABLED_FLAG , APP_ENABLED_FLAG , RESP_ENABLED_FLAG , USER_ENABLED_FLAG, ORG_ENABLED_FLAG , SERVER_ENABLED_FLAG, SERVERRESP_ENABLED_FLAG, HIERARCHY_TYPE, USER_CHANGEABLE_FLAG FROM FND_PROFILE_OPTIONS WHERE PROFILE_OPTION_NAME =:B1 AND START_DATE_ACTIVE <=SYSDATE AND NVL(END_DATE_ACTIVE, SYSDATE)>=SYSDATEEND OF STMTBINDS # 5 :Bind#0oacdty=01 mxl=128(80) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=01 csi=871 siz=128 off=0kxsbbbfp=ffffffff7d677b48  bln=128  avl=21 flg=0value="PER_BUSINESS_GROUP_ID"EXEC #5:c=0,e=1474,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=1374985481 ,tim=8866891138224FETCH #5:c=0,e=61,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=1,plh=1374985481,tim=8866891138429CLOSE #5:c=0,e=5,dep=1,type=3,tim=8866891138503=====================ANALYSE DANS LE CURSEUR #4 len=230 dep=1 uid=173 oct=3 lid=173 tim=8866891138634 hv=3575592451 ad='3aeea3da0' sqlid='55dc767ajydh3'SELECT PROFILE_OPTION_VALUE FROM FND_PROFILE_OPTION_VALUES WH ERE PROFILE_OPTION_ID =:B4 AND APPLICATION_ID =:B3 AND LEVEL_ID =10003 AND LEVEL_VALUE =:B2 AND LEVEL_VALUE_APPLICATION_ID =:B1 AND PROFILE_OPTION_VALUE N'EST PAS NULLEND OF STMTBINDS #4:Bind#0oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=96 off=0kxsbbbfp=ffffffff7d677b68  bln=22  avl=03  flg=05value=1204Bind#1oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=24kxsbbbfp=ffffffff7d677b80  bln=22  avl=02  flg=01value=800Bind#2oacdty=02 mxl=22(21) mxlc =00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=48kxsbbbfp=ffffffff7d677b98  bln=22  avl=04  flg=01value=50334Bind#3oacdty=02 mxl=22(21 ) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=72kxsbbbfp=ffffffff7d677bb0  bln=22  avl=01  flg=01value=0EXEC #4:c=0, e=377,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=1,plh=2802907561,tim=8866891138978FETCH #4:c=0,e=26, p=0,cr=3,cu=0,mis=0,r=0,dep=1,og=1,plh=2802907561,tim=886689113 9050CLOSE #4:c=0,e=2,dep=1,type=3,tim=8866891139116=====================ANALYSE DANS LE CURSEUR #5 len =191 dep=1 uid=173 oct=3 lid=173 tim=8866891139308 hv=303338305 ad='3bedf0e48' sqlid='7qs7fx89194u1'SELECT PROFILE_OPTION_VALUE FROM FND_PROFILE_OPTION_VALUES WHERE PROFILE_OPTION_ID =:B4 AND APPLICATION_ID =:B2 AND LEVEL_ID =:B3 :AND LEVEL_ID =LEVEL_VALUE = :B1 ET PROFILE_OPTION_VALUE N'EST PAS NULLEND OF STMTBINDS #5 :Bind#0oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=96 off=0kxsbbbfp=ffffffff7d673b78  bln=22  avl=03  flg=05value=1204Bind#1oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=24kxsbbbfp=ffffffff7d673b90  bln=22  avl=02  flg=01value=800Bind#2oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi =00 siz=0 off=48kxsbbbfp=ffffffff7d673ba8  bln=22  avl=04  flg=01value=10001

comment vérifier si la trace est activée dans oracle

Si vous avez activé le traçage à l'aide du package DBMS_MONITOR, nous pouvons vérifier si le traçage est activé à l'aide de la requête ci-dessous

set lines 180col module for a45col sql_trace_waits for a20col sql_trace_binds for a20col sql_trace for a20select username,module,sid,sql_trace,sql_trace_waits,sql_trace_binds from v$session where sql_trace='ENABLED'/

S'il est activé par d'autres méthodes, la seule façon de vérifier est de regarder l'emplacement de la trace et de trouver les fichiers de trace récents, puis de trouver le sid et le numéro de série, puis vous pouvez interroger v $ session pour trouver le session et vous pouvez désactiver la trace si vous le souhaitez

Utilitaire Oracle tkprof

Les fichiers de trace obtenus à partir de la méthode ci-dessus sont sous forme brute et peuvent être convertis dans un format plus lisible à l'aide de l'utilitaire tkprof (utilitaire Transient Kernel PROFile)

tkprofUsage :tkprof tracefile outputfile [explain=] [table=][print=] [insert=] [sys=] [sort=]table=schema.tablename   Utilisez 'schema.tablename' avec l'option 'explain='. expliquer=utilisateur/mot de passe    Connectez-vous à ORACLE et lancez EXPLAIN PLAN.print=integer    Répertorier uniquement les premières instructions SQL "entières". instructions exécutées en tant qu'utilisateur SYS.record=filename  Enregistre les instructions non récursives trouvées dans le fichier de trace.waits=yes|no     Enregistre le résumé de tous les événements d'attente trouvés dans le fichier de trace.sort=option      Ensemble de zéro ou plusieurs des options de tri suivantes :prscnt nombre de fois que l'analyse a été appeléeprscpu Temps CPU parsingprsela temps écoulé d'analyse    prsdsk nombre de lectures de disque pendant l'analyse prsqry nombre de tampons pour une lecture cohérente pendant l'analyse parseprscu   nombre de tampons pour la lecture actuelle pendant l'analyse prseprsmis nombre d'échecs dans le cache de la bibliothèque pendant l'analyse parseexecnt nombre d'ex ecute s'appelait execpu  Temps CPU passé à exécuter exeela  Temps écoulé à exécuter exedsk  Nombre de lectures de disque pendant l'exécution exeqry  Nombre de tampons pour une lecture cohérente pendant l'exécutionexecu    Nombre de tampons pour la lecture en cours pendant l'exécutionexerow  Nombre de lignes traitées pendant l'exécutionexemis  Nombre de caches de bibliothèque manquants pendant l'exécution fchcnt  Nombre nombre de fois où l'extraction a été appeléefchcpu temps CPU passé à récupérerfchela temps écoulé fetchingfchdsk nombre de lectures de disque pendant fetchfchqry nombre de tampons pour une lecture cohérente pendant fetchfchcu  nombre de tampons pour la lecture actuelle pendant fetchfchrow nombre de lignes extraitesuserid ID utilisateur de l'utilisateur qui a analysé le curseur

Quelques exemples

tkprof file.trc file.txt sys=no expliquer=ID utilisateur/mot de passe sort=prsela,exeela,fchelatkprof fichier.trc fichier.txt  sys=no expliquer=ID utilisateur/mot de passe sort=prsela,exeela,fchelatkprof fichier.trc fichier .txt sys=notkprof file.trc file.txt sys=no expliquer=ID utilisateur/mot de passe sort=prsela,exeela,fchelaCette impression 10 sql uniquement tkprof .trc elaps.prf sys=no expliquer=apps/ sort=(prsela,exeela,fchela) print=10Ceci imprime tout le sql tkprof .trc elaps.prf sys=non expliquer=apps/apps sort=prsela,exeela,fchela

Exemple de contenu du fichier tkprof

TKPROF :Version 11.2.0.4.0 - Production le Mar 17 janvier 14:12:41 2013Copyright (c) 1982, 2007, Oracle. Tous droits réservés.Fichier de trace :TEST_ora_15941.trcOptions de tri :execpu fchcpu************************************ ********************************************comptage    =nombre de fois OCI la procédure a été exécutéeCPU                                                                                    (/                               | traité par l'appel d'extraction ou d'exécution******************************************* *************************************ID SQL :6w82ggrtysxPlan de hachage :2325776775SELECT FUNCTION_NAME    FROM FND_USER_DESKTOP_OBJECTS  WHERE USER_ID =:b1  AND APPLICATION_ID =:b2  AND   RESPONSIBILITY_ID =:b3  AND TYPE ='FUNCTION'   AND ROWNUM <=10 ORDER BY SEQUENCEcall     count       cpu    durée       disk      query    current        rows------- ------  ------ ---- ---------- ---------- ---------- ---------- ---------- Parse 1 0,00 0,00 0 0 0 0 EXECUTE 1 0,00 0,00 0 0 0 0 Fetch 2 0,00 0,00 0 4 0 1 ------- ------ ----- --- ---------- ---------- ---------- ----------  ------- ---total        4      0,00       0,00          0          4          0           1 Manque dans le cache de la bibliothèque pendant l'analyse :0 Mode d'optimisation :ALL_ROWSParsing user id :173  (APPS) --------- ---------- ----------  --------------------- ------------------------------1          1          1  SORT ORDER BY (cr=4 pr=0 pw=0 time=0 us cost=6 size=41 card=1)1          1          1   COUNT STOPKEY (cr=4 pr=0 pw=0 time=0 us)1          1          1    TABLE ACCESS BY INDEX ROWID FND_USER_DESKTOP_OBJECTS (cr=4 pr=0 pw=0 time =0 coût us=5 taille=41 carte=1)1          1          1     PLAGE D'INDICE S CAN FND_USER_DESKTOP_OBJECTS_N1 (cr=3 pr=0 pw=0 time=0 us cost=3 size=0 card=3)(object id 33596)Lignes     Plan d'exécution-------  --------- ------------------------------------------0  SÉLECTIONNER L'INSCRIPTION   MODE :ALL_ROWS1   SORT ( ORDER BY)1    COUNT (STOPKEY)1     TABLE ACCESS   MODE :ANALYSED (BY INDEX ROWID) OF'FND_USER_DESKTOP_OBJECTS' (TABLE)1      INDEX   MODE :ANALYSED (RANGE SCAN) OF'FND_USER_DESKTOP_OBJECTS_N1' (INDEX)Les temps écoulés incluent l'attente des événements suivants :Événement attendu le                             Fois   Max. Attendre  Total Attendu----------------------------------------   Attendu  ------ ----  ------------ Message SQL*Net au client                      5        0,00          0,00Message SQL*Net du client                     5        0,00          0,00**************** ****************************************************** **************ID SQL :276ut2ywquxPlan Hash :3856112528select object_name, icon_namefromfnd_desktop_objectscall     count       cpu    écoulé       disk      query    current        rows------- ------  ------ -- ---------- ---------- ---------- ----------  -------- - Parse 1 0,00 0,00 0 0 0 0 EXECUTE 1 0,00 0,00 0 0 0 0 Fetch 3 0,00 0,00 0 6 0 47 ------- ------ -------- ----- ----- ---------- ---------- ----------  ----------total        5      0,00       0,00          0 6          0          47Manques dans le cache de la bibliothèque d uring parse :0Optimizer mode :ALL_ROWSParsing user id :173  (APPS)Nombre de statistiques de plan capturées :1Rows (1st) Rows (avg) Rows (max)  Row Source Operation---------- ----- ----- ----------  ----------------------------------- ----------------47         47         47  ACCÈS À LA TABLE FULL FND_DESKTOP_OBJECTS (cr=6 pr=0 pw=0 time=0 us cost=2 size=1175 card=47)Lignes     Plan d'exécution -------  ------------------------------------------- --------0 SELECT STATEMENT  MODE :ALL_ROWS47   TABLE ACCESS  MODE :ANALYSED (FULL) OF 'FND_DESKTOP_OBJECTS'(TABLE)

Oracle trcses utilitaire

Lors de l'utilisation de sessions de serveur partagées, de nombreux processus sont impliqués. La trace relative à la session utilisateur est dispersée dans différents fichiers de trace appartenant à différents processus. Il est donc difficile d'obtenir une image complète du cycle de vie d'une session.
L'utilitaire trcsess consolide la sortie de trace des fichiers de trace sélectionnés en fonction de plusieurs critères

trcsess  [output=output_file_name] [session=session_id] [clientid=client_id] [service=service_name] [action=action_name] [module=module_name] [trace_files]trcsess output=main.trc service=TEST  *trc  

Une fois le fichier de trace de consolidation généré, vous pouvez exécuter tkprof dessus.

Plus d'informations

Dans 11g et supérieur, sql_trace est également un événement et peut être défini avec la syntaxe de l'événement :

SQL> oradebug doc event name sql_tracesql_trace :événement pour sql traceUsage-------sql_tracewait , lier ,plan_stat ,niveau 

Vous pouvez donc l'utiliser comme suit pour activer SQL_TRACE demandant des informations de liaison :

modifier les événements d'ensemble de session 'sql_trace bind=true' ;

ou lier et attendre les informations (notez séparées par des virgules) :

modifier les événements d'ensemble de session 'sql_trace bind=true, wait=true' ;

Une trace supplémentaire peut être limitée à un ensemble de SQL_ID si vous incluez un filtre pour celui-ci. Par exemple

modifier les événements d'ensemble de session 'sql_trace [sql :sql_id=g3yc1js3g2689 | sql_id=7ujay4u33g337]bind=true, wait=true';

10046 niveaux EVENT :(les nouvelles valeurs sql_trace sont incluses dans [..])
Il s'agit de valeurs binaires qui peuvent donc être assemblées pour obtenir différents mélanges
1 – Activer la fonctionnalité SQL_TRACE standard (par défaut)
4 – En tant que valeurs de liaison de suivi de niveau 1 PLUS [ bind=true ]
8 – En tant qu'attente de trace de niveau 1 PLUS [wait=true]
Ceci est particulièrement utile pour repérer l'attente du verrou, etc.
mais peut également être utilisé pour repérer les balayages de table complets et les balayages d'index.

À partir de la version 11g, ces niveaux de bits supplémentaires sont disponibles :
16 – Générer des vidages de ligne STAT pour chaque exécution [ plan_stat=all_executions ]
32 – Ne jamais vider les statistiques d'exécution [ plan_stat=never ]

Depuis la version 11.2.0.2, ce niveau de bits supplémentaire est disponible :
64 – Vidage adaptatif des lignes STAT. [ plan_stat=adaptive ]
Cela vide les informations STAT si un SQL a pris plus d'environ 1 minute,
donnant ainsi des informations pour les SQL les plus coûteux et pour différentes exécutions de ces
SQL.

Par exemple :un niveau d'événement courant est 12, qui inclut la sortie SQL_TRACE standard, les liaisons, les attentes et
le suivi de ligne STAT par défaut.

Remarques :
Le vidage STAT a été modifié dans la version 11g afin qu'il ne soit pas agrégé pour toutes les exécutions, mais qu'il soit vidé après l'exécution. Cela a été fait pour traiter les cas où le curseur n'est pas fermé et les informations STAT ne sont donc pas vidées.
Maintenant, nous garantissons la capture des informations STAT après l'exécution. Voir les niveaux de bits ci-dessus pour avoir un contrôle plus précis sur les lignes STAT.

Lit également
v$active_session_history
expliquer le plan dans Oracle
sql tuning Advisor