sql_trace生成及使用tkprof檢視trace file
1.Trace file簡介:
Trace file(追蹤檔案)是以trc為後續的文字檔案,它記錄了各種sql操作及所消耗的時間等,根據trace檔案我們就可以瞭解哪些sql導致了系統的效能瓶頸,進而採取恰當的方式調優.
2.怎麼生成trace file:
1. 首先用sqlplus登陸Oracle.
show parameter sql_trace
Name Type Value
-------------------------------------------
sql_trace boolean false
如果value是false表示系統當前不會產生trace檔案.採取如下操作讓系統產生trace檔案:
alter session set sql_trace=true;
或者:alter system set sql_trace=true;
2.執行一些sql語句後.停止產生trace檔案.alter session(或system) set sql_trace=false.
3.trace檔案所在的預設路徑.SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest'
3.怎麼更改trace檔案的儲存目錄:
如果是oracle 11g 以下的版本則:alter system set user_dump_dest = 'd:\oracle\trace';(注意:trace檔案就直接生成在trace目錄下)
如果是oracle 11g.則alter system set user_diagnostic_dest = 'd:\oracle\trace';(注意:trace檔案不會直接生成在trace目錄下.trace目錄下會生成其他很多目錄.
trace檔案的具體目錄是:d:\oracle\trace\diag\rdbms\orli11r2\orli11r2\trace.其中的orli11r2是SID)
4.怎麼檢視trace檔案:
利用tkprof工具分析Trace檔案
可以利用tkprof工具分析Trace檔案,產生一個更加清晰合理的輸出結果。tkprof可以在$ORACLE_HOME/bin下面找到。
1)命令格式
命令格式為:
tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
引數說明:
tracefile:要分析的trace檔案
outputfile:格式化後的檔案
explain=user/password@connectstring
table=schema.tablename
上述兩個引數是一起使用的,explain指示tkprof要為在跟蹤檔案中找到的每個SQL語句提供一個執行計劃。
這是通過執行SQL語句EXPLAIN PLAN通過連線資料庫對在trace檔案中出現的每條sql語句檢視執行計劃,並將之輸出到outputfile中。
指定的table名將提供給EXPLAIN PLAN語句。
print=n:只列出最初N個sql執行語句,預設是無限制的,只有在和引數sort一起使用的時候才有意義
insert=filename:會產生一個sql檔案,執行此檔案可將收集到的資料insert到資料庫表中
sys=no:sys使用者執行的SQL語句(例如,解析操作階段對資料字典的遞迴查詢)不輸出到輸出檔案中。
record=filename:可將非巢狀執行的sql語句過濾到指定的檔案中去
waits=yes|no:是否統計任何等待事件,預設是yes
aggregate=yes|no:是否將相同sql語句的執行資訊合計起來,預設為yes
sort= option:設定排序選項,可以用逗號分隔多個選項。預設是跟蹤檔案中發現的SQL順序。具體選項可以檢視tkprof的命令幫助輸出得到。
例如:
tkprof <tracefile> <outputfile> sys=no sort=prsela,exeela,fchela
prsela elapsed time parsing
exeela elapsed time executing
fchela elapsed time fetching
只指定原TRC檔案及生成檔案位置:
tkprof /u01/diag/rdbms/bysrac/bysrac1/trace/bysrac1_ora_15241_TEST9_1.trc /home/oracle/test9_1.trc
2)輸出結果格式
輸出結果中,首先是頭部內容。
之後針對每個SQL語句提供如下資訊:SQL 語句文字、執行統計、關於解析的資訊、執行計劃以及等待事件。
執行計劃以及等待事件是可選的,只有儲存在跟蹤檔案中才會出現。
例如下面的輸出:
SQL ID: 6ns41jwh1fz2u
Plan Hash: 1544281142
select *
from
bys.test9 where object_id <20000
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 1129 0.09 0.65 0 1342 0 16914
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 1131 0.09 0.65 0 1342 0 16914
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Rows Row Source Operation
------- ---------------------------------------------------
16914 TABLE ACCESS FULL TEST9 (cr=1342 pr=0 pw=0 time=92380 us cost=67 size=3484845 card=16835)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 1129 0.00 0.01
Disk file operations I/O 1 0.00 0.00
ges message buffer allocation 21 0.00 0.00
gc cr multi block request 25 0.04 0.44
SQL*Net message from client 1129 0.00 0.35
執行統計有如下的幾列:
count:表示執行的資料庫呼叫數量。
cpu:表示處理資料呼叫花去的CPU時間,以秒為單位。
elapsed:是處理資料庫呼叫花費的總的時間,以秒為單位,如果這個值比CPU時間高,下一節關於執行統計中的等待事件會提供在等待的資源或同步點。
disk:表示物理讀的資料塊數量。要當心,這不是物理I/O操作的數量,物理I/O運算元在關於等待事件一節給出。如果這個值大於邏輯讀的數量(disk > query +current),這意味著資料塊填充進了臨時表空間。
query:是在一致性模式(consistent mode)下從快取記憶體邏輯讀取的塊數量。通常,這型別的邏輯讀用作查詢。
current:代表在當前模式下從快取記憶體邏輯讀取的塊數量。通常,這類邏輯讀被INSERT、DELETE、MERGE以及UPDATE等語句所使用。
rows:代表處理的資料行數量。對於查詢來說,這就是獲取的行數量。對於INSERT、DELETE、MERGE以及UPDATE 等語句來說,這是所影響的行數量。
關於解析的資訊開始兩行Misses in library cache during parse和Misses in library cache during execute提供了發生在解析和執行呼叫階段的硬解析數量。
如果在執行呼叫時沒有硬解析發生,Misses in library cache during execute這一行將不存在。
接下來是優化器模式以及用於解析SQL語句的使用者。
執行計劃分為兩部分,第一部分稱為行源操作(Row Source Operation ),是遊標關閉且開啟跟蹤情況下寫到跟蹤檔案中的執行計劃。這意味著如果應用程式不關閉遊標而重用它們的話,不會有新的針對重用遊標的執行計劃寫入到跟蹤檔案中。第二部分,叫做執行計劃 (Execution Plan),是由指定了explain引數的TKPROF生成的。既然這是隨後生成的,所以和第一部分不一定完全匹配。萬一你看到不一致,前者是正確的。
兩個執行計劃都通過Rows列提供執行計劃中每個操作返回的行數(不是處理的--要注意)。
對於每個行源操作來說,可能還會提供如下的執行時統計:
cr是一致性模式下邏輯讀出的資料塊數。
pr是從磁碟物理讀出的資料塊數。
pw是物理寫入磁碟的資料塊數。
time是以微秒錶示的總的消逝時間。要注意根據統計得到的值不總是精確的。實際上,為了減少開銷,可能用了取樣。
cost是操作的評估開銷。這個值只有在Oracle 11g才提供。
size是操作返回的預估資料量(位元組數)。這個值只有在Oracle 11g才提供。
card是操作返回的預估行數。這個值只有在Oracle 11g才提供。
輸出檔案的結尾給出了所有關於跟蹤檔案的資訊。首先可以看到跟蹤檔名稱、版本號、用於這個分析所使用的引數sort的值。然後,給出了所有會話數量與SQL語句數量。
相關文章
- sql_trace 及 tkprof 工具SQL
- SQL_TRACE與tkprof分析SQL
- 利用tkprof檢視trace檔案
- sql_trace、10046、10053、tkprofSQL
- Oracle Trace 及TKPROFOracle
- sql_trace的使用SQL
- SQL_TRACESQL
- Oracle SQL_TRACE使用小結OracleSQL
- 使用TKPROF檢視跟蹤檔案
- 【轉】 sql_traceSQL
- ORACLE中SQL TRACE和TKPROF的使用OracleSQL
- 【實驗】【SQL_TRACE】使用sql_trace功能獲得show parameter的sql語句SQL
- 【最佳化】SQL_TRACE之生成跟蹤檔案SQL
- 使用sql trace工具和tkprof來跟會話SQL會話
- 如何使用SQL_TRACE和10046事件SQL事件
- 【SQL_TRACE】解決普通使用者無法執行SQL_TRACE跟蹤其他會話問題SQL會話
- [sql 優化]使用TKPROF格式化TRACE輸出SQL優化
- SQL TRACE和TKPROF,10046的使用步驟SQL
- 使用SQL_TRACE進行資料庫診斷SQL資料庫
- Oracle診斷案例-Sql_traceOracleSQL
- sql_trace相關指令碼SQL指令碼
- sql_trace 原檔案解析SQL
- sql_trace/ 10046 整理SQL
- sql_trace and 10046事件SQL事件
- 利用sql_trace提高自學能力SQL
- 【筆記】 sql_trace相關筆記SQL
- sql_trace跟蹤工具(轉)SQL
- 使用SQL_TRACE檢查少數應用功能涉及的SQL執行計劃SQL
- 【SQL_TRACE】SQL優化及效能診斷好幫手SQL優化
- 使用SQL_TRACE進行資料庫診斷(轉)SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(1)SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(2)SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(zt)SQL資料庫
- Maclean教你讀SQL TRACE TKProf報告MacSQL
- sql_trace 和 events 跟蹤事件SQL事件
- 開啟/檢視 sql traceSQL
- 使用SQL TRACE和TKPROF觀察SQL語句執行結果SQL
- 使用SQL TRACE和TKPROF——效能調整手冊和參考SQL