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_sessionHvis 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,fchelaEksempel 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 kriteriertrcsess [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 *trcEfter 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