Trasování je důležitou součástí ladění databáze Oracle. To pomůže zachytit všechna prohlášení o problému, události čekání, které jsou zodpovědné za pomalý průběh relace.
Databáze Oracle poskytla mnoho nejrychlejších způsobů, jak sledovat místní relaci, relaci jiného uživatele a formátovat trasování, aby bylo čitelné
Pojďme se podívat na to, jak zapnout trasování SQL, událost 10046 v databázi Oracle a nástroj trcsess, tkprof
Obsah
SQL Trace ,100046 událost
Pokud chcete trasování v místní relaci, zde jsou kroky k zapnutí trasování SQL
Normální stopa alter session set sql_trace =true; -- Chcete-li vložit trasování onalter session set sql_trace =false; -- Odložení trasováníÚplná úroveň s událostí čekání a svázáním trasování alter session set events ='10046 kontextu názvu trasování navždy, úroveň 12';Chcete-li vypnout trasování offfalter session set events ='10046 kontextu názvu trace off';Stejné jako normální trasování exec DBMS_SESSION.set_sql_trace(sql_trace => TRUE);exec DBMS_SESSION.set_sql_trace(sql_trace => FALSE);
Pokud chcete trasování v jiné běžící relaci, zde jsou kroky
Normální stopa spustit dbms_system.set_sql_trace_in_session (‘sid‘,‘serial‘,true); -- Chcete-li vložit trasování onexecute, dbms_system.set_sql_trace_in_session (‘sid‘,‘serial‘,true); -- Odložení trasováníÚplná úroveň s událostí čekání a svázáním trasování spustit dbms_system.set_ev(‘sid’,’serial’,10046,12,’’);Pro odložení trasování spustit dbms_system.set_ev(‘sid‘,‘serial‘,10046,0,‘‘);
Musíte vidět použití 12,0 v různých výše uvedených prohlášeních. Jsou to úrovně sledování. Oracle Tracing má úrovně sledování. Zde jsou platné hodnoty
0 | Žádná stopa. Jako vypnutí sql_trace. |
2 | Ekvivalent běžného sql_trace Poskytuje cestu spuštění, počet řádků, nejmenší plochý soubor Výhody Poskytuje cestu provedení Poskytuje počty řádků Vytváří nejmenší plochý soubor Nevýhody Nelze zjistit, jaké hodnoty byly dodány za běhu do SQL Pokud jsou statistiky pro dotaz nízké, ale doba běhu je dlouhá, nelze určit, jaké události způsobily dlouhé čekání |
4 | Stejné jako 2, ale s přidáním hodnot proměnných vazby Výhody Poskytuje cestu provedení Poskytuje počty řádků Umí zjistit, pro jaké hodnoty byl příkaz spuštěn Nevýhody Pokud je doba běhu dlouhá a statistiky jsou nízké, bude těžké u tohoto typu trasování říci proč. Vytváří větší plochý soubor než běžné trasování, protože je nutné ukládat informace o proměnných vazeb. |
8 | Stejné jako 2, ale s přidáním událostí čekání Pravidelné trasování plus časování operací databáze, na které SQL čekalo, aby bylo dokončeno. Například:časování přístupu na disk. Výhody Poskytuje cestu provádění Poskytuje počty řádků Umí určit časování všech událostí spojených s SQL. Nevýhody Sledovací soubor se může snadno vyčerpat kvůli všem informacím, které musí Oracle zapsat do trasovacího souboru, a pak jsou ve trasovacím souboru k dispozici pouze částečné informace. Vázat informace o proměnných není k dispozici |
12 | Stejné jako 2, ale s hodnotami proměnných vazby a událostmi čekání Pravidelné trasování s informacemi čekání i vazby. Obsahuje nejúplnější informace a vytvoří největší trasovací soubor. Poskytuje cestu provedení Poskytuje počty řádků Umí určit časování všech událostí spojených s SQL. Umí zjistit, jaké hodnoty SQL byl spuštěn s výhodami Poskytuje cestu provedení Poskytuje počty řádků Umí určit časování všech událostí spojených s SQL. Umí zjistit, s jakými hodnotami byl SQL spuštěn Nevýhody Sledovací soubor se může snadno vyčerpat kvůli všem informacím, které musí Oracle zapsat do trasovacího souboru, a pak jsou v trasovacím souboru dostupné pouze částečné informace. |
Existují i jiné způsoby, jak provádět sledování. Zde jsou některé z těchto
(1) ORADEBUG
To vyžaduje přihlášení jako sysdba
oradebug setospid 1111 -- Relace ladění se zadaným procesem Oracle idoradebug setorapid 1111 --- Relace ladění se zadaným kontextem názvu trasování události 10046 OS processoradebug navždy, úroveň 4; kontext trasování názvu události oradebug 10046 vypnutý; --- Tímto zakážete traceoradebug close_trace --- Tímto zavřete trasovací souborOradebug TRACEFILE_NAME;
(2) S Oracle 10g byly možnosti sledování SQL rozšířeny pomocí balíčku DBMS_MONITOR
PROVEĎTE dbms_monitor.session_trace_enableCo je podobné ZMĚNIT UDÁLOSTI SADA SADA SEKCÍ '10046 kontext názvu trasování navždy, úroveň 2';VYKONAT dbms_monitor.session_trace_enable (binds=>true);Což je podobný název ALTER SEZNAM SET 104 úrovně 106;PROVEĎTE dbms_monitor.session_trace_enable (waits=>true);Což je podobné UDÁLOSTI ALTER SEDSION SET UDÁLOSTI '10046 kontextu názvu trasování navždy, úroveň 8';PROVEĎTE dbms_monitor.session_trace_enable('sid','serial.set je podobné#'cudb_systems 'sid','serial',10046,2,'');PROVEĎTE dbms_monitor.session_trace_enable ('sid','serial#',binds=>true);Což je podobné.execute dbms_system.set_ev('sid','serial' ,10046,4,'');EXECUTE dbms_monitor.session_trace_enable ('sid','serial#',waits=>true);Což je podobnéexecute dbms_system.set_ev('sid','serial',10046,8,'' );
V dbms_monitor je k dispozici mnoho dalších funkcí. Můžeme povolit trasování na základě identifikátoru klienta a několika způsoby
Jak identifikovat soubory trasování
Můžeme identifikovat trasovací soubory pomocí spid relace. Také trasovací soubor bude na začátku trasovacího souboru obsahovat pár sid,serial#.
Níže uvedený dotaz lze použít k nalezení místního souboru trasování relace
vyberte c.value || '/' || d.instance_name ||'_ora_' || a.spid || '.trc' trace from 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'/
Existuje další snadný způsob, jak identifikovat trasovací soubor, který se nazýváidentifikátor trasování
alter session set tracefile_identifer=’ORAC’; Toto je identifikátor
Ukázkový soubor trasování
Soubor sledování /app/oracle/TEST/diag/rdbms/test/TEST/trace/TEST_ora_13025_IDEN.trcOracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bitová produkce s dělením, skutečnými aplikačními clustery, OLAP, dolováním dat a Možnosti testování skutečných aplikacíORACLE_HOME =/app/oracle/TEST/11.2.0/db Název systému: SunOS12Node Name:sun12Release: 5.10Version: Generic_144488-11Machine: sun4uInstance Name:tento proces 202Uracleni:2 připojený procesem TESTRedoni:2 vlákno připojeno podle tohoto procesu TESTRedoni 13 , obrázek:[email protected] SunOS12*** 2013-10-21 12:28:56.461*** ID SEKCE:(3875.17341) 2013-10-21 12:28:56.461*** ID KLIENTA:() 2013 -10-21 12:28:56.461*** NÁZEV SLUŽBY:(TEST) 2013-10-21 12:28:56.461*** NÁZEV MODULU:([email protected](TNS V1-V3)) 2013-10 -21 12:28:56.461*** NÁZEV AKCE:() 2013-10-21 12:28:56.461CLOSE #4:c=0,e=11,dep=1,type=1,tim=8866891135825=====================PARSOVÁNÍ V KURZORU #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=0kxsbbbfp=0kxsbbbfp=0kxsbbbfp=0kxsbbb7128 affnbffff=126 blffnbff=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=8866891138429 ZAVŘÍT #5:c=0,e=5,dep=1,type=3,tim=8866891138503======================PARSOVÁNÍ V KURZORU č. 4 len=230 dep=1 uid=173 oct=3 lid=173 tim=8866891138634 hv=3575592451 ad='3aeea3da0' sqlid='55dc767ajydh3'SELECT PROFILE_OPTION_OPTION_VALUE_PROFIS WROM FND_OPTION ERE PROFILE_OPTION_ID =:B4 AND APPLICATION_ID =:B3 AND LEVEL_ID =10003 AND LEVEL_VALUE =:B2 A LEVEL_VALUE_APPLICATION_ID =:B1 A PROFILE_OPTION_VALUE NENÍ NULLEND OF STMTBINDS #2xlcd2m=#0m maltxlcd2m=#0m 00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=96 off=0kxsbbbfp=ffffffff7d677b68 bln=22 avl=03 flg=05value=12204Bind=12204Bind=1204Bind) mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 vypnuto=24kxsbbbfp=ffffffff7d677b80 bln=22 avl=02 flg=01value#l=20000Bind=20acdtymx0 =00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=48kxsbbbfp=ffffffff7d677b98 bln=22 avl=04 o flg=0302#3 lg=0302 mxd=502 ) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 frm=00 csi=00 siz=0 off=72kxsbbbfp=ffffffff7d677bb0 bln=22 avl=01 e flg=01=0val #C4:cEXE=01 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 9050ZAVŘÍT #4:c=0,e=2,dep=1,type=3,tim=8866891139116======================PARSOVÁNÍ V KURZORU č. 5 len =191 dep=1 uid=173 oct=3 lid=173 tim=8866891139308 hv=303338305 ad='3bedf0e48' sqlid='7qs7fx89194u1' SELECT PROFILE_OPTION_VALUE =IDLE_OPTION_VALUE FROM:WIDREBTION_PROFID LEVEL_VALUE =:B1 A PROFILE_OPTION_VALUE NENÍ NULLEND OF STMTBINDS #5:Bind#0oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00oacflg=03 fl2=1206001 fr sim c 96 off=0kxsbbbfp=ffffffff7d673b78 bln=22 avl=03 flg=05value=1204Bind#1oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=0000 fl 203=00=0 siz=0 off=24kxsbbbfp=ffffffff7d673b90 bln=22 avl=02 flg=01value=800Bind#2oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00fl60 pre=0 m=00 flg 0=0=0 =00 siz=0 off=48kxsbbbfp=ffffffff7d673ba8 bln=22 avl=04 flg=01value=10001
jak zkontrolovat, zda je v oracle povoleno sledování
Pokud jste povolili trasování pomocí balíčku DBMS_MONITOR, můžeme zkontrolovat, zda je trasování povoleno pomocí níže uvedeného dotazu
nastavení řádků 180col modul pro a45col sql_trace_waits pro a20col sql_trace_binds pro a20col sql_trace pro a20select username,module,sid,sql_trace,sql_trace_waits,sql_trace_binds z v$session/ENAB>kde sqlPokud je povolena jinými metodami, pak jediným způsobem, jak zkontrolovat, je podívat se na umístění trasování a najít trasovací soubory, které jsou nedávné, a pak v něm najít sid a serial# a pak můžete dotazem v$session najít relaci a pokud chcete, můžete trasování zakázat
Nástroj Oracle tkprof
Trasovací soubory získané výše uvedenou metodou jsou v nezpracované formě, kterou lze převést do čitelnějšího formátu pomocí nástroje tkprof (utilita Transient Kernel PROFile )
tkprofUsage:výstupní soubor sledovacího souboru tkprof [explain=] [table=][print=] [insert=] [sys=] [sort=]table=schema.tablename Použijte 'schema.tablename' s možností 'explain='. explain=user/password Připojte se k ORACLE a vydejte EXPLAIN PLAN.print=integer Vypište pouze první „celé“ příkazy SQL.aggregate=yes|noinsert=název souboru Uveďte příkazy SQL a data uvnitř příkazů INSERT.sys=no TKPROF neuvádí SQL příkazy spuštěné jako uživatel SYS.record=filename Zaznamenejte nerekurzivní příkazy nalezené v souboru trasování.waits=yes|no Zaznamenejte souhrn všech událostí čekání nalezených v souboru trasování.sort=option Sada nula nebo více z následujících možností řazení :prscnt počet volání analýzyprscpu čas procesoru parsingprsela uplynulý čas analýzy prsdsk počet čtení disku během analýzy prsqry počet vyrovnávacích pamětí pro konzistentní čtení během parseprscu počet vyrovnávacích pamětí pro aktuální čtení během parseprsmis počet chyb v mezipaměti knihovny během exexecnt ecute byl nazýván execpu čas procesoru strávený prováděním exeela uplynulý čas prováděním exedsk počet čtení disku během provádění exeqry počet vyrovnávacích pamětí pro konzistentní čtení během provádění počet vyrovnávacích pamětí pro aktuální čtení během prováděníexerow počet řádků zpracovaných během prováděníexemis počet vynechání mezipaměti knihovny během provádění exeqry počet kolikrát bylo načtení zavolánofchcpu čas procesoru strávený načítánímfchela uplynulý čas načítánífchdsk počet čtení disku během načítání fetchfchqry počet vyrovnávacích pamětí pro konzistentní čtení během načítání počet vyrovnávacích pamětí pro aktuální čtení během načítání fchrow počet řádků načtených před kurzorem uživatele, který přešel na ID uživateleNěkteré příklady
tkprof soubor.trc soubor.txt sys=no vysvětlení=uživatelské jméno/heslo řazení=prsela,exeela,fchelatkprof soubor.trc soubor.txt sys=no vysvětlení=uživatelskéid/heslo sort=prsela,exeela,soubor fchelatkprof.trc .txt sys=notkprof soubor.trc soubor.txt sys=no vysvětlení=uživatelské jméno/heslo sort=prsela,exeela,fchelaTento tisk pouze 10 sql tkprof .trc elaps.prf sys=no explain=apps/ sort=(prsela,exeela,fchela) print=10Tento tisk všech sql tkprof .trc elaps.prf sys=no explain=apps/apps sort=prsela,exeela,fchelaUkázkový obsah souboru tkprof
TKPROF:Vydání 11.2.0.4.0 – Výroba v úterý 17. ledna 14:12:41 2013Autorská práva (c) 1982, 2007, Oracle. Všechna práva vyhrazena. Soubor trasování:TEST_ora_15941.trc Možnosti řazení:execpu fchcpu****************************************** ************************************************* počet =počet případů OCI procedura byla provedenaCPU =čas CPU v sekundách executingelapsed =uplynulý čas v sekundách executingdisk =počet fyzických čtení vyrovnávacích pamětí z diskového dotazu =počet vyrovnávacích pamětí získaných pro konzistentní proud čtení =počet vyrovnávacích pamětí získaných v aktuálním režimu (obvykle pro aktualizaci) řádků =počet řádků zpracováno načtením nebo provedením hovoru***************************************************** ************************************** SQL ID:6w82ggrtysxPlan Hash:2325776775SELECT FUNCTION_NAME Z FND_USER_DESKTOP_OBJECTS WHERE USER_ID =:b1 AND APPLICATION_ID =:b2 AND ODPOVĚDNOST_ID =:b3 A TYP ='FUNKCE' A ŘÁDEK <=10 SEŘADIT PODLE SEKVENCE volání počet cpu -- - - - - - - - - - - - - - - ---- ---------- ---------- ---------- ---------- ---------- Parse 1 0,00 0,00 0 0 0 0 0 0 0 0 0 0 0 0 PETCH 2 0,00 0,00 0 4 0 1 ------ ------ -------- --- ---------- ---------- ---------- ---------- ------- --- Celkem 4 0,00 0,00 0 4 0 1 misses v mezipaměti knihovny Během analýzy:0optimizer Režim:All_rowsParsing ID:173 (Apps) Počet zachycených statistik plánu:1rows (1.) Řádky (AVG) Řádky (max) Operace zdroje řádku --------- ---------- ---------- --------------------- ------------------------------1 1 1 SEŘADIT PODLE (cr=4 pr=0 pw=0 čas=0 us cena=6 velikost=41 karta=1)1 1 1 ZAPOČET STOPKEY (cr=4 pr=0 pw=0 čas=0 us)1 1 1 PŘÍSTUP K TABULCE PODLE INDEXU UŽIV. =0 nás cena =5 velikost =41 karty =1) 1 1 1 INDEXOVÝ ROZSAH S CAN FND_USER_DESKTOP_OBJECTS_N1 (cr=3 pr=0 pw=0 čas=0 us cena=3 velikost=0 karta=3)(id objektu 33596) Řádky Plán provádění------- ---------- ------------------------------------------0 ZVOLTE VÝKAZ REŽIM:VŠECHNY_ŘÁDKY1 SEŘADIT ( ORDER BY)1 COUNT (STOPKEY)1 REŽIM PŘÍSTUPU K TABULCE :ANALYZOVÁNO (BY INDEX ROWID) OF'FND_USER_DESKTOP_OBJECTS' (TABLE)1 INDEX na J REŽIM:ANALYZED (RANGE SCAN) 1x čekání OF'FND_OBJEKT_USER Událost čekala na Časy Max. Čekat Celkem čekáno---------------------------------------- Čekano ------ ---- ------------SQL*Čistá zpráva klientovi 5 0,00 0,00 SQL*Čistá zpráva od klienta **** **** **** 0 **** **** 0 . ******************************************************* ************** SQL ID:276ut2ywquxPlan Hash:3856112528select object_name, icon_namefromfnd_desktop_objectscall count cpu uplynulo disk - dotaz - - ---- - - ----- -- ---------- ---------- ---------- ---------- -------- -Parse 1 0,00 0,00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PETCH 3 0,00 0 6 0 47 ------ -------- ----- ----- ---------- ---------- ----------- ----------celkem 5 0,00 0,00 0 6 0 47 Chybí v mezipaměti knihovny d pomocí analýzy:0Režim optimalizátoru:ALL_ROWSParsing ID uživatele:173 (APPS)Počet zachycených statistik plánu:1Řádky (1.) Řádky (prům.) Řádky (max.) Operace zdroje řádků---------- ----- ----- ---------- ----------------------------------- ----------------47 47 47 PLNÝ PŘÍSTUP K TABULCE FND_DESKTOP_OBJECTS (cr=6 pr=0 pw=0 čas=0 us náklady=2 velikost=1175 karta=47) Řádky ------- ------------------------------------------- --------0 SELECT STATEMENT REŽIM:ALL_ROWS47 PŘÍSTUP K TABULCE REŽIM:ANALÝZA (PLNÁ) Z 'FND_DESKTOP_OBJECTS'(TABLE)Oracle trcsess utilita
Při použití relací sdíleného serveru je zapojeno mnoho procesů. Trasování týkající se uživatelské relace je rozptýleno v různých trasovacích souborech, které patří k různým procesům. To ztěžuje získat úplný obrázek o životním cyklu relace.
Obslužný program trcsess konsoliduje výstup trasování z vybraných trasovacích souborů na základě několika kritérií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 *trcPo vygenerování konsolidačního trasovacího souboru na něm můžete spustit tkprof.
Další informace
Ve verzi 11g a vyšší je sql_trace také událostí a lze ji nastavit pomocí syntaxe události:
SQL> název události dokumentu oradebug sql_tracesql_trace:událost pro sql traceUsage-------sql_tracewait,bind ,plan_stat ,úroveň Můžete jej tedy použít následovně, abyste povolili SQL_TRACE vyžadující informace o vazbě:
změňte události sady session 'sql_trace bind=true';nebo svázat a čekat informace (oddělené čárkou):
změňte události sady session 'sql_trace bind=true, wait=true';Další trasování lze omezit na sadu SQL_ID, pokud pro něj zahrnete filtr. Např.
změňte události sady session 'sql_trace [sql:sql_id=g3yc1js3g2689 | sql_id=7ujay4u33g337]bind=true, wait=true';10046 úrovní EVENT:(nové hodnoty sql_trace jsou zahrnuty v [..])
Toto jsou bitové hodnoty, takže je lze poskládat dohromady a získat tak různé mixy
1 – Povolit standardní funkci SQL_TRACE (výchozí)
4 – Hodnoty vazby trasování jako úroveň 1 PLUS [ bind=true ]
8 – Jak trasování úrovně 1 PLUS čeká [ wait=true ]
Toto je zvláště užitečné pro zjištění čekání na blokování atd.
Lze to ale také použít k rozpoznání úplných prohledávání tabulek a indexových skenů.Od 11g jsou k dispozici tyto další bitové úrovně:
16 – Generování výpisů řádku STAT pro každé spuštění [ plan_stat=all_executions ]
32 – Nikdy nevypisovat statistiky provádění [ plan_stat=never ]Od 11.2.0.2 je k dispozici tato další bitová úroveň:
64 – Adaptivní výpis řádků STAT. [ plan_stat=adaptive ]
Toto vypíše informace STAT, pokud SQL trvalo déle než 1 minutu, čímž
poskytne informace pro dražší SQL a pro různá provedení takových
SQL.např.:Běžná úroveň události je 12, která zahrnuje standardní výstup SQL_TRACE, vazby, čekání a
výchozí sledování řádku STAT.Poznámky:
Dumping STAT byl v 11g upraven tak, aby nebyly agregovány ve všech provedeních, ale byly odstraněny po provedení. To bylo provedeno pro řešení případů, kdy kurzor není uzavřen a informace STAT proto nejsou vypisovány.
Nyní garantujeme zachycení STAT informací po provedení. Podívejte se na výše uvedené bitové úrovně, abyste měli lepší kontrolu nad řádky STAT.Také čte
v$active_session_history
vysvětlení plánu v Oracle
sql tuning Advisor