tkprof 轉換trc檔案

oo0yuki0oo發表於2010-05-06
tkprof 的目的是將sql trace 生成的跟蹤檔案轉換成使用者可以理解的格式
1. 格式
tkprof inputfile outputfile [optional | parameters ]
引數和選項:
explain=user/password 執行explain命令將結果放在SQL trace的輸出檔案中
table=schema.table 指定tkprof處理sql trace檔案時臨時表的模式名和表名
insert=scriptfile 建立一個檔名為scriptfile的檔案,包含了tkprof存放的輸出sql語句
sys=[yes/no] 確定系統是否列出由sys使用者產生或重調的sql語句
print=number 將僅生成排序後的第一條sql語句的輸出結果
record=recordfile 這個選項建立一個名為recorderfile的檔案,包含了所有重呼叫的sql語句
sort=sort_option 按照指定的方法對sql trace的輸出檔案進行降序排序
sort_option 選項
prscnt 按解析次數排序
prscpu 按解析所花cpu時間排序
prsela 按解析所經歷的時間排序
prsdsk 按解析時物理的讀操作的次數排序
prsqry 按解析時以一致模式讀取資料塊的次數排序
prscu 按解析時以當前讀取資料塊的次數進行排序
execnt 按執行次數排序
execpu 按執行時花的cpu時間排序
exeela 按執行所經歷的時間排序
exedsk 按執行時物理讀操作的次數排序
exeqry 按執行時以一致模式讀取資料塊的次數排序
execu 按執行時以當前模式讀取資料塊的次數排序
exerow 按執行時處理的記錄的次數進行排序
exemis 按執行時庫緩衝區的錯誤排序
fchcnt 按返回資料的次數進行排序
fchcpu 按返回資料cpu所花時間排序
fchela 按返回資料所經歷的時間排序
fchdsk 按返回資料時的物理讀操作的次數排序
fchqry 按返回資料時一致模式讀取資料塊的次數排序
fchcu 按返回資料時當前模式讀取資料塊的次數排序
fchrow 按返回資料時處理的資料數量排序
例子:

Code highlighting produced by Actipro CodeHighlighter (freeware)


--&gttkprof D:oracleproduct10.2.0adminorcludump1.trc d:2.txt explain=hqt/hqt sys=no
啟動SQL Trace 之後收集的資訊包括
1.解析、執行、返回資料的次數
2.cpu和執行命令的時間
3.物理讀和邏輯讀的次數
4.系統處理的記錄數
5.庫緩衝區錯誤
SQL Trace 的輸出結果
count:提供OCI過程的執行次數
CPU: 提供執行CPU所花的時間單位是秒
Elapsed:提供了執行時所花的時間。單位是秒。這個引數值等於使用者響應時間
Disk:提供快取區從磁碟讀取的次數
Query:以一致性模式從快取區獲得資料的次數
Current:以當前模式從快取區獲得資料的次數
ROWs: 返回撥用或執行呼叫時,處理的資料行的數量。

需要調整的語句符合以下幾點:

(1),CPU佔用過多

(2),Parse,Execute,Fetch花費太多時間

(3),DISK讀取太多,query/current(SGA)中資料塊讀取太少

(4),訪問許多塊,只返回2

[@more@]

=============================

使用tkprof格式化trace檔案
Usage: tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
輸入檔案 格式化後的輸出檔案
table=schema.tablename Use 'schema.tablename' with 'explain=' option.
用於指定在將執行規劃寫進輸出檔案之前,TKPROF用於臨時存放執行規劃所用表的架構和名稱
explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
print=integer List only the first 'integer' SQL statements. 只列出輸出檔案中的第一個INTEGER的SQL語句,若忽略,則TKPROF將列出所有跟蹤的SQL語句
aggregate=yes|no 若使用者指定AGGREGATE=NO,TKPROF將不會對相同SQL文字的多個使用者進行彙總
insert=filename List SQL statements and data inside INSERT statements. SQL指令碼的一種,用於將跟蹤檔案的動機資訊儲存到資料庫中
sys=no TKPROF does not list SQL statements run as user SYS. 於啟動或禁止將使用者SYS所釋出的SQL語句列表到輸出檔案之中,也包括遞迴SQL(為執行使用者的SQL語句,ORACLE還必須執行一些附加語句)語句在內。預設為YES
record=filename Record non-recursive statements found in the trace file. 對於跟蹤檔案中的所用非遞迴SQL語句,TKPROF 將以指定的名稱來建立某個SQL指令碼。用於對跟蹤檔案中的使用者時間進行重放
waits=yes|no Record summary for any wait events found in the trace file.
sort=option Set of zero or more of the following sort options: 在將被跟蹤的SQL語句列表輸出到跟蹤檔案之前,先將其按照指定排序選項的降序關係對其進行排序;若指定了多種排序選項,那麼根據排序選項所指定值的和的降序關係對其進行排序;若忽略此引數,那麼TKPROF將按照使用次序把語句列表到輸出檔案中
prscnt number of times parse was called 語句解析的數目
prscpu cpu time parsing 語句解析所佔用的CPU時間
prsela elapsed time parsing 語句解析所佔用的時間(總是大於或等於CPU時間);
prsdsk number of disk reads during parse 語句解析期間,從磁碟進行物理讀取的數目
prsqry number of buffers for consistent read during parse 語句解析期間,一致模式塊讀取(CONSISTENT MODE BLOCK READ)的數目
prscu number of buffers for current read during parse 語句解析期間,當前模式讀取(CURRENT MODE BLOCK READ)的數目
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 語句執行所佔用的時間(總是大於或等於CPU時間)
exedsk number of disk reads during execute 語句執行期間,從磁碟進行物理讀取的數目
exeqry number of buffers for consistent read during execute 語句執行期間,一致模式塊讀取(CONSISTENT MODE BLOCK READ)的數目
execu number of buffers for current read during execute 語句執行期間,當前模式讀取(CURRENT MODE BLOCK READ)的數目
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 取資料所佔用的時間(總是大於或等於CPU時間)
fchdsk number of disk reads during fetch 取資料期間,從磁碟進行物理讀取的數目
fchqry number of buffers for consistent read during fetch 取資料期間,一致模式塊讀取(CONSISTENT MODE BLOCK READ)的數目
fchcu number of buffers for current read during fetch 取資料期間,當前模式讀取(CURRENT MODE BLOCK READ)的數目
fchrow number of rows fetched 所獲取的行數
userid userid of user that parsed the cursor

------------------------------------------------

SELECT a.VALUE||b.symbol||c.instance_name||'_ora_'||d.spid||'.trc' TRACE_FILE_NAME
FROM (SELECT VALUE FROM v$parameter WHERE NAME='user_dump_dest') a,
(SELECT SUBSTR(VALUE,-6,1) symbol FROM v$parameter WHERE NAME='user_dump_dest') b,
(SELECT instance_name FROM v$instance) c,
(SELECT spid FROM v$session s,v$process p,v$mystat m
WHERE s.paddr=p.addr AND s.SID=m.SID AND m.statistic#=0) d

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

相關文章