Spårning är en viktig del för Oracle-databasjustering. Detta kommer att hjälpa till att fånga alla problemmeddelanden , wait-händelser som är ansvariga för långsam körning av sessionen.
Oracle-databasen har tillhandahållit många snabbaste sätt att spåra den lokala sessionen, andra användarsessioner och formatera spåret för att göra det läsbart
Låt oss ta en titt på hur du aktiverar SQL-spårning, 10046-händelse i Oracle-databasen och trcsess, tkprof-verktyget
Innehållsförteckning
SQL Trace ,100046-händelse
Om du vill spåra i lokal session, här är stegen för att aktivera SQL-spårning
Normal spårning alter session set sql_trace =true; -- För att sätta spåra onalter session set sql_trace =false; -- Att skjuta upp spårningFull nivå med väntahändelse Och binda spårning ändra sessionsuppsättningshändelser ='10046 spåra namnkontext för alltid, nivå 12';För att sätta spårning av händelser med fallande sessionsuppsättning ='10046 spåra namnkontext av';Samma som Normal spårning exec DBMS_SESSION.set_sql_trace(sql_trace => TRUE); exec DBMS_SESSION.set_sql_trace(sql_trace => FALSE);
Om du vill spåra i andra löpsessioner, här är stegen
Normal spårning kör dbms_system.set_sql_trace_in_session ('sid', 'serial', true); -- För att sätta spårning onexecute dbms_system.set_sql_trace_in_session ('sid','serial',true); -- Att skjuta upp spårningFull nivå med väntahändelse Och binda spårning kör dbms_system.set_ev('sid','serial',10046,12,'');För att skjuta upp spårning kör dbms_system.set_ev('sid','serial',10046,0,'');
Du måste ha sett att använda 12,0 i olika uttalanden ovan. De är spårningsnivåer. Oracle Tracing har spårningsnivåer. Här är de giltiga värdena
0 | Inga spår. Som att stänga av sql_trace. |
2 | Motsvarigheten till vanlig sql_trace Det ger körväg, radantal, minsta platta fil Fördelar Tillhandahåller körningsväg Tillhandahåller radantal Producerar minsta platta fil Nackdelar Kan inte avgöra vilka värden som tillhandahölls vid körning till SQL Om statistiken för frågan är låg men körtiden är lång kan inte säga vilka händelser som orsakade den långa väntetiden |
4 | Samma som 2, men med tillägg av bindningsvariabelvärden Fördelar Tillhandahåller körningsväg Tillhandahåller radantal Kan avgöra vilka värden programsatsen kördes för Nackdelar Återigen om körtiden är lång och statistiken är låg kommer det att vara svårt att avgöra varför i den här typen av spårning. Producerar en större platt fil än den vanliga spårningen eftersom bindningsvariabelinformation måste lagras. |
8 | Samma som 2, men med tillägg av väntehändelser Regular Trace plus databasoperationstider som SQL väntade på att ha gjort för att slutföra. Till exempel:diskåtkomsttider. Fördelar Tillhandahåller exekveringsväg Tillhandahåller radantal Kan säga tidpunkter för alla händelser associerade med SQL. Nackdelar Spårningsfilen kan lätt maxa ut på grund av all information som Oracle måste skriva till spårningsfilen och då är endast partiell information tillgänglig i spårningsfilen. Information om bindningsvariabel är inte tillgänglig |
12 | Samma som 2, men med både bindningsvariabelvärden och wait-händelser Regelbunden spårning med både wait- och bindningsinformationen. Innehåller den mest fullständiga informationen och kommer att producera den största spårningsfilen. Tillhandahåller exekveringsväg Tillhandahåller radantal Kan säga tidpunkter för alla händelser som är associerade med SQL. Kan säga vilka värden SQL kördes med fördelar Tillhandahåller exekveringsväg Tillhandahåller radantal Kan säga tidpunkter för alla händelser associerade med SQL. Kan säga vilka värden SQL kördes med Nackdelar Spårningsfilen kan lätt maxa ut på grund av all information som Oracle måste skriva till spårningsfilen och då är endast partiell information tillgänglig i spårningsfilen. |
Det finns andra sätt att göra spårningen också. Här är några av dessa
(1) ORADEBUG
Detta kräver inloggning som sysdba
oradebug setospid 1111 -- Felsökningssession med den angivna Oracle processen idoradebug setorapid 1111 --- Felsökningssession med den angivna OS processoradebug-händelsen 10046 spåra namnkontexten för alltid, nivå 4;oradebug-händelsekontexten 10046 spårnamnshändelse 10046; --- Detta inaktiverar traceoradebug close_trace --- Detta stänger spårningsfilenOradebug TRACEFILE_NAME;
(2) Med Oracle 10g har SQL-spårningsalternativen utökats med paketet DBMS_MONITOR
EXEKUT dbms_monitor.session_trace_enableWhich is similarALTER SESSION SET HÄNDELSER '10046 spåra namnkontext för alltid, nivå 2'; UTFÖR dbms_monitor.session_trace_enable (binds=>true);som är liknandeALTER SESSION SET för HÄNDELSER 046, spåra namn på nivå '10 kontext för EVENTS' 10 namn;EXECUTE dbms_monitor.session_trace_enable (waits=>true);som är liknandeALTER SESSION SET HÄNDELSER '10046 spåra namnkontext för alltid, nivå 8';EXECUTE dbms_monitor.session_trace_enable('sid','serial#')dbmset_system 'sid','serial',10046,2,'');EXECUTE dbms_monitor.session_trace_enable ('sid','serial#',binds=>true);som är liknande kör dbms_system.set_ev('sid','serial' ,10046,4,'');EXECUTE dbms_monitor.session_trace_enable ('sid','serial#',waits=>true);som är liknandeexekvera dbms_system.set_ev('sid','serial',10046,8,'' );
Det finns många andra funktioner tillgängliga i dbms_monitor. Vi kan aktivera spårning baserat på klientidentifierare och på flera sätt
Hur man identifierar spårningsfilerna
Vi kan identifiera spårningsfilerna med sessionens spid. Spårningsfilen kommer också innehålla sid,serial# -par i början av spårningsfilen.
Frågan nedan kan användas för att hitta den lokala sessionsspårningsfilen
välj c.value || '/' || d.instansnamn ||'_ora_' || a.spid || '.trc' spår från v$process a, v$session b, v$parameter c, v$instans dwhere a.addr =b.paddrand b.audsid =userenv('sessionid')och c.name ='user_dump_dest'/
Det finns ett annat enkelt sätt att identifiera spårningsfilen som kallasspårningsidentifierare
alter session set tracefile_identifer='ORAC'; Detta är identifierare
Exempel på spårningsfil
Spårningsfil /app/oracle/TEST/diag/rdbms/test/TEST/trace/TEST_ora_13025_IDEN.trcOracle Database 11g Enterprise Edition version 11.2.0.4.0 - 64-bitars produktion med partitionering, riktiga applikationskluster, OLAP, datautvinning Real Application Testing optionsORACLE_HOME =/app/oracle/TEST/11.2.0/dbSystemnamn: SunOS12Nodnamn:sun12Release: 5.10Version: Generic_144488-11Maskin: sun4uInstansnamn:TESTRedo i processnummer:120 denna process:120 process:120 process monterad av:120 , bild:[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*** TJÄNSTNAMN:(TEST) 2013-10-21 12:28:56.461*** MODULNAMN:([email protected](TNS V1-V3)) 2013-10 -21 12:28:56.461*** ÅTGÄRDENS NAMN:() 2013-10-21 12:28:56.461STÄNG #4:c=0,e=11,dep=1,type=1,tim=8866891135825=====================PARSERING I MARKEREN #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 av 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,typ=3,tim=8866891138503=====================PARSING I MARKERING #4 len=230 dep=1 uid=173 okt=3 lock=173 tim=8866891138634 hv=3575592451 ad='3aeea3da0' sqlid='55dc767ajydh3'SELECT PROFILE_OPTION_VALUE WHOPTION_VALUE FROM_FND_PROFILE ERE PROFILE_OPTION_ID =:B4 OCH APPLICATION_ID =:B3 OCH LEVEL_ID =10003 OCH LEVEL_VALUE =:B2 OCH LEVEL_VALUE_APPLICATION_ID =:B1 OCH PROFILE_OPTION_VALUE ÄR INTE NULLEND AV STMIND2200 m/c:Bind20 m/d2d2x0 m/c:Bind200 m/o/b/200 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=02c mxdty=12cdty=02c mxdty=02c mxdty=02cm 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=02c mxdty=02c mxdty=02c mxdty=02c mx =00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=48kxsbbbfp=ffffffff7d677b98 bln=22 avl=04 flg=01värde=503224d=5032244 ) 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 EXE #4:=värde 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 MARKERING #5 len =191 dep=1 uid=173 okt=3 lock=173 tim=8866891139308 hv=303338305 ad='3bedf0e48' sqlid='7qs7fx89194u1'VÄLJ PROFIL_OPTIONS_VÄRDE FRÅN_FÖRVALT_PROFIL_VÄRDE FRÅN_FÖRVÄRDE_PROFIL_2_VÄRDE:VÄRDE FRÅN_FNDOPTIONS_PROFIL:3 LEVEL_VALUE =:B1 OCH PROFILE_OPTION_VALUE ÄR INTE NULLEND AV STMTBINDS #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=006oacflg=0060201=0 siz=0 off=24kxsbbbfp=ffffffff7d673b90 bln=22 avl=02 flg=01value=800Bind#2oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 fr=00oacflg=00oacflg=00oacflg=00oacflg=00oacdty=00 =00 siz=0 off=48kxsbbbfp=ffffffff7d673ba8 bln=22 avl=04 flg=01value=10001
hur man kontrollerar om spårning är aktiverat i Oracle
Om du har aktiverat spårning med DBMS_MONITOR-paketet kan vi kontrollera om spårning är aktiverat med hjälp av nedanstående fråga
set lines 180col-modul för a45col sql_trace_waits för a20col sql_trace_binds för a20col sql_trace för a20select användarnamn,modul,sid,sql_trace,sql_trace_waits,sql_trace_waits,sql_trace_session_binds från v$lsession_bindtras/SV'QOm det är aktiverat genom andra metoder, är det enda sättet att kontrollera att titta på spårningsplatsen och ta reda på spårningsfilerna som är nya och sedan hitta sid och serienummer i den och sedan kan du fråga v$session för att hitta session och du kan inaktivera spårningen om du vill
Oracle tkprof-verktyg
Spårningsfilerna som erhålls från ovanstående metod är i rå form som kan konverteras till ett mer läsbart format med hjälp av verktyget tkprof (Verktyget Transient Kernel PROFile)
tkprofUsage:tkprof tracefile outputfile [explain=] [table=][print=] [insert=] [sys=] [sort=]table=schema.tablename Använd 'schema.tablename' med alternativet 'explain='. explain=user/password Anslut till ORACLE och problem EXPLAIN PLAN.print=integer Lista endast de första "integer" SQL-satserna.aggregate=yes|noinsert=filename Lista SQL-satser och data i INSERT-satser.sys=no TKPROF listar inte SQL uttalanden körs som användare SYS.record=filename Spela in icke-rekursiva uttalanden som finns i trace-filen.waits=yes|no Postsammanfattning för alla väntande händelser som finns i trace-filen.sort=option Uppsättning med noll eller fler av följande sorteringsalternativ :prscnt antal gånger parse anropadesprscpu CPU-tid parsingprsela förfluten tid parsing prsdsk antal diskläsningar under parse prsqry antal buffertar för konsekvent läsning under parseprscu antal buffertar för aktuell läsning under parseprsmis-exemplar under parseprsmis antal ex-missar ecute kallades execpu CPU-tid som gick åt till exekvering av exeela förfluten tid vid exekvering av exedsk antal diskläsningar under exekvering exeqry antal buffertar för konsekvent läsning under executeexecu antal buffertar för aktuell läsning under executeexecu antal rader bearbetade under executeexemis nummer av bibliotekscache antal exekvering av gånger hämta kalladesfchcpu cpu-tid som gick åt fetchingfchela förfluten tid fetchingfchdsk antal diskläsningar under fetchfchqry antal buffertar för konsekvent läsning under fetchfchcu antal buffertar för aktuell läsning under fetchfchrow antal rader hämtadeduserid användar-id för användare som parserades>Några exempel
tkprof file.trc file.txt sys=no explain=userid/lösenord sort=prsela,exeela,fchelatkprof file.trc file.txt sys=no explain=userid/lösenord sort=prsela,exeela,fchelatkprof file.trc fil .txt sys=notkprof file.trc file.txt sys=no explain=userid/password sort=prsela,exeela,fchelaDenna utskrift endast 10 sql tkprof .trc elaps.prf sys=no explain=apps/ sort=(prsela,exeela,fchela) print=10Detta skriv ut hela sql tkprof .trc elaps.prf sys=no explain=apps/apps sort=prsela,exeela,fchelaExempel på innehåll i tkprof-fil
TKPROF:Release 11.2.0.4.0 - Produktion den tis 17 januari 14:12:41 2013Copyright (c) 1982, 2007, Oracle. Alla rättigheter reserverade.Spårningsfil:TEST_ora_15941.trcSorteringsalternativ:execpu fchcpu******************************************* ************************************************** räkna =antal gånger OCI proceduren exekveradesCPU =CPU-tid i sekunder executingelapsed =förfluten tid i sekunder executingdisk =antal fysiska läsningar av buffertar från diskquery =antal buffertar hämtade för konsekvent läsström =antal buffertar hämtade i aktuellt läge (vanligtvis för uppdatering) antal behandlas av hämtningen eller utför samtalet********************************************* **************************************SQL ID:6w82ggrtysxPlan Hash:2325776775SELECT FUNCTION_NAME FROM FND_USER_DESKTOP_OBJECTS WHERE USER_ID =:b1 och applikation_id =:b2 och ansvar_id =:b3 och typ ='funktion' och rownum <=10 beställning av sequenceCall count cpu förfluten diskfråga aktuella rader ------- ------ ---- --- ---- ---------- ---------- ---------- ---------- ---------- Parse 1 0,00 0,00 0 0 0 0execute 1 0,00 0,00 0 0 0 0 0 FETCH 2 0,00 0,00 0 4 0 1 ------- ------ ----- --- ---------- ---------- ---------- ---------- ------- --- Totalt 4 0,00 0,00 0 4 0 1 Misser i bibliotekscache under Parse:0Optimizer-läge:All_RowsparSing Användar-ID:173 (APPS) Antal planstatistik fångad:1Rows (1:a) rader (AVG) Rader (max) Radkälloperation- ---------- ---------- ---------- ---------------------------- ------------------------------1 1 1 SORTERA BESTÄLLNING EFTER (cr=4 pr=0 pw=0 time=0 us kostnad=6 storlek=41 kort=1)1 1 1 RÄKNA STOCKEY (cr=4 pr=0 pw=0 tid=0 oss)1 1 1 1 1 TILLKOMST TILL TABELLEN PER IND_EX REK 0 (cr=4) =0 oss kostnad=5 storlek=41 kort=1)1 1 1 INDEXOMRÅDE 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ÄLJ UTTALANDE LÄGE:ALL_ROWS1 SORTERA ( BESTÄLL EFTER)1 ANTAL (STOPKEY)1 TABELLÅTKOMST LÄGE:ANALYSERAD (PER INDEX ROWID) OF'FND_USER_DESKTOP_OBJECTS' (TABELL)1 INDEX LÄGE:ANALYZERAD (AVSTRÄCKANDE SCANDP_ANVÄNDARE inkluderar följande händelser IND_OMRÅDESSKANNANDE_ANVÄNDARE) (FÖLJANDE_OMRÅDESSKANNANDE) Evenemanget väntade på Tider Max. Vänta Totalt väntade----------------------------------------- väntade ------ ---- ------------SQL*Net-meddelande till klient 5 0,00 0,00SQL*Net-meddelande från klient 5 *** 0. *** 0. *** ************************************************** ************** SQL ID:276UT2YWQUXPLAN HASH:3856112528Select Object_Name, icon_namefromfnd_desktop_objectscall count CPU ELAPSED DISK QUERY CURRENT ROWS ------- ------ --------------------------------------------- ---------- ---------- ---------- ---------- -------- -Parse 1 0,00 0,00 0 0 0 0execute 1 0,00 0,00 0 0 0 0 0 Fetch 3 0,00 0,00 0 6 0 47 ------- ------ -------- ----- ----- ---------- ---------- ---------- ----------totalt 5 0,00 0,00 0 6 0 47Missar i bibliotekets cache d uring parse:0Optimizerläge:ALL_ROWSParsing user id:173 (APPS)Antal planstatistik som tagits:1Rader (1:a) Rader (genomsnitt) Rader (max) Radkälla Operation ----- ----- ---------- ----------------------------------- ----------------47 47 47 BORDTILLGÅNG FULLSTÄNDIG FND_DESKTOP_OBJECTS (cr=6 pr=0 pw=0 tid=0 oss kostnad=2 storlek=1175 kort=47) Rader Exekutivplan ------- -------------------------------------------------- --------0 VÄLJ UTTALANDE LÄGE:ALL_ROWS47 TABELLÅTKOMST LÄGE:ANALYSERAD (FULLSTÄNDIG) AV 'FND_DESKTOP_OBJECTS'(TABELL)Oracle trcsess verktyg
När man använder delade serversessioner är många processer inblandade. Spårningen som hänför sig till användarsessionen är spridd över olika spårningsfiler som tillhör olika processer. Detta gör det svårt att få en fullständig bild av en sessions livscykel.
Verktyget trcsess konsoliderar spårningsutdata från utvalda spårningsfiler baserat på flera 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 att konsolideringsspårningsfilen har genererats kan du köra tkprof på den.
Mer information
I 11g och högre är sql_trace också en händelse och kan ställas in med händelsesyntax:
SQL> oradebug doc händelsenamn sql_tracesql_trace:händelse för sql traceUsage-------sql_tracewait,bind ,plan_stat ,nivå Så du kan använda det enligt följande för att aktivera SQL_TRACE som begär bindningsinformation:
alter session set event 'sql_trace bind=true';eller binda och vänta information (meddelande kommaseparerad):
alter session set events 'sql_trace bind=true, wait=true';Ytterligare spårning kan begränsas till en uppsättning SQL_ID om du inkluderar ett filter för det. T.ex.
alter session set events 'sql_trace [sql:sql_id=g3yc1js3g2689 | sql_id=7ujay4u33g337]bind=true, wait=true';10046 EVENT-nivåer:(de nya sql_trace-värdena ingår i [..])
Detta är bitvärden så kan sättas ihop för att få olika mixar
1 – Aktivera standard SQL_TRACE-funktionalitet (standard)
4 – Som nivå 1 PLUS spårningsbindningsvärden [ bind=true ]
8 – Som nivå 1 PLUS spår väntar [ wait=true ]
Detta är särskilt användbart för att upptäcka latch wait etc.
men kan också användas för att upptäcka fullbordsskanningar och indexskanningar.Från och med 11g är dessa ytterligare bitnivåer tillgängliga:
16 – Generera STAT-raddumpar för varje körning [ plan_stat=all_executions ]
32 – Dumpa aldrig körningsstatistik [ plan_stat=never ]Från och med 11.2.0.2 är denna extra bitnivå tillgänglig:
64 – Adaptiv dumpning av STAT-linjer. [ plan_stat=adaptive ]
Detta dumpar STAT-informationen om en SQL tog mer än cirka 1 minut och ger därigenom
information för de dyrare SQL:erna och för olika exekveringar av sådana
SQL:er.t.ex.:En vanlig händelsenivå är 12 som inkluderar standard SQL_TRACE-utdata, binds, waits och
standard STAT-linjespårning.Anmärkningar:
STAT-dumpning har ändrats i 11g så att de inte aggregeras över alla avrättningar utan dumpas efter avrättningen. Detta har gjorts för att åtgärda fall där markören inte är stängd och STAT-informationen därför inte dumpas.
Nu garanterar vi att fånga STAT-informationen efter utförandet. Se bitnivåerna ovan för att få bättre kontroll över STAT-linjer.Läser också
v$active_session_history
förklara planen i Oracle
sql tuning Advisor