使用TKPROF檢視跟蹤檔案
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檔案中看到5條SQL |
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 |
如果值為NO,TKPROF不會組合相同的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),每種呼叫型別生成單獨的一行統計。其中parse是SQL語句被放入記憶體(shared pool裡的 lib cache)中的方式,execute是實際執行的語句,而fetch是從結果中獲取資料。每種型別的統計描述如下:
列 |
定義 |
call |
SQL統計 呼叫型別,parse execute fetch |
count |
這種型別的呼叫次數 |
cpu |
這個語句中所有這種型別的呼叫總CPU時間,如果沒有設定引數timed_statistics為true,這個統計值和elapsed統計值會是0. |
elapsed |
這次呼叫的總消耗時間 |
disk |
為了滿足這次呼叫,從磁碟檢索的資料塊數目,就是物理讀取數 |
query |
進行這次呼叫從記憶體檢索的資料緩衝區數目。其中select語句通常在這種模式下檢索緩衝區,也就是一致性讀的數量 |
current |
進行這種型別的呼叫從記憶體檢索的資料緩衝區數目。這種模式下,insert,update,delete,儘管select 也會使用少量緩衝區,也就是資料庫讀的數量 |
rows |
這條語句處理的總行數。Select語句所有處理的行數將出現在fetch統計行中,insert、update、delete都出現在execute中。 |
③資訊部分
資訊部分包含了分析和執行呼叫中丟失的庫快取的數量資訊。如果丟失率很高,則說明共享池大小出問題,硬蛋對庫快取的命中率和過載率進行檢查。另外這部分資訊還包括最近分析這條語句的使用者名稱和當前最佳化器模式設定資訊。
④行源操作部分
行源操作部分列出了交叉引用行操作中涉及的行的數目。其可以用來檢視是否有資料庫物件在執行跟蹤後發生了變化。
⑤執行計劃explain paln
EKPROF輸出檔案裡最重要的資訊部分,這部分第一列就是執行計劃中每一行語句所處理的行數。與explian plan中每行語句處理的行數相比,如果fetch的行數較低,就需要特別注意這條語句了,這個計劃會在EKPROF使用explian option選項時生成,如果想要檢視SQL最初執行時生成的計劃,可以用row source operation plan命令。
TKPROF輸出資訊問題追蹤:
問題 |
解決方案 |
解析階段的值太高 |
可能需要增大shared_pool_size |
磁碟讀取量太高 |
沒有使用索引或者根本沒有索引 |
Query和current值太高 |
索引的選擇性不好,刪除、限制索引。使用直方圖或點陣圖索引或許可以提高效能。表連線順序或者索引連線順序不好也有可能導致此種情況。 |
解析時間太長 |
可能開啟遊標數量有問題 |
Explain裡每一行處理的行數相對於其他語句而言太多 |
可能表示有索引對唯一鍵(列上的唯一值)進行了較差分佈。還可能是語句寫的較差。 |
解析期間庫快取丟失率大於1 |
表明需要過載這條語句,可以增大init.ora檔案中的shared_pool_size,或者執行一次較好的共享SQL任務。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27067062/viewspace-2127398/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- 轉:使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- tkprof: 分析ORACLE跟蹤檔案Oracle
- SQL跟蹤工具和TKPROF使用SQL
- 利用tkprof檢視trace檔案
- 檔案-跟蹤檔案
- [zt] oracle跟蹤檔案與跟蹤事件Oracle事件
- oracle跟蹤檔案與跟蹤事件(zt)Oracle事件
- oracle跟蹤檔案和跟蹤事件(zt)Oracle事件
- Oracle跟蹤檔案Oracle
- Oracle跟蹤檔案trace檔案Oracle
- 解析listener跟蹤檔案
- git 忽略跟蹤檔案Git
- 尋找跟蹤檔案
- 基礎知識3——警報日誌,跟蹤檔案,各種檢視
- 控制檔案的跟蹤檔案全文
- Git跟蹤與提交檔案Git
- 獲取跟蹤檔案位置
- 獲取跟蹤檔案_eygle
- 跟蹤 sql 的trace檔案SQL
- Oracle 跟蹤檔案和檔案轉儲(dump)Oracle
- ORACLE 10046 設定跟蹤事件後無跟蹤檔案Oracle事件
- .gitignore忽略跟蹤指定檔案Git
- git clean清除未跟蹤檔案Git
- git刪除未跟蹤檔案Git
- git列出跟蹤的檔案列表Git
- 跟蹤session 與 trace檔案分析Session
- oracle 跟蹤檔案理論整理Oracle
- 跟蹤SESSION 與 trace 檔案解析Session
- 跟蹤一次trc檔案
- sql_trace生成及使用tkprof檢視trace fileSQL
- 使用oradebug來獲取跟蹤檔案的位置
- 使用HANGANALYZE跟蹤檔案診例項hang問題
- git列出所有已經跟蹤檔案Git
- ORACLE 跟蹤檔案詳細解釋Oracle
- 請教關於利用跟蹤檔案重建控制檔案
- 使用SQL_TEACE的跟蹤檔案分析執行計劃SQL
- 12c 程式跟蹤檔案異常