Tkprof工具介紹和分析[轉]]
Tkprof工具介紹和分析
Tkprof是一個用於分析Oracle跟蹤檔案並且產生一個更加清晰合理的輸出結果的可執行工具。如果一個系統的執行效率比較低,一個比較好的方法是透過跟蹤使用者的會話並且使用Tkprof工具使用排序功能格式化輸出,從而找出有問題的SQL語句。
Tkprof命令後面可以帶各種型別的排序選項,具體如下:
Usage: tkprof tracefile outputfile [explain= ] [table= ]
[print= ] [insert= ] [sys= ] [sort= ]
table=schema.tablename Use 'schema.tablename' with 'explain='
option.
explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
print=integer List only the first 'integer' SQL statements.
aggregate=yes|no
insert=filename List SQL statements and data inside INSERT
statements.
sys=no TKPROF does not list SQL statements run as user SYS.
record=filename Record non-recursive statements found in the
trace file.
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:
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
其中比較有用的一個排序選項是fchela,即按照elapsed time fetching來對分析的結果排序(記住要設定初始化引數time_statistics=true),生成的.prf檔案將把最消耗時間的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的使用步驟基本上遵循以下幾步:
1. 在資料庫級別上設定TIMED_STATISTICS為True。
8i資料庫需要修改init檔案增加TIMED_STATISTICS=true,然後重啟資料庫使其生效。
9i資料庫可以直接修改:
SQL> alter system set timed_statistics=false scope=both;
系統已更改。
2. 使用各種的工具得到你想要檢視session的trace。
Oracle中能夠得到一個session的trace的方法很多,這裡大致的都介紹一下。
方法一:如果需要在資料庫級別上設定trace,可以在init.ora檔案中加入sql_trace=true,這樣在資料庫執行的同時會trace所有資料庫的活動,一般來說,只有在資料庫的所有事務都需要被監控的時候才使用這種方法,使用這種方法會產生大量的trace檔案,此引數是需要重啟資料庫才可以生效的。Trace資訊收集完成後,記得去掉這個引數,然後重啟資料庫。
方法二:如果需要在session級別上設定trace,可以在sqlplus中使用下列語句:
SQL> alter session set sql_trace=true;
會話已更改。
如果要在PL/SQL中對session級別上設定trace,可以使用dbms_session這個包:
SQL>exec dbms_system.set_sql_trace_in_session(sid,
serial#,true);
PL/SQL 過程已成功完成。
3. 找到生成的正確的trace檔案,在init.ora初始化引數檔案中 user_dump_dest定義的路徑下可以找到。
4. 對trace檔案使用tkprof工具進行分析。
tkprof tracefile outfile [explain=user/password] [options...]
一般來說,使用tkprof得到的輸出檔案中包含三個部分:
Ø SQL語句本身。
Ø 相關的診斷資訊,包括cpu時間、總共消耗的時間、讀取磁碟數量、邏輯讀的數量、以及查詢中返回的記錄數目。
Ø 列出這個語句的執行計劃。
下面用一個具體的例子來說明如何利用tkprof來分析trace檔案。
先從os上利用top命令找到當前佔用cpu資源最高的一個程式的PID號:14483
load averages: 1.53, 1.37, 1.39 db2 23:11:15
246 processes: 236 sleeping, 1 running, 2 zombie, 4 stopped, 3 on cpu
CPU states: 68.0% idle, 17.3% user, 3.0% kernel, 11.6% iowait, 0.0% swap
Memory: 16.0G real, 3.4G free, 9.7G swap in use, 11.0G swap free
PID USERNAME THR PR NCE SIZE RES STATE TIME FLTS CPU COMMAND
14483 oracle 1 51 0 8.8G 8.8G sleep 77.1H 1 5.69% oracle
28222 oracle 1 52 0 8.8G 8.8G cpu18 93:55 2742 3.32% oracle
3722 oracle 1 59 0 8.8G 8.8G sleep 157:41 0 0.45% oracle
16077 oracle 1 59 0 8.8G 8.8G sleep 17.1H 0 0.34% oracle
12687 oracle 1 59 0 8.8G 8.8G sleep 0:07 0 0.29% oracle
17781 oracle 1 49 0 8.8G 8.8G run 91:11 8 0.24% oracle
2359 oracle 1 59 0 8.8G 8.8G cpu19 524:53 0 0.12% oracle
6559 oracle 1 59 0 8.8G 8.8G sleep 237:41 0 0.10% oracle
2242 oracle 1 59 0 8.8G 8.8G sleep 980:56 0 0.09% oracle
2356 oracle 1 59 0 8.8G 8.8G sleep 121:31 0 0.08% oracle
16106 oracle 1 59 0 8.8G 8.8G sleep 168:44 0 0.05% oracle
11432 oracle 1 49 0 2576K 1680K cpu11 0:11 0 0.05% top
2333 oracle 1 59 0 8.9G 8.8G sleep 159:03 0 0.05% oracle
2321 oracle 1 59 0 8.8G 8.8G sleep 78:20 0 0.04% oracle
2282 oracle 1 59 0 8.8G 8.8G sleep 424:57 0 0.03% oracle
然後在資料庫中根據PID號找到相應的sid號和serial#:
SQL> select s.sid,s.serial# from v$session s,v$process p
2 where s.paddr=p.addr and p.spid='14483';
SID SERIAL#
---------- ----------
101 25695
使用dbms_system.set_sql_trace_in_session包來對這個session進行trace:
SQL> exec DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(101,25695,true);
PL/SQL procedure successfully completed.
到user_dump_dest定義的路徑下查詢剛剛最近生成的trace檔案,根據時間來排序,找最近的trace檔案,接著使用tkprof工具對此trace檔案進行格式化分析,生成分析後的trace檔案。
$tkprof orcl_ora_14483.trc allan.txt explain=system/manager aggregate=yes sys=no waits=yes sort=fchela
TKPROF: Release 9.2.0.4.0 - Production on Sun Dec 5 22:27:28 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
這裡生成的allan.txt檔案就是我們最終得到的格式化後的trace檔案了,然後開啟這個檔案進行分析。
一、首先tkprof工具輸出的最後總的統計:
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ----------
Parse 20 0.01 0.02 0 58 0 0
Execute 13197 0.81 0.90 17 7436 6316 1484
Fetch 12944 22.86 22.10 20 2205941 0 8972
------- ------ -------- ---------- ---------- ---------- ----------
total 26161 23.68 23.02 37 2213435 6316 10456<
source:http://blog.itpub.net/post/3/10525
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27036311/viewspace-753357/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 轉:使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- NLPIR文字分析工具的功能和特色介紹
- 動態惡意軟體分析工具介紹
- Google guava工具類的介紹和使用GoGuava
- PG實用工具推薦和介紹
- 常用作業系統掃描工具介紹(轉)作業系統
- etcdctl工具介紹
- 大資料分析三大實用工具介紹!大資料
- 系統級效能分析工具perf的介紹與使用
- Python資料分析--工具安裝及Numpy介紹(1)Python
- Hbase原理的介紹和使用場景分析
- Linux效能分析和最佳化命令介紹Linux
- uml建模工具介紹
- [Windows環境]nvm工具的介紹和安裝Windows
- MySQL全面瓦解22:索引的介紹和原理分析MySql索引
- 【轉】恢復archivelog介紹Hive
- 原型設計工具介紹原型
- MySQL 官方工具utilities介紹MySql
- DriverStudio工具包介紹
- certutil工具的使用介紹
- 原始碼管理工具——GitHub的介紹和使用原始碼Github
- Java中大資料生態和4個工具介紹Java大資料
- mitmproxy 代理工具介紹:rewrite和map local實現MIT
- Android平臺架構的介紹和原始碼分析Android架構原始碼
- HTTP介紹和HTML簡介HTTPHTML
- 效能分析工具簡介
- 主流原型設計工具介紹(●´ϖ`●)原型
- 主流原型設計工具介紹原型
- 11_Oracle bbed工具介紹Oracle
- JVM常用調優工具介紹JVM
- java分詞工具hanlp介紹Java分詞HanLP
- 幾種新DevOps工具介紹dev
- RTSP 流相關工具介紹
- Java常用工具介紹Java
- JEB工具的介紹及使用
- 自助分析工具Power BI的簡介和應用
- [轉]Oracle資料庫ASH和AWR的簡單介紹Oracle資料庫
- Linux下密碼憑證竊取技巧和工具介紹Linux密碼
- PKI和CA 介紹