使用TKPROF檢視跟蹤檔案

yepkeepmoving發表於2016-11-01


tkprof
是安裝資料自帶的檢視跟蹤檔案的命令工具,其將跟蹤檔案xx.trc轉化為易於閱讀的xx.prf檔案,其在建立跟蹤檔案的同時也可以執行tkprof程式。

TKPROF語法格式:
    tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ] [waits=] [aggregate = ] [record=]

TKPROF選項:

引數值

定義

tracefile

SQL Trace的跟蹤檔名稱,例如sid_ora_pid.trc

output_file

TKPROF寫入的跟蹤檔案轉換格式後的名字,例如sid_ora_pid.prf

print=number

包含在輸出結果中的語句數目,如果沒有這個引數,TKPROF將輸出列中的所有的語句,輸出跟蹤檔案中幾條解析的SQL數目,如果設定為5,則只能在prf檔案中看到5SQL

Explain =username/password

在跟蹤檔案裡對使用者的SQL進行explain plan,這個使用者建立自己的paln_table,因此使用者需要建立表和建立表空間的許可權。在TKPROF執行結束會刪除這個表。確保使用的解析遊標(執行查詢)的使用者的使用者密碼是正確,從而確保是該使用者的explain table

insert=filename

生成建立表的指令碼,併為跟蹤的每條SQL語句儲存跟蹤檔案統計

record=filename

生成一個儲存使用者所有SQL語句的檔案

sys=yes|no

這個選項可以再輸出結果裡不顯示請求遞迴SQL語句的使用者(由sys執行)。預設是YES,遞迴的SQL通常包括內部呼叫和表的維護,比如在插入操作時將區extent新增到表中。設定為NO不顯示除了sys使用者呼叫以外的SQL

sort=parameters

排序選項

prscnt  number of times parse was called 解析階段消耗的時間

prscpu  cpu time parsing 解析階段消耗的CPU時間

prsela  elapsed time parsing

prsdsk  number of disk reads during parse

prsqry  number of buffers for consistent read during parse

prscu   number of buffers for current read during parse

prsmis  number of misses in library cache during parse

execnt  number of execute was called

execpu  cpu time spent executing執行的CPU時間

exeela  elapsed time executing

exedsk  number of disk reads during execute 指定階段的磁碟度

exeqry  number of buffers for consistent read during execute

execu   number of buffers for current read during execute

指定階段的記憶體讀

exerow  number of rows processed during execute執行階段處理的行數

exemis  number of library cache misses during execute

fchcnt  number of times fetch was called

fchcpu  cpu time spent fetching 資料提取階段的CPU時間

fchela  elapsed time fetching

fchdsk  number of disk reads during fetch 資料提取階段的硬碟讀

fchqry  number of buffers for consistent read during fetch

fchcu   number of buffers for current read during fetch

資料讀取階段的記憶體讀

fchrow  number of rows fetched 取出的行數

userid  userid of user that parsed the cursor

多個排序操作可以使用,sort = para1 sort=para2

waits=yes|no

任何等待事件的記錄概要

aggregate=yes|no

如果值為NOTKPROF不會組合相同的SQL文字為多個使用者

table=schema.table

TKPROF在將執行計劃寫入輸出檔案之前臨時放置他們的表

     































































TKPROF
舉例:

         1 列出5個打頭的CPU的時間(資料提取+執行+解析)的結果

         tkprof testdb_ora_29541_MYSQLTRACE.trc 29541.prf explain=system/oracle sort=fchcpu,execpu,prscpu print=5

         2 忽略掉所有遞迴語句

         tkprof testdb_ora_6214.trc testdb_ora_6214_02.prf explain=system/oracle sys=no

         3 建立一個檔案,檔案內容是建立一個表,並向其中插入透過跟蹤得到的記錄

         tkprof testdb_ora_6214.trc testdb_ora_6214_05.prf explain=scott/tiger  insert=insert_name

         4 建立顯示跟蹤會話的檔案

         tkprof testdb_ora_6214.trc testdb_ora_6214_06.prf explain=system/oracle  record=record_name

         TKPROF輸出檔案內容:

         其輸出內容主要包括SQL語句、統計、資訊和Explan Plan等。

        

         SQL語句

         TKPROF輸出檔案第一部分就是SQL語句,和所執行的SQL完全一樣,包括SQL語句裡的任何提示和註釋,輸出也會保留這些內容,where語句中的謂詞如果有繫結變數:1會顯示繫結變數:1而不是實際的文字內容。

 

         統計部分

         包含這條SQL語句以及為了滿足該語句而生成的所有的遞迴SQL語句統計。該資訊有8部分組成,第一列是對資料庫的呼叫型別(分析parse,執行execute,資料提取fetch),每種呼叫型別生成單獨的一行統計。其中parseSQL語句被放入記憶體(shared pool裡的 lib cache)中的方式,execute是實際執行的語句,而fetch是從結果中獲取資料。每種型別的統計描述如下:

定義

call

SQL統計 呼叫型別,parse execute fetch

count

這種型別的呼叫次數

cpu

這個語句中所有這種型別的呼叫總CPU時間,如果沒有設定引數timed_statisticstrue,這個統計值和elapsed統計值會是0.

elapsed

這次呼叫的總消耗時間

disk

為了滿足這次呼叫,從磁碟檢索的資料塊數目,就是物理讀取數

query

進行這次呼叫從記憶體檢索的資料緩衝區數目。其中select語句通常在這種模式下檢索緩衝區,也就是一致性讀的數量

current

進行這種型別的呼叫從記憶體檢索的資料緩衝區數目。這種模式下,insert,update,delete,儘管select 也會使用少量緩衝區,也就是資料庫讀的數量

rows

這條語句處理的總行數。Select語句所有處理的行數將出現在fetch統計行中,insertupdatedelete都出現在execute中。

 

         資訊部分

         資訊部分包含了分析和執行呼叫中丟失的庫快取的數量資訊。如果丟失率很高,則說明共享池大小出問題,硬蛋對庫快取的命中率和過載率進行檢查。另外這部分資訊還包括最近分析這條語句的使用者名稱和當前最佳化器模式設定資訊。

        

 

         行源操作部分

         行源操作部分列出了交叉引用行操作中涉及的行的數目。其可以用來檢視是否有資料庫物件在執行跟蹤後發生了變化。

        

         執行計劃explain paln

         EKPROF輸出檔案裡最重要的資訊部分,這部分第一列就是執行計劃中每一行語句所處理的行數。與explian plan中每行語句處理的行數相比,如果fetch的行數較低,就需要特別注意這條語句了,這個計劃會在EKPROF使用explian option選項時生成,如果想要檢視SQL最初執行時生成的計劃,可以用row source operation plan命令。


TKPROF
輸出資訊問題追蹤:

 

問題

解決方案

解析階段的值太高

可能需要增大shared_pool_size

磁碟讀取量太高

沒有使用索引或者根本沒有索引

Querycurrent值太高

索引的選擇性不好,刪除、限制索引。使用直方圖或點陣圖索引或許可以提高效能。表連線順序或者索引連線順序不好也有可能導致此種情況。

解析時間太長

可能開啟遊標數量有問題

Explain裡每一行處理的行數相對於其他語句而言太多

可能表示有索引對唯一鍵(列上的唯一值)進行了較差分佈。還可能是語句寫的較差。

解析期間庫快取丟失率大於1

表明需要過載這條語句,可以增大init.ora檔案中的shared_pool_size,或者執行一次較好的共享SQL任務。

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27067062/viewspace-2127398/,如需轉載,請註明出處,否則將追究法律責任。

相關文章