sql >> Database teknologi >  >> RDS >> Oracle

SQL-sporing, 10046 hændelse i Oracle:trcsess, tkprof-værktøj

Sporing er en vigtig del af Oracle-databasetuning. Dette vil hjælpe med at indfange alle de problemformuleringer , vent-hændelser, som er ansvarlige for langsom afvikling af sessionen.
Oracle-databasen har givet mange hurtigste måder at spore den lokale session, anden brugersession   og formatere sporingen for at gøre den læsbar

Lad os se lidt på, hvordan du aktiverer SQL-sporing, 10046 hændelse i Oracle-databasen og trcsess, tkprof-værktøjet

Indholdsfortegnelse

SQL Trace ,100046 hændelse

Hvis du vil spore i lokal session, er her trinene til at aktivere SQL-sporing 

Normal sporing alter session set sql_trace =true; -- For at sætte spor på alter session sæt sql_trace =false; -- For at udskyde sporingFuldt niveau med ventehændelse og bindespor ændre sessionssæthændelser ='10046 sporingsnavnkontekst for evigt, niveau 12'; For at slå sporing af hændelser i falter-sessionssæt fra ='10046 sporingsnavnkontekst fra';Samme som normal sporing exec DBMS_SESSION.set_sql_trace(sql_trace => TRUE); exec DBMS_SESSION.set_sql_trace(sql_trace => FALSE);

Hvis du vil spore i andre løbesessioner, er her trinene

Normal sporing kør dbms_system.set_sql_trace_in_session ('sid', 'serial', sand); -- For at sætte sporing på udføre dbms_system.set_sql_trace_in_session ('sid','serial',true); -- For at udsætte sporingFuldt niveau med ventehændelse og bindesporing udfør dbms_system.set_ev('sid','serial',10046,12,'');For at udsætte sporing udfør dbms_system.set_ev('sid','serial',10046,0,'');

Du skal have set brugen af ​​12,0 i forskellige udsagn ovenfor. De er sporingsniveauer. Oracle Tracing har sporingsniveauer .Her er de gyldige værdier

0 Ingen spor. Som at slå sql_trace fra.
2 Hvad der svarer til almindelig sql_trace
Det giver udførelsessti, rækkeantal, mindste flad fil
Fordele
Giver eksekveringssti
Giver rækkeantal
Producerer den mindste flad fil
Ulempe
Kan ikke fortælle, hvilke værdier der blev leveret ved kørselstid til SQL
Hvis statistik for forespørgsel er lav, men kørselstiden er lang, kan ikke fortælle, hvilke hændelser der forårsagede den lange ventetid
4 Det samme som 2, men med tilføjelse af bindevariableværdier
Fordele
Indeholder udførelsessti
Giver rækkeantal
Kan fortælle, hvilke værdier sætningen blev kørt for
Ulempe
Igen, hvis køretiden er lang, og statistikken er lav, vil det være svært at sige hvorfor i denne type sporing.
Producerer en større flad fil end den almindelige sporing, fordi bindevariable informationer skal gemmes.
8 Det samme som 2, men med tilføjelse af ventehændelser
Regular Trace plus database operations timings, som SQL'en ventede på at have udført for at fuldføre. For eksempel:diskadgangstider.
Fordele
Giver eksekveringssti
Giver rækkeantal
Kan fortælle timings for alle hændelser forbundet med SQL.
Ulempe
Sporingsfilen kan nemt maxe på grund af al den information, Oracle skal skrive til sporingsfilen, og så er kun delvis information tilgængelig i sporingsfilen.
Bind variabel information er ikke tilgængelig
12 Det samme som 2, men med både bindingsvariableværdier og ventehændelser
Regulær sporing med både vent- og bindingsinformationen. Indeholder den mest komplette information og vil producere den største sporingsfil.
Giver eksekveringssti
Giver rækkeantal
Kan fortælle timings for alle hændelser forbundet med SQL.
Kan fortælle, hvilke værdier SQL blev kørt med
Fordele
Giver udførelsessti
Giver rækkeantal
Kan fortælle tidspunkter for alle hændelser forbundet med SQL.
Kan fortælle, hvilke værdier SQL'en blev kørt med
Ulempe
Sporingsfilen kan nemt maxe ud på grund af al den information, Oracle skal skrive til sporingsfilen, og så er kun delvis information tilgængelig i sporingsfilen.

Der er også andre måder at lave sporingen på. Her er nogle af disse
(1) ORADEBUG
Dette kræver login som sysdba

