sql >> Databasteknik >  >> RDS >> Oracle

SQL-spårning, händelse 10046 i Oracle:trcsess, tkprof-verktyg

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'Q 

Om 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,fchela

Exempel 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 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 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


  1. Ett tabellnamn som en variabel

  2. Närmaste match, del 1

  3. MySQL NULLIF() Förklarat

  4. MySQL får radposition i ORDER BY