今天小編就為大家?guī)硪黄嘘POracle Tkprof的文章。小編覺得挺不錯的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都做網(wǎng)站、成都網(wǎng)站建設、成都外貿網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元清河做網(wǎng)站,已為上家服務,為清河各地企業(yè)和個人服務,聯(lián)系電話:18980820575
Tkprof是一個用于分析Oracle跟蹤文件并且產生一個更加清晰合理的輸出結果的可執(zhí)行工具。如果一個系統(tǒng)的執(zhí)行效率比較低,一個比較好的方法是通過跟蹤用戶的會話并且使用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 指定的輸入文件,可以是多個文件聯(lián)起來。
Filename2 格式化輸出文件。
SORT 在輸出到輸出文件前,先進程排序。如果省去,則按照實際使用的順序輸出到文件中。排序選項有以下多種:
prscnt number of times parse was called
prscpu cpu time parsing
prsela elapsed time parsing
prsdsk number of disk readsduring parse
prsqry number of buffers forconsistent read during parse
prscu number of buffers forcurrent read during parse
prsmis number of misses inlibrary cache during parse
execnt number of execute wascalled
execpu cpu time spent executing
exeela elapsed time executing
exedsk number of disk readsduring execute
exeqry number of buffers forconsistent read during execute
execu number of buffers forcurrent read during execute
exerow number of rows processedduring execute
exemis number of library cachemisses during execute
fchcnt number of times fetch wascalled
fchcpu cpu time spent fetching
fchela elapsed time fetching
fchdsk number of disk readsduring fetch
fchqry number of buffers forconsistent read during fetch
fchcu number of buffers forcurrent read during fetch
fchrow number of rows fetched
userid userid of user that parsedthe cursor
PRINT 只列出輸出文件的第一個integer 的SQL語句。默認為所有的SQL語句。
AGGREGATE 如果= NO ,則不對多個相同的SQL進行匯總。
INSERT SQL 語句的一種,用于將跟蹤文件的統(tǒng)計信息存儲到數(shù)據(jù)庫中。在TKPROF創(chuàng)建腳本后,在將結果輸入到數(shù)據(jù)庫中。
SYS 禁止或啟用將SYS用戶所發(fā)布的SQL語句列表到輸出文件中。
TABLE 在輸出到輸出文件前,用于存放臨時表的用戶名和表名。
EXPLAIN 對每條SQL 語句確定其執(zhí)行規(guī)劃。并將執(zhí)行規(guī)劃寫到輸出文件中。
其中比較有用的一個排序選項是fchela,即按照elapsed time fetching來對分析的結果排序(記住要設置初始化參數(shù)timed_statistics=true),生成的文件將把最消耗時間的sql放在最前面顯示。另外一個有用的參數(shù)就是sys,這個參數(shù)設置為no可以阻止所有以sys用戶執(zhí)行的sql被顯示出來,這樣可以減少分析出來的文件的復雜度,便于查看。
二. 對Tkprof命令輸出的解釋:
首先解釋輸出文件中列的含義:
CALL:每次SQL語句的處理都分成三個部分
Parse:這步將SQL語句轉換成執(zhí)行計劃,包括檢查是否有正確的授權和所需要用到的表、列以及其他引用到的對象是否存在。
Execute:這步是真正的由Oracle來執(zhí)行語句。對于insert、update、delete操作,這步會修改數(shù)據(jù),對于select操作,這步就只是確定選擇的記錄。
Fetch:返回查詢語句中所獲得的記錄,這步只有select語句會被執(zhí)行。
COUNT:這個語句被parse、execute、fetch的次數(shù)。
CPU:這個語句對于所有的parse、execute、fetch所消耗的cpu的時間,以秒為單位。
ELAPSED:這個語句所有消耗在parse、execute、fetch的總的時間。
DISK:從磁盤上的數(shù)據(jù)文件中物理讀取的塊的數(shù)量。一般來說更想知道的是正在從緩存中讀取的數(shù)據(jù)而不是從磁盤上讀取的數(shù)據(jù)。
QUERY:在一致性讀模式下,所有parse、execute、fetch所獲得的buffer的數(shù)量。一致性模式的buffer是用于給一個長時間運行的事務提供一個一致性讀的快照,緩存實際上在頭部存儲了狀態(tài)。
CURRENT:在current模式下所獲得的buffer的數(shù)量。一般在current模式下執(zhí)行insert、update、delete操作都會獲取buffer。在current模式下如果在高速緩存區(qū)發(fā)現(xiàn)有新的緩存足夠給當前的事務使用,則這些buffer都會被讀入了緩存區(qū)中。
ROWS: 所有SQL語句返回的記錄數(shù)目,但是不包括子查詢中返回的記錄數(shù)目。對于select語句,返回記錄是在fetch這步,對于insert、update、delete操作,返回記錄則是在execute這步。
三. Tkprof的使用步驟基本上遵循以下幾步:
1、設置TIMED_STATISTICS為True,可以在會話級別,也可以在實例級別。
會話級:
SQL> alter session settimed_statistics=True;
實例級:
SQL> alter system settimed_statistics=True scope=both;
2、 設置SQL_TRACE,可以在會話級,也可以在數(shù)據(jù)庫級。
會話級:
SQL> alter session set sql_trace=true;
實例級:
SQL> alter system set sql_trace=truescope=both;
關于Oracle Tkprof的介紹就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。