程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle性能分析3:TKPROF介紹

Oracle性能分析3:TKPROF介紹

編輯:Oracle教程

Oracle性能分析3:TKPROF介紹


tkprof是Oracle自帶的一個命令行工具,主要作用是將原始的跟蹤文件轉換為格式化的文本文件,最簡單的使用方式如下:

tkprof ly_ora_128636.trc ly_ora_128636.txt

tkprof帶有很多參數,在多數情況下,使用這些參數對你的分析將很有幫助。

tkprof參數

如果不帶任何參數運行tkprof,它將打印出完整的參數列表,並帶有簡單的描述。下面是對參數的說明:

explain
為每個SQL語句提供一個執行計劃。該參數需要指定用戶、密碼,也可以指定數據庫連接串,如:explain=user/password@connect_string或者explain=user/password。
table
紙盒explain參數一起使用,用於指定生成執行計劃使用的表,通常不需要指定,只有當用戶不能創建表時才需要(如缺少create table權限)。
print
用於限制輸出文件生成的SQL語句的數量,例如:print=10.
aggregate
指定是否單獨處理同樣內容的SQL語句,默認不單獨處理。指定為aggregate=no,看單獨的每個SQL語句。
insert
生成SQL腳本,SQL腳本可以用來存儲信息到數據庫中,SQL腳本的名字由參數指定,如:insert=load.sql。
sys
指定sys用戶運行的SQL語句是否也寫入到輸出文件中,默認yes。
record
生成SQL腳本,裡面包含在trace文件中找到的所有非遞歸語句,腳本名通過參數本身來指定,例如:record=replay.sql。
waits
是否添加等待事件的信息,默認添加。
sort
指定寫入輸出文件中的SQL語句的順序。默認是trace文件中發現的SQL順序。

下面是一個例子:

tkprof {input trace file} {output file} sys=no sort=prsela,exeela,fchela

prsela:第一個游標解析耗費的時間
exeela:針對游標執行花費的時間
fchela:游標獲取數據行所花費的時間

tkprof輸出

輸出文件帶有一個頭,其中有對參數的說明,如下:

**********************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing 
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call
**********************************************************************

count:執行的數據庫調用次數
cpu:處理數據調用花去的CPU時間,以秒為單位
elapsed:處理數據庫調用花費的總的時間,以秒為單位
disk:物理讀的數據塊數量,如果大於邏輯讀的數量(disk>query+current),表示使用了臨時表空間。
query:在一致性模式下從高速緩存邏輯讀取的快數量,用作查詢。
current:在當前模式下從高速緩存邏輯讀取的塊數量,用於insert、delete、merge以及update等操作。
rows:處理的數據行數量。查詢表示獲取的行數量,而insert、delete、merge以及update等則表示影響的行數量。

下面看一個具體的例子:

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch      501      0.03       0.15          0       1465          0       50001
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total      503      0.03       0.15          0       1465          0       50001

上面分別對應了parse、execute和fetch這3個階段,在fetch階段執行了501次fetch,獲取了50001行數據,每次fetch獲取100行數據。
接下來是:

Misses in library cache during parse: 1
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 5 

前兩行表示發生在解析和執行調用階段的硬解析數量,如果沒有硬解析,則不存在。
“Optimizer mode”表示優化器模式。
“Parsing user id”是解析SQL語句的用戶。
在這之後可以看到執行計劃,這裡只做一個簡單講解:

Rows     Row Source Operation
-------  ---------------------------------------------------
  50001  COUNT STOPKEY (cr=1465 pr=0 pw=0 time=300125 us)
  50001   VIEW  (cr=1465 pr=0 pw=0 time=200088 us)
  50001    INDEX FULL SCAN IDX_HISTORYALARM$CLEAR (cr=1465 pr=0 pw=0 time=100049 us)(object id 53743)

cr:一致性模式下邏輯讀出的數據塊數
pr:從磁盤物理讀出的數據塊數
pw:物理寫入磁盤的數據塊數
time:以微妙表示的總的耗費時間,注意數據不精確
cost:操作的評估開銷(僅11g才提供)
size:操作返回的預估計數據量(字節數)(僅11g才提供)
card:操作返回的預估計行數(僅11g才提供)

接下來就是等待事件:

  Event waited on                             Times Waited   Max. Wait  Total Waited
  ----------------------------------------------------------------------------------
  SQL*Net message to client                        502           0.00          0.00
  SQL*Net message from client                      502           0.08         15.42
  SQL*Net more data to client                      500           0.00          0.01

Times Waited:等待時間占用時間
Max. Wait:單個等待事件最大等待時間,單位為秒
Total Waited:針對一個等待事件總的等待秒數,不精確

這裡你可以看到執行中遇到的等待事件,通過對這些等待事件的分析,有助於你了解在等待什麼樣的資源,查詢的瓶頸,有針對的做出優化。可以在Oracle Database Reference手冊的附錄中找到關於多數常見等待事件的簡短描述。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved