转:使用 Tkprof 分析 ORACLE 跟踪文件
【README】 昨天在驗證oracle 數據庫性能的時候,查詢日志中 打出了 exec time , fetch time 不懂什么意思,所以就記錄了下;?
A 表 680w, count 耗時5秒;
B表 2013w, count 耗時10秒;?
A inner join B 連表查詢 100 個客戶, 耗時? 0.036/0.756秒 exec/fetch 返回 470條記錄;?
A inner join B 連表查詢 500 個客戶, 耗時? 0.138/3.382秒 exec/fetch 返回 2300條記錄;?
?
轉自:?https://blog.csdn.net/tianlesoftware/article/details/5632003?
Tkprof是一個用于分析Oracle跟蹤文件并且產生一個更加清晰合理的輸出結果的可執行工具。如果一個系統的執行效率比較低,一個比較好的方法是通過跟蹤用戶的會話并且使用Tkprof工具使用排序功能格式化輸出,從而找出有問題的SQL語句。
一.?TKPROF?命令語法:
TKPROF??filename1,?filename2?[?SORT??=?[?opion][,option]?]
??[??PRINT?=?integer?]
??[?AGGREGATE??=?[?YES?|?NO?]?]
??[?INSERT?=?filename3?]
??[?SYS?=?[?YES?|?NO?]??]
??[??[?TABLE?=?schema.table?]?|?[?EXPLAIN?=?user/password?]??]
??[??RECORD?=?filename?]
?
相關說明:
filename1??指定的輸入文件,可以是多個文件聯起來。
Filename2??格式化輸出文件。
SORT?????在輸出到輸出文件前,先進程排序。如果省去,則按照實際使用的順序輸出到文件中。排序選項有以下多種:
??prscnt??number?of?times?parse?was?called
??prscpu??cpu?time?parsing
??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
??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
??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
PRINT????????只列出輸出文件的第一個integer?的SQL語句。默認為所有的SQL語句。
AGGREGATE????如果=?NO?,則不對多個相同的SQL進行匯總。
INSERT???????SQL?語句的一種,用于將跟蹤文件的統計信息存儲到數據庫中。在TKPROF創建腳本后,在將結果輸入到數據庫中。
SYS?????????禁止或啟用?將SYS用戶所發布的SQL語句列表到輸出文件中。
TABLE???????在輸出到輸出文件前,用于存放臨時表的用戶名和表名。
EXPLAIN?????對每條SQL?語句確定其執行規劃。并將執行規劃寫到輸出文件中。
其中比較有用的一個排序選項是fchela,即按照elapsed?time?fetching來對分析的結果排序(記住要設置初始化參數timed_statistics=true),生成的文件將把最消耗時間的sql放在最前面顯示。另外一個有用的參數就是sys,這個參數設置為no可以阻止所有以sys用戶執行的sql被顯示出來,這樣可以減少分析出來的文件的復雜度,便于查看。
二.?對Tkprof命令輸出的解釋:
首先解釋輸出文件中列的含義:
CALL:每次SQL語句的處理都分成三個部分
Parse:這步將SQL語句轉換成執行計劃,包括檢查是否有正確的授權和所需要用到的表、列以及其他引用到的對象是否存在。
Execute:這步是真正的由Oracle來執行語句。對于insert、update、delete操作,這步會修改數據,對于select操作,這步就只是確定選擇的記錄。
Fetch:返回查詢語句中所獲得的記錄,這步只有select語句會被執行。
COUNT:這個語句被parse、execute、fetch的次數。
CPU:這個語句對于所有的parse、execute、fetch所消耗的cpu的時間,以秒為單位。
ELAPSED:這個語句所有消耗在parse、execute、fetch的總的時間。
DISK:從磁盤上的數據文件中物理讀取的塊的數量。一般來說更想知道的是正在從緩存中讀取的數據而不是從磁盤上讀取的數據。
QUERY:在一致性讀模式下,所有parse、execute、fetch所獲得的buffer的數量。一致性模式的buffer是用于給一個長時間運行的事務提供一個一致性讀的快照,緩存實際上在頭部存儲了狀態。
CURRENT:在current模式下所獲得的buffer的數量。一般在current模式下執行insert、update、delete操作都會獲取buffer。在current模式下如果在高速緩存區發現有新的緩存足夠給當前的事務使用,則這些buffer都會被讀入了緩存區中。
ROWS:?所有SQL語句返回的記錄數目,但是不包括子查詢中返回的記錄數目。對于select語句,返回記錄是在fetch這步,對于insert、update、delete操作,返回記錄則是在execute這步。
?
?
總結
以上是生活随笔為你收集整理的转:使用 Tkprof 分析 ORACLE 跟踪文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么提高百度搜索(怎么提高百度搜索排名)
- 下一篇: wpe安卓版(wpe安卓)