oracle 读懂10046视频,10046、10053、实操记录
10046是一個(gè)Oracle的內(nèi)部事件(event),通過(guò)設(shè)置這個(gè)事件可以得到Oracle內(nèi)部執(zhí)行系統(tǒng)解析、調(diào)用、等待、綁定變量等詳細(xì)的trace信息,即幫助我們解析一條/多條SQL、PL/SQL語(yǔ)句的運(yùn)行狀態(tài),這些狀態(tài)包括:Parse/Fetch/Execute三個(gè)階段中遇到的等待事件、消耗的物理和邏輯讀、CPU時(shí)間、執(zhí)行計(jì)劃等。它不僅為我們揭示了一條、多條SQL的運(yùn)行情況,同時(shí)還能幫我們分析一些DDL維護(hù)命令的內(nèi)部工作原理,RMAN、Data Pump Expdp/impdp等工具緩慢問(wèn)題。對(duì)于SQL性能優(yōu)化、分析系統(tǒng)的性能有著非常重要的作用。
10053:我們可以通過(guò)10046事件看到一個(gè)SQL的執(zhí)行的統(tǒng)計(jì)信息,以及執(zhí)行計(jì)劃,但是我們只看到了CBO最終告訴我們的執(zhí)行結(jié)果,卻并不知道CBO為什么要這么選擇,那么就可以通過(guò)10053事件來(lái)生成SQL分析的整個(gè)過(guò)程到trace文件中,通俗點(diǎn)講10053跟蹤選路過(guò)程,10046產(chǎn)生結(jié)果。(10053可參考鏈接:https://blog.51cto.com/5073392/1308900)
10046最常用的操作步驟(10053步驟類似,把事件改成10053就行,但是10053 TRC不能通過(guò)tkprof格式化)
1.開啟10046跟蹤事件
alter session set events '10046 trace name context forever, level 12';
如果想更容易標(biāo)識(shí)trace文件,在開啟事件之前,可以先設(shè)置trace的標(biāo)識(shí)
alter session set tracefile_identifier='lych';
2.執(zhí)行要跟蹤的sql語(yǔ)句(對(duì)應(yīng)的trace文件中有SQL的執(zhí)行情況)
select * from lych;
3.停止10046事件跟蹤
alter session set events '10046 trace name context off';
4.定位此次生成的trace文件
select distinct(m.sid),p.pid,p.tracefile from v$mystat m,v$session s,v$process p where m.sid=s.sid and s.paddr=p.addr;
5.用tkprof工具格式化文件輸出
tkprof /source.trc /new.trc aggregate=yes sys=yes wait=yes sort=fchela
explain:參數(shù)格式為explain=username/password@server_name 或者explain=username/password,這個(gè)參數(shù)是通過(guò)執(zhí)行explain plan語(yǔ)句來(lái)做到的,在trace文件中找到每個(gè)sql語(yǔ)句,提供一個(gè)執(zhí)行計(jì)劃。一般不是必要情況,指定這個(gè)參數(shù)并不可取,一旦指定了無(wú)效的信息,在輸出的文件就會(huì)出現(xiàn)error。
table:table參數(shù)只和explain參數(shù)一起使用,用來(lái)指定某個(gè)表被explain plan語(yǔ)句使用來(lái)生成執(zhí)行計(jì)劃,通常盡量避免使用table參數(shù),這里就不詳細(xì)說(shuō)明不常用的參數(shù)了,大家想要了解的話,可以查看oracle的官方聯(lián)機(jī)文檔。
print:參數(shù)用來(lái)限制輸出文件生成的sql語(yǔ)句的數(shù)量,默認(rèn)是無(wú)限制的。eg:只輸出10個(gè)sql語(yǔ)句,則參數(shù)指定print=10,一般和sort參數(shù)一起使用才具有一定的意義。
insert:生成sql腳本,腳本可以用來(lái)把數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。eg:insert=load_data.sql 。
sys:參數(shù)執(zhí)行sys用戶下運(yùn)行的sql語(yǔ)句是否寫入到輸出文件,默認(rèn)為yes。可設(shè)置為no,避免輸出不必要的信息,這個(gè)看情況而定吧。
sort:排序的意思,指定輸出文件里面的sql語(yǔ)句的順序,默認(rèn)是trace源文件里面的sql順序。你可以指定根據(jù)cpu時(shí)間,物理讀的塊數(shù),調(diào)用次數(shù)等進(jìn)行排序,eg:sort=elapsed,disk —多個(gè)排序用逗號(hào)隔開。
aggregate:參數(shù)指定是否合并相同的sql,默認(rèn)為yes,設(shè)置為no,輸出文件就會(huì)列出每個(gè)sql的消耗情況等信息。用得比較多的一般是sys和aggregate參數(shù)。
實(shí)操記錄:
昨天生產(chǎn)其中一個(gè)PDB出現(xiàn)很奇怪的現(xiàn)象,庫(kù)中每個(gè)表,視圖查詢都很慢,經(jīng)過(guò)多次查詢,發(fā)現(xiàn)不管什么SQL執(zhí)行都超過(guò)3秒,利用explain plan for打印執(zhí)行計(jì)劃的時(shí)候,明顯能感覺(jué)出來(lái),SQL解析非常慢,第一想法猜測(cè)是數(shù)據(jù)字典出現(xiàn)問(wèn)題,才沒(méi)打印其他日志信息的時(shí)候 ,在SYS下執(zhí)行了以下兩個(gè)包:1 exec dbms_stats.gather_dictionary_stats 2 exec dbms_stats.gather_fixed_objects_stats,之后發(fā)現(xiàn)依然還是有問(wèn)題。之后執(zhí)行一些經(jīng)過(guò)緩存的SQL發(fā)現(xiàn)執(zhí)行非常快,沒(méi)有對(duì)應(yīng)的異常現(xiàn)象,這個(gè)時(shí)候我就已經(jīng)猜到肯定是解析的時(shí)候出現(xiàn)的ORACLE內(nèi)置遞歸操作出現(xiàn)了問(wèn)題,于是根據(jù)推測(cè)打印了10046 TRC,發(fā)現(xiàn)其中一條遞歸SQL執(zhí)行了3秒多,相當(dāng)于這個(gè)庫(kù)任何一條SQL,只要是沒(méi)緩存的,起步時(shí)間都是3秒起步。查閱MOS資料后發(fā)現(xiàn)這是12c 12.1.0.2新特性“optimizer_adaptive_features”,默認(rèn)是打開的,這個(gè)特性會(huì)在執(zhí)行sql的時(shí)候自動(dòng)收集統(tǒng)計(jì)信息.關(guān)閉對(duì)應(yīng)參數(shù)后 system set optimizer_adaptive_features=false scope=both sid='*'一切恢復(fù)正常; 也可以通過(guò)關(guān)閉隱含參數(shù)實(shí)現(xiàn):
alter system set "_OPTIMIZER_DSDIR_USAGE_CONTROL"=0 SCOPE=BOTH SID='*',當(dāng)然這是一個(gè)BUG,也可以打補(bǔ)丁實(shí)現(xiàn),Oracle Database 12c 版本1的自適應(yīng)特性的建議 (Adaptive Features, Adaptive Statistics 以及 12c SQL 性能) (文檔 ID 2297986.1)
總結(jié)
以上是生活随笔為你收集整理的oracle 读懂10046视频,10046、10053、实操记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: opencv机器学习线性回归_机器学习(
- 下一篇: 解析json数据_Retrofit同时解