Oracle Tkprof

Tkprof是一個用於分析Oracle跟蹤文件而且產生一個更加清晰合理的輸出結果的可執行工具。若是一個系統的執行效率比較低,一個比較好的方法是經過跟蹤用戶的會話而且使用Tkprof工具使用排序功能格式化輸出,從而找出有問題的SQL語句。sql

 

. TKPROF 命令語法:數據庫

TKPROF filename1, filename2 [ SORT  = [opion][,option] ]緩存

 [  PRINT = integer ]session

  [AGGREGATE  = [ YES | NO ] ]ide

  [INSERT = filename3 ]工具

  [SYS = [ YES | NO ]  ]fetch

 [  [ TABLE = schema.table ] | [EXPLAIN = user/password ]  ]spa

 [  RECORD = filename ]對象

相關說明:排序

filename1 指定的輸入文件,能夠是多個文件聯起來。

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 語句的一種,用於將跟蹤文件的統計信息存儲到數據庫中。在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來執行語句。對於insertupdatedelete操做,這步會修改數據,對於select操做,這步就只是肯定選擇的記錄。

Fetch:返回查詢語句中所得到的記錄,這步只有select語句會被執行

COUNT:這個語句被parseexecutefetch的次數。

CPU:這個語句對於全部的parseexecutefetch所消耗的cpu的時間,以秒爲單位。

ELAPSED:這個語句全部消耗在parseexecutefetch的總的時間。

DISK從磁盤上的數據文件中物理讀取的塊的數量。通常來講更想知道的是正在從緩存中讀取的數據而不是從磁盤上讀取的數據。

QUERY:在一致性讀模式下,全部parseexecutefetch所得到的buffer的數量。一致性模式的buffer是用於給一個長時間運行的事務提供一個一致性讀的快照,緩存實際上在頭部存儲了狀態。

CURRENT:在current模式下所得到的buffer的數量。通常在current模式下執行insertupdatedelete操做都會獲取buffer。在current模式下若是在高速緩存區發現有新的緩存足夠給當前的事務使用,則這些buffer都會被讀入了緩存區中。

ROWS: 全部SQL語句返回的記錄數目,可是不包括子查詢中返回的記錄數目。對於select語句,返回記錄是在fetch這步,對於insertupdatedelete操做,返回記錄則是在execute這步。

 

. Tkprof的使用步驟基本上遵循如下幾步:

1、設置TIMED_STATISTICSTrue,能夠在會話級別,也能夠在實例級別。

會話級:

SQL> alter session settimed_statistics=True;

實例級:

SQL> alter system settimed_statistics=True scope=both;

2 設置SQL_TRACE,能夠在會話級,也能夠在數據庫級。

會話級:

SQL> alter session set sql_trace=true

實例級:

SQL> alter system set sql_trace=truescope=both;

相關文章
相關標籤/搜索