Oracle-trace檔案分析
例如首先從os上利用top命令找到當前佔用cpu資源最高的一個程序的PID號9999;
然後在資料庫中根據PID號找到相應的sid和serial#
select s.sid,s.serial# from v$session s,v$process p where s.paddr=p.addr and p.spid='9999';
然後通過exec dbms_monitor.session_trace_enable(sid,serial#)開啟trace;
最後利用tkprof察看trace輸出。
開啟Trace檔案輸出
可以通過以下方法開啟Trace檔案輸出(需要ALTER SESSION系統許可權):
1) alter session/system set sql_trace=true
2) exec dbms_monitor.session_trace_enable/dbms_monitor.database_trace_enable
3) alter session set events '10046 trace name context forever, level 12'
Trace檔案的位置
· 如果使用專用伺服器連線,會在USER_DUMP_DEST引數指定的目錄中生成跟蹤檔案。
· 如果使用共享伺服器連線,則在BACKGROUND_DUMP_DEST引數指定的目錄中生成跟蹤檔案。
關於專用伺服器/共享伺服器->
對於DEDICATED方式,Oracle11g之前,可以通過如下語句獲得Trace檔案路徑:
select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
from v$process a, v$session b, v$parameter c, v$instance d
where a.addr = b.paddr
and b.audsid = userenv('sessionid')
and c.name = 'user_dump_dest';
Oracle11g之後,可以訪問v$diag_info來獲得Trace檔案存放路徑:
select * from v$diag_info where name='Default Trace File';
可以使用引數TRACEFILE_IDENTIFIER,為跟蹤檔名增加一個可以惟一標識的串。例如:
alter session set tracefile_identifier='my_trace_file';
這樣,生成的Trace檔名就會以my_trace_file.trc結尾。
共享伺服器模式下,或者需要跟蹤某些特定客戶端,可以使用DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE。方法是:
a) sqlplus登陸,exec DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE('mytest');
這裡mytest是客戶端標示符。
*可以通過select * from DBA_ENABLED_TRACES;檢視當前的活動trace。
b) 需要被跟蹤的客戶端連線執行exec DBMS_SESSION.SET_IDENTIFIER ('mytest');
c) 不需要跟蹤的時候可以sqlplus登陸,執行exec DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE('mytest');
d) 到USER_DUMP_DEST目錄下執行trcsess output=mytest_trc.txt clientid=mytest,會自動合併各個會話的trace檔案,生成mytest_trc.txt
e) 利用tkprof來生成分析報告。
利用tkprof工具分析Trace檔案
可以利用tkprof工具分析Trace檔案,產生一個更加清晰合理的輸出結果。tkprof可以在$ORACLE_HOME/bin下面找到。
1)命令格式
命令格式為:
tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
引數說明:
tracefile:要分析的trace檔案
outputfile:格式化後的檔案
explain=user/[email protected]
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
2)輸出結果格式
輸出結果中,首先是頭部內容。
之後針對每個SQL語句提供如下資訊:SQL 語句文字、執行統計、關於解析的資訊、執行計劃以及等待事件。
執行計劃以及等待事件是可選的,只有儲存在跟蹤檔案中才會出現。
例如下面的輸出:
********************************************************************************
SQL ID: 0c07h414zr55p
Plan Hash: 1968341081
update emp set sal=2451
where
empno=7782
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.01 0.00 0 0 0 0
Execute 2 0.00 3.71 0 3 7 2
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.01 3.72 0 3 7 2
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 86 (TONY)
Rows Row Source Operation
------- ---------------------------------------------------
0 UPDATE EMP (cr=1 pr=0 pw=0 time=0 us)
1 INDEX UNIQUE SCAN EMP_PK (cr=1 pr=0 pw=0 time=0 us cost=0 size=26 card=1)(object id 73464)
Rows Execution Plan
------- ---------------------------------------------------
0 UPDATE STATEMENT MODE: ALL_ROWS
0 UPDATE OF 'EMP'
1 INDEX MODE: ANALYZED (UNIQUE SCAN) OF 'EMP_PK' (INDEX
(UNIQUE))
********************************************************************************
執行統計有如下的幾列:
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語句數量。
相關推薦
Oracle-trace檔案分析
如果一個系統的執行效率比較低,一個比較好的方法是通過跟蹤使用者的會話並且使用tkprof工具使用排序功能格式化輸出,從而找出有問題的SQL語句。例如首先從os上利用top命令找到當前佔用cpu資源最高的一個程序的PID號9999;然後在資料庫中根據PID號找到相應的sid和
NS2 trace檔案分析指令碼(適合無線trace)
絡上有不少awk程式是講如何分析網路效能的(主要是時延,吞吐量,丟包率和時延抖動),但是都沒有詳細的說明,我在此作一些示例,添加了一些必要的說明註釋。 以下的內容是針對NS2模擬的結果trace檔案進行網路效能分析,看本篇前需要先行了解的的內容有:awk語言的基礎,包括語法和結構等;在Linux下
Oracle trace檔案的清理
版本:oracle 12c OS:redhat 6.4 某日,發現trace檔案有12G,trm+trc數量達到8萬個。 目錄是:/opt/oracle/diag/rdbms/orcl/ORCL/trace 本來想直接從xftp直接刪除,兩次都卡死。遂從網上找到了清理語句,記錄如下: fi
通過Android trace檔案分析死鎖ANR
"PowerManagerService" prio=5 tid=24 MONITOR | group="main" sCount=1 dsCount=0 obj=0x41dd0eb0 self=0x5241b218 | sysTid=567 nice=0 sched=0/0 cgrp=apps ha
trace檔案分析ANR問題
開啟dropbox中對應的system_app_anrxxxx: 檢視主執行緒的棧: "main" prio=5 tid=1 Native | group="main" sCount=1 dsCount=0 obj=0x752b0000 self=0xb4276500 | sysT
Oracle效能分析:開啟SQL跟蹤和獲取trace檔案|trace檔案解讀
Oracle效能分析1:開啟SQL跟蹤和獲取trace檔案 當Oracle查詢出現效率問題時,我們往往需要了解問題所在,這樣才能針對問題給出解決方案。Oracle提供了SQL執行的trace資訊,其中包含了SQL語句的文字資訊,一些執行統計,處理過程中的等待,以及解析階段(
使用 Tkprof 分析 ORACLE 跟蹤檔案
Tkprof是一個用於分析Oracle跟蹤檔案並且產生一個更加清晰合理的輸出結果的可執行工具。如果一個系統的執行效率比較低,一個比較好的方法是通過跟蹤使用者的會話並且使用Tkprof工具使用排序功能格式化輸出,從而找出有問題的SQL語句。 一. TKPROF 命令語法:TKPROF filename1,
[Oracle運維工程師手記] 如何從trace 檔案,判斷是否執行了並行
[Oracle運維工程師手記系列]如何從trace 檔案,判斷是否執行了並行客戶說,明明指定了並行的hint,OEM 卻報說沒有並行,並且提供了畫面。客戶的SQL文長這樣:INSERT/*+ parallel(4) */ INTO TAB001_WORK SELECT/*+ FULL(USR002) */US
Oracle課程檔案,第三天
多表 full join 否則 tinc oracl 基礎 相互 統計 多表連接 count(*):有多少行,對行做統計 count(x):列.... sum:和 avg:平均值 min:求最小值 max:求最大值 distinct:取出重復的值 count:計數 grou
Oracle課程檔案,第七天
人員 會話 停止 ora med 訪問 oracle 控制 home 數據庫管理 關閉數據庫有4中方式: 1.shutdown modes 關機模式 2.shutdown normal 關機正常 3.shutdown immediate 立即關閉 ★★ 常用命令 4.shu
Oracle課程檔案,第十天
課程 pac tab ant asc rom use lec let 用戶管理 Authentication: 身份驗證 AAA:Authentication: 身份驗證 Authorization: 權限管理 Audition: 審計 grant:授權 unset:撤銷(
Oracle課程檔案,第九天
link 網絡配置 oracle 一個 sts delet patch 報錯 tca lsnrctl status:查看監聽狀態 Oracle網絡配置三部分組成:客戶端,監聽,數據庫 配置文件:$ vi $ORACLE_HOME/network/admin/listener
Oracle課程檔案,第十四天
分隔 arch set arc figure put 數據文件 conf bsp 備份數據文件:SQL> select file_id, file_name from dba_data_files; backup:備用(備份) datafile:數據文
打開關閉oracle自動表分析
cal job 計劃 nbsp mon scheduler ase parameter 說明 oracle 表的統計信息,跟他的執行計劃很有關聯 執行計劃的正常是否,跟SQL的執行速度很有關系 首先講解一下如何查看一個數據庫的是否開啟自動統計分析 1、查看參數:S
Oracle:簡單分析火車票餘票查詢和座位剩餘
引用CSDN論壇上的一個問題,http://bbs.csdn.net/topics/392284590 ,開始思路錯誤,給了一個錯誤的答案,然後仔細分析了一下 題目如下: 假設有一個車次1經過5個站,站點1,站點2,站點3,站點4,站點5(另外有一個車次2,經過站點3,站點4,
001.Oracle本地檔案系統安裝筆記
一 環境準備 安裝包: linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2. zip 二 安裝Oracle準備 2.1 使用者名稱/組建立 1 [[email protected] ~]# vi
PostgreSQL和Oracle的差異分析之rownum
1. rownum是Oracle內部的一個偽列,用來表示資料在結果集中的行數。Oracle中,把檢索結果取出來後,在畫面上分頁顯示的功能,都是使用rownum,並且使用多層子查詢來實現的。 2. PostgreSQL中,沒有rownum這樣的偽列,但是提供了 limit 和 of
awk檔案分析
awk是行處理器: 相比較螢幕處理的優點,在處理龐大檔案時不會出現記憶體溢位或是處理緩慢的問題,通常用來格式化文字資訊 awk處理過程: 依次對每一行進行處理,然後輸出 awk命令形式: awk [-F|-f|-v] ‘BEGIN{} //{command1; command2
ARCHIVELOG模式下使用者管理恢復控制檔案—使用trace檔案重建控制檔案
首先生成控制檔案的sql指令碼 [sql] view plain copy print ? SQL> alter database backup contr
oracle v$sqlare 分析SQL語句使用資源情況
V$SQLAREA 本檢視持續跟蹤所有shared pool中的共享cursor,在shared pool中的每一條SQL語句都對應一列。本檢視在分析SQL語句資源使用方面非常重要。 V$SQLAREA中的資訊列 HASH_VALUE:SQL語句的Hash值。 ADDRESS:S