oradebug setospid   1111   -- Fejlfindingssession med den angivne Oracle  proces idoradebug setorapid  1111  --- Fejlfindingssession med den angivne OS processoradebug hændelse 10046 sporingsnavn kontekst for evigt, niveau 4;oradebug hændelse kontekst 10046 sporingsnavn kontekst off. --- Dette deaktiverer traceoradebug close_trace  --- Dette lukker  sporingsfilenOradebug TRACEFILE_NAME;

(2) Med Oracle 10g er SQL-sporingsmulighederne udvidet ved hjælp af DBMS_MONITOR-pakken

UDFØR dbms_monitor.session_trace_enableWhich is similarALTER SESSION SET EVENTS '10046 sporingsnavn kontekst for evigt, niveau 2'; UDFØR dbms_monitor.session_trace_enable (binds=>true);Som er lignendeALTER SESSION SET kontekst for EVENTS, niveau '10 navn' 046-niveau '10 navn';EXECUTE dbms_monitor.session_trace_enable (waits=>true);Hvilket er lignendeALTER SESSION SET EVENTS '10046 sporingsnavn kontekst for evigt, niveau 8';EXECUTE dbms_monitor.session_trace_enable('sid','serial#.e dbmsset)_som er_system 'sid','serial',10046,2,'');EXECUTE dbms_monitor.session_trace_enable ('sid','serial#',binds=>true);Hvilket er lignendeudfør dbms_system.set_ev('sid','serial' ,10046,4,'');EXECUTE dbms_monitor.session_trace_enable ('sid','serial#',waits=>true);Som er lignendeudfør dbms_system.set_ev('sid','serial',10046,8,'' );

Der er mange andre funktioner tilgængelige i dbms_monitor. Vi kan aktivere sporing baseret på klient-id og flere måder

Sådan identificerer du sporingsfilerne

Vi kan identificere sporingsfilerne ved hjælp af sessionens spid. Sporingsfilen vil også indeholde sid,serial# -par i starten af ​​sporingsfilen.
Nedenstående forespørgsel kan bruges til at finde den lokale sessionssporingsfil

vælg c.value || '/' || d.instance_name ||'_ora_' || a.spid || '.trc' spor fra v$proces a, v$session b, v$parameter c, v$instance dhvor a.addr =b.paddrand b.audsid =brugerenv('sessionid')og c.name ='user_dump_dest'/ 

Der er en anden nem måde at identificere sporingsfilen på, som kaldestrace identifier

alter session set tracefile_identifer='ORAC'; Dette er identifikator

Eksempel på sporingsfil

Sporingsfil /app/oracle/TEST/diag/rdbms/test/TEST/trace/TEST_ora_13025_IDEN.trcOracle Database 11g Enterprise Edition udgave 11.2.0.4.0 - 64bit produktion med partitionering, reelle applikationsklynger, OLAP, datamining Real Application Testing optionerORACLE_HOME =/app/oracle/TEST/11.2.0/dbSystemnavn:    SunOS12Nodenavn:sun12Release:   5.10Version:   Generic_144488-11Maskin:   sun4uInstansnavn:TESTRedo i procesnummer monteret af:120 i processen:120 i processen:120, proces:120. , billede:[email protected] SunOS12*** 2013-10-21 12:28:56.461*** SESSION ID:(3875.17341) 2013-10-21 12:28:56.461*** KLIENT ID:() 2013 -10-21 12:28:56.461*** SERVICENAVN:(TEST) 2013-10-21 12:28:56.461*** MODULNAVN:([email protected](TNS V1-V3)) 2013-10 -21 12:28:56.461*** HANDLINGSNAVN:() 2013-10-21 12:28:56.461LUK #4:c=0,e=11,dep=1,type=1,tim=8866891135825=====================PARSERING I MARKØR #5 len=356 dep=1 uid=173 okt=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=77ffffff48 avl 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=====================PARSING I CURSOR #4 len=230 dep=1 uid=173 okt=3 låg=173 tim=8866891138634 hv=3575592451 ad='3aeea3da0' sqlid='55dc767ajydh3'SELECT PROFILE_OPTION_VALUE FROM_FND_PROFISLE WHOPTION_VALUE ERE PROFILE_OPTION_ID =:B4 OG APPLICATION_ID =:B3 OG LEVEL_ID =10003 OG LEVEL_VALUE =:B2 OG LEVEL_VALUE_APPLICATION_ID =:B1 OG PROFIL_OPTION_VÆRDI ER IKKE NULLEND AF STMIND2200 m=o:Bind20m=d2x0m=d2d200 m/d=10 00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=96 off=0kxsbbbfp=ffffffff7d677b68  bln=22  avl=03  flg=05value=1204Bind=1204Bind=02cmx02=02cmx02=02mx02o 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#22c mxdty=02c mxdty=02c mxdty=02o =00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=48kxsbbbfp=ffffffff7d677b98  bln=22  avl=04  flg=01valueBy=503234d=503234 ) 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=0C #4:=værdi 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=====================PARSING I MARKØR #5 len =191 dep=1 uid=173 okt=3 lid=173 tim=8866891139308 hv=303338305 ad='3bedf0e48' sqlid='7qs7fx89194u1'VÆLG PROFIL_OPTIONSVÆRDI FRA_VÆRDI_OPTIONS_VÆRDI_2_VÆRDI_VÆRDI_VÆRDI_FREMSTILLING_FRA_PROFIL:PROFIL LEVEL_VALUE =:B1 OG PROFILE_OPTION_VALUE ER IKKE NULLEND AF STMBINDS #5:Bind#0oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=006001 frm 96 off=0kxsbbbfp=ffffffff7d673b78  bln=22  avl=03  flg=05value=1204Bind#1oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 fr=00oacflg=00oacflg=006oacflg=0060201=0si=00602m siz=0 off=24kxsbbbfp=ffffffff7d673b90  bln=22  avl=02  flg=01value=800Bind#2oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 fr=00oacfl01=00oacflg=00oacflg=00oacflg=00oacflg=00oacdty=00 =00 siz=0 off=48kxsbbbfp=ffffffff7d673ba8  bln=22  avl=04  flg=01value=10001

hvordan man kontrollerer, om sporing er aktiveret i Oracle

Hvis du har aktiveret sporing ved hjælp af DBMS_MONITOR-pakken, kan vi kontrollere, om sporing er aktiveret ved hjælp af nedenstående forespørgsel

indstil linjer 180col modul for a45col sql_trace_waits for a20col sql_trace_binds for a20col sql_trace for a20select brugernavn,modul,sid,sql_trace,sql_trace_waits,sql_trace_session 

Hvis det er aktiveret via andre metoder, så er den eneste måde at kontrollere det på, at se på sporingsplaceringen og finde ud af sporingsfilerne, der er nyere og derefter finde sid og serienummer i den, og så kan du forespørge v$session for at finde session, og du kan deaktivere sporingen, hvis du vil

Oracle tkprof-værktøj

Sporingsfilerne opnået fra ovenstående metode er i rå form, som kan konverteres til et mere læsbart format ved hjælp af tkprof-værktøjet (Transient Kernel PROFile-værktøjet)

tkprofUsage:tkprof tracefile outputfile [explain=] [table=][print=] [insert=] [sys=] [sort=]table=schema.tablename   Brug 'schema.tablename' med muligheden 'explain='. explain=user/password    Opret forbindelse til ORACLE og problem EXPLAIN PLAN.print=integer    List kun de første 'integer' SQL-sætninger.aggregate=yes|noinsert=filename  Liste SQL-sætninger og data inde i INSERT statements.sys=no           TKPROF viser ikke SQL udsagn kører som bruger SYS.record=filnavn  Registrer ikke-rekursive udsagn fundet i trace-filen.waits=yes|no     Registreringsoversigt for eventuelle ventehændelser fundet i trace file.sort=option      Sæt med nul eller flere af følgende sorteringsmuligheder :prscnt  antal gange parse blev kaldtprscpu  CPU-tid parsingprsela  forløbet tid parsing    prsdsk  antal disklæsninger under parse prsqry  antal buffere til konsistent læsning under parseprscu   antal buffere til aktuel læsning under parseprsmis-eksemplar under pars. antal eks. ecute blev kaldt execpu  CPU-tid brugt på at udføre exeela  forløbet tid på at udføre exedsk  antal disklæsninger under eksekvering af exeqry  antal buffere til konsistent læsning under executeexecu   antal buffere for aktuel læsning under executeexecu  antal rækker behandlet under eksekvering af exemis nummer af bibliotekscache antal udførelse af gange hentning blev kaldtfchcpu  cpu-tid brugt på at hentefchela  forløbet tid fetchingfchdsk  antal disklæsninger under fetchfchqry  antal buffere til konsistent læsning under fetchfchcu   antal buffere til aktuel læsning under fetchfchrow  antal rækker hentetfchdsk bruger-id for bruger, der blev parseret 

Nogle eksempler

tkprof file.trc file.txt sys=no explain=userid/password sort=prsela,exeela,fchelatkprof file.trc file.txt  sys=no explain=userid/password  sort=prsela,exeela,fchelatkprof file.trc fil .txt sys=notkprof file.trc file.txt sys=no explain=brugerid/adgangskode sort=prsela,exeela,fchelaDette print kun 10 sql tkprof .trc elaps.prf sys=no explain=apps/ sort=(prsela,exeela,fchela) print=10Denne udskriver hele sql tkprof .trc elaps.prf sys=no explain=apps/apps sort=prsela,exeela,fchela

Eksempel på indhold af tkprof-fil

TKPROF:Udgivelse 11.2.0.4.0 - Produktion tirsdag 17. jan 14:12:41 2013Copyright (c) 1982, 2007, Oracle. Alle rettigheder forbeholdes.Sporingsfil:TEST_ora_15941.trcSorteringsmuligheder:execpu  fchcpu******************************************* ************************************************tæller    =antal gange OCI procedure blev udførtCPU      =CPU-tid i sekunder executingelapsed  =forløbet tid i sekunder executingdisk     =antal fysiske læsninger af buffere fra diskquery    =antal buffere hentet for konsistent læsestrøm  =antal buffere hentet i aktuel tilstand (normalt til opdatering) antal    rækker behandlet af hente eller udføre opkald********************************************* **************************************SQL ID:6w82ggrtysxPlan Hash:2325776775SELECT FUNCTION_NAME    FRA FND_USER_DESKTOP_OBJECTS  WHERE USER_ID =:b1 og applikation_id =:b2 og ansvar_id =:b3 og type ='funktion' og rownum <=10 ordre af sequencecall tæller cpu forløbet diskforespørgselsstrøm rækker ------- ------ ---- ---- ---------- ---------- ---------- ---------- ---------- Parse 1 0,00 0,00 0 0 0 Execute 1 0,00 0,00 0 0 0fetch 2 0,00 0,00 0 4 0 1 ------- ------ ----- ----- --- ---------- ---------- ---------- ----------  ------- --- I alt 4 0,00 0,00 0 4 0 1Misses i bibliotekscache under parse:0optimizer-tilstand:All_rowsparsing Bruger-ID:173 (Apps) Antal planstatistikker fanget:1row ---------- ---------- ----------  ---------------------------- ------------------------------1          1          1  SORTERE BESTILLING EFTER (cr=4 pr=0 pw=0 time=0 us pris=6 størrelse=41 kort=1)1           1          1   ANTAL STOPKEY (cr=4 pr=0 pw=0 time=0 us)1          1          1          1           1    TABELADGANG =p_EX R. 0 (cr=4 pr. =0 os omkostninger=5 størrelse=41 kort=1)1          1          1     INDEKSERVÆRDE S CAN FND_USER_DESKTOP_OBJECTS_N1 (cr=3 pr=0 pw=0 time=0 us cost=3 size=0 card=3)(objekt-id 33596)Rows     Execution Plan-------  ---------- ------------------------------------------0  VÆLG UDTALELSE   TILSTAND:ALL_ROWS1   SORT ( BESTIL EFTER)1    ANTAL (STOPKEY)1     TABELADGANG   TILSTAND:ANALYSERET (AF INDEX ROWID) OF'FND_USER_DESKTOP_OBJECTS' (TABEL)1      INDEX   MODE:ANALYZED (AFTER INDEX ROWID) OF'FND_USER_DESKTOP_OBJECTS' (TABLE)1      INDEX   MODE:ANALYZED (VED INDEX ROWID)'er, inkl. Begivenheden ventede på                             Tider   Maks. Vent  Samlet ventet-----------------------------------------   Ventede  ------ ----  ------------SQL*Net-besked til klient                        5         0,00          0,00SQL*Net-besked fra klient                      5    *** 0.  *** 0.  *** ************************************************** **************SQL ID:276ut2ywquxPlan Hash:3856112528vælg objektnavn, icon_namefromfnd_desktop_objectscall     antal       cpu    forløbet        disk        disk        disk        disk        -         disk        -         disk        - række                 disk                 - række ---------- ---------- ---------- ----------  ---------- -Parse 1 0,00 0,00 0 0 0 0xecute 1 0,00 0,00 0 0 0 0Fetch 3 0,00 0,00 0 6 0 47 ------- ------ -------- ------ ----- ---------- ---------- ----------  ----------i alt        5      0,00       0,00          0 6          0          47Savn i bibliotekets cache d uring parse:0Optimizer-tilstand:ALL_ROWSParsing bruger-id:173  (APPS) Antal registrerede planstatistikker:1 Rækker (1.) Rækker (gennemsnit) Rækker (maks.)  Rækkekildehandling ----- ----- ----------  ----------------------------------- ----------------47         47         47  TABELADGANG FULD FND_DESKTOP_OBJECTS (cr=6 pr=0 pw=0 time=0 us cost=2 size=1175 card=47) Rækker     Udførelsesplan ------  ------------------------------------------- --------0  VÆLG UDTALELSE   TILSTAND:ALL_ROWS47   TABELADGANG   TILSTAND:ANALYSERET (FULD) AF 'FND_DESKTOP_OBJECTS'(TABEL)

Oracle trcsess værktøj

Når du bruger delte serversessioner, er mange processer involveret. Sporet, der vedrører brugersessionen, er spredt over forskellige sporingsfiler, der tilhører forskellige processer. Dette gør det svært at få et fuldstændigt billede af en sessions livscyklus.
Trcsess-værktøjet konsoliderer sporingsoutput fra udvalgte sporingsfiler baseret på flere kriterier

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  

Efter at konsolideringssporingsfilen er blevet genereret, kan du udføre tkprof på den.

Flere oplysninger

I 11g og højere er sql_trace også en hændelse og kan indstilles med hændelsessyntaks:

SQL> oradebug doc hændelsesnavn sql_tracesql_trace:hændelse for sql traceUsage-------sql_tracewait ,bind ,plan_stat ,niveau 

Så du kan bruge det som følger til at aktivere SQL_TRACE, der anmoder om bindeoplysninger:

alter session set events 'sql_trace bind=true';

eller bind og vent information (bemærk kommasepareret):

alter session set events 'sql_trace bind=true, wait=true';

Yderligere sporing kan begrænses til et sæt SQL_ID'er, hvis du inkluderer et filter til det. F.eks.

ændre sessionssæthændelser 'sql_trace [sql:sql_id=g3yc1js3g2689 | sql_id=7ujay4u33g337]bind=true, wait=true';

10046 EVENT-niveauer:(de nye sql_trace-værdier er inkluderet i [..])
Dette er bitværdier, så de kan sættes sammen for at få forskellige blandinger
1 – Aktiver standard SQL_TRACE-funktionalitet (standard)
4 – Som niveau 1 PLUS sporingsbindingsværdier [ bind=true ]
8 – Som niveau 1 PLUS spor venter [ wait=true ]
Dette er især nyttigt til at spotte latch wait osv.
men kan også bruges til at spotte hele tabelscanninger og indeksscanninger.

Fra 11g er disse ekstra bitniveauer tilgængelige:
16 – Generer STAT-linjedumps for hver udførelse [ plan_stat=all_executions ]
32 – Dump aldrig udførelsesstatistikker [ plan_stat=never ]

Fra 11.2.0.2 er dette ekstra bitniveau tilgængeligt:
64 – Adaptiv dump af STAT-linjer. [ plan_stat=adaptive ]
Dette dumper STAT-informationen, hvis en SQL tog mere end ca. 1 minut og giver derved information om de dyrere SQL'er og for forskellige udførelser af sådanne
SQL'er.

f.eks.:Et almindeligt hændelsesniveau er 12, som inkluderer standard SQL_TRACE-output, binds, waits og
standard STAT-linjesporing.

Bemærkninger:
STAT-dumping er blevet ændret i 11g, så de ikke er aggregeret på tværs af alle henrettelser, men dumpes efter henrettelse. Dette er blevet gjort for at imødegå tilfælde, hvor markøren ikke er lukket, og STAT-oplysningerne derfor ikke dumpes.
Nu garanterer vi at fange STAT-oplysningerne efter udførelsen. Se ovenstående bitniveauer for at få bedre kontrol over STAT-linjer.

Læser også
v$active_session_history
forklar planen i Oracle
sql tuning Advisor


  1. Implementering af en tilpasset sortering

  2. Sådan fjerner du en primær nøgle i SQL

  3. Videregivelse af array til Oracle-procedure fra c#

  4. Slutter med at lukke en åben SQL-forbindelse