sql跟蹤及tkprof使用

2021-09-07 11:19:04 字數 3320 閱讀 6421

在oracle資料庫中,awr是關於資料庫系統總體的負載情況和運**況的報告。而當系統負載都顯示正常,而client執行某些動作響應非常慢,或者某些終端連線的會話執行緩慢或異常時,就須要用到會話級別的跟蹤了。

session級別跟蹤的方法有很多。比方當前會話的跟蹤,能夠執行命令

alter session set sql_trace=true;

alter session set sql_trace=false;

或者使用10046事件

alter session set events 『10046 trace name context forever,level 12』;

alter session set events 『10046 trace name context off』

當中level 12是可選級別。

level 1是指標準的sql跟蹤。與設定sql_trace效果同樣。

level 4是指在標準的基礎上新增繫結變數資訊。

level 8是指在標準的基礎上新增等待事件資訊。

level 12是指在標準的基礎上同一時候新增繫結變數資訊和等待事件資訊。

以上樣例是在session級別進行跟蹤。若環境中須要在整個例項級別進行跟蹤,則直接將以上命令中的session更改為system就可以實現。

但系統級別的跟蹤將消耗大量的系統資源,因此,若非效能診斷須要。不要開啟在系統級別的sql_trace。

方法有非常多。會用一種即可。以下我們說下我推薦的一種方法。

首先,能夠設定trace檔案標誌。使我們的trace檔案更easy找出來。

alter session set tracefile_identifier=』wjf』;

之後開啟計時

alter system set timed_statistics=true;

然後查詢到要跟蹤會話的sid與serial#,

select sid,serial#,osuser,machine from v$session;

找到sid與serial#後,就能夠執行跟蹤了。比方sid=22,serial#=22;

執行下面命令

exec dbms_monitor.session_trace_enable(22,22,waits=>true,binds=>true);

exec dbms_monitor.session_trace_disable(22,22);

當中waits=>true跟binds=>true想必也不用解釋了。

追蹤後的trc檔案能夠在diagnostic_dest資料夾下找到。可是直接追蹤產生的trc檔案可讀性並不好,須要借助乙個oracle提供的工具處理下面。這個工具就是tkprof。

比如我們此處生成trc檔名為orcl_ora_1234_wjf.trc.

則我們須要在系統級別。即退出sqlplus。在shell或cmd下執行下面命令

這樣就能生成可讀性較強的追蹤檔案進行分析了。tkprof工具必須輸入的兩個引數也就是乙個輸入檔案。乙個輸出檔案而已。

但tkprof另一些其它引數,非常多時候須要利用其它引數來生成檔案,從而更方便找出問題。

tkprof filename1filename2 [waits=yes|no] [sort=option] [print=n]

[aggregate=yes|no] [insert=filename3] [sys=yes|no] [table=schema.table]

[explain=user/password] [record=filename4] [width=n]

介紹幾個自我感覺比較經常使用的引數

waits=yes|no:是否包括等待事件資訊。

print=n:設定顯示多少行sql。比方你設定了排序資訊,能夠僅僅檢視top 10的sql,就能夠設定print=10了。

sys=yes|no:設定是否包括sys使用者所公布的sql。主要是為了啟動或禁止顯示使用者為執行自己的sql所產生的遞迴sql。默覺得yes。

sort=option:設定生成sql依據指定選項進行排序。

prscnt  number oftimes parse was called

prscpu  cpu timeparsing

prsela  elapsedtime parsing

prsdsk  numberof disk reads during parse

prsqry  numberof buffers for consistent read during parse

prscu   numberof buffers for current read during parse

prsmis  numberof misses in library cache during parse

execnt  numberof execute was called

execpu  cputime spent executing

exeela  elapsedtime executing

exedsk  numberof disk reads during execute

exeqry  numberof buffers for consistent read during execute

execu   numberof buffers for current read during execute

exerow  numberof rows processed during execute

exemis  numberof library cache misses during execute

fchcnt  numberof times fetch was called

fchcpu  cputime spent fetching

fchela  elapsedtime fetching

fchdsk  numberof disk reads during fetch

fchqry  numberof buffers for consistent read during fetch

fchcu   numberof buffers for current read during fetch

fchrow  numberof rows fetched

userid  useridof user that parsed the cursor

其它另一些引數。詳細能夠檢視聯機文件中的performance tunning guide。

所以。乙個比較正常的tkprof語句可能是這個樣子的

就這樣了。就像生成awr報告一樣,生成檔案永遠是最簡單的。能把生成的報告讀的多透徹才是見功底的東西。在此。我只把生成報告的過程做個記錄,至於怎麼讀,慢慢再說。

SQL效能優化工具TKPROF

全名為trace kernel profile,用來格式化跟蹤檔案,是乙個命令列工具。主要的格式例如以下 tkprof tracefile outputfile tracefile 要分析的trace檔案 outputfile 格式化後的檔案 可選引數及說明例如以下 explain 為每乙個sql語...

跟蹤使用者的SQL

serial sid addr sql id sql text v session 正在連線的回話 v stransaction 測試伺服器壓力大不大,代表還沒commit的dml操作 v lock 生命週期從dml語句開始,到dml語句結束 v sql 當前使用者的sql語句,sql id has...

OD hit跟蹤 run跟蹤使用問題

剛學習od不久,現在使用hit跟蹤 run跟蹤功能,在我的程式裡碰到點問題,還請賜教 選了一部分 新增到hit跟蹤,在選的 處設定斷點,程式執行到斷點,按單步跟蹤,當執行到第二個push時,程式就退出。我換了個自己寫的簡單程式,也有這個問題,是不是我的od設定有問題?還是程式問題問題?設定hit跟蹤...