當前位置:成語大全網 - 書法字典 - 如何分析oracle跟蹤文件

如何分析oracle跟蹤文件

Oracle-跟蹤文件分析

如果壹個系統的執行效率比較低,比較好的方法是通過跟蹤用戶的會話,使用tkprof工具的排序函數print format,找出有問題的SQL語句。

比如,首先使用top命令從os中找到當前占用cpu資源最高的壹個進程的PID號9999;

然後根據數據庫中的PID號找到對應的sid和序列號。

select s.sid,s.serial# from v$session s,v$process p其中s.paddr=p.addr,p.spid = ' 9999

然後通過exec DBMS _ monitor . session _ trace _ enable(sid,serial #)打開trace;

最後,使用tkprof查看跟蹤輸出。

打開跟蹤文件輸出

可以通過以下方法打開跟蹤文件輸出(需要ALTER SESSION系統權限):

1)更改會話/系統設置sql_trace=true

2)執行DBMS _ monitor . session _ trace _ enable/DBMS _ monitor . database _ trace _ enable

3)更改會話集事件' 10046永遠跟蹤名稱上下文,級別12 '

跟蹤文件的位置

如果使用專用服務器連接,將在USER_DUMP_DEST參數指定的目錄中生成壹個跟蹤文件。

如果您使用* * *共享服務器連接,將在由BACKGROUND_DUMP_DEST參數指定的目錄中生成壹個跟蹤文件。

關於專用服務器/* * *共享服務器-& gt;/fw 0124/文章/詳情/6898693

對於專用模式,在Oracle11g之前,可以通過以下語句獲得跟蹤文件路徑:

select c . value | | '/' | | d . instance _ name | | ' _ ora _ ' | | a . spid | | '。“trc”跟蹤

從v $流程a、v $會話b、v $參數c、v $實例d

其中a.addr = b.paddr

和b.audsid = userenv('sessionid ')

而c.name = ' user _ dump _ dest

Oracle11g之後,可以訪問v$diag_info獲取跟蹤文件的存儲路徑:

select * from v$diag_info,其中name= '默認跟蹤文件';

您可以使用參數TRACEFILE_IDENTIFIER向跟蹤文件名添加唯壹可識別的字符串。例如:

alter session set trace file _ identifier = ' my _ trace _ file ';

這樣,生成的跟蹤文件名將以my _ trace _ file.trc結尾。

* * *可以使用DBMS _ monitor。client _ id _ trace _ enable在服務器模式下或需要跟蹤某些特定客戶端時使用。方法是:

A) sqlplus登錄,exec DBMS _ monitor . client _ id _ trace _ enable(' mytest ');

這裏,mytest是客戶端標識符。

*可以從DBA_ENABLED_TRACES中選擇*;查看當前活動跟蹤。

b)需要跟蹤的客戶端連接執行exec DBMS _ session . set _ identifier(' mytest ');

c)不需要跟蹤時,可以用sqlplus登錄,執行ExecDBMS _ Monitor。client _ ID _ trace _ disable(' mytest ');

d)在USER_DUMP_DEST目錄下執行TRC sessions output = mytest_trc.txt client = mytest,會自動合並每個會話的跟蹤文件,生成mytest _ TRC . txt

e)使用tkprof生成分析報告。

使用tkprof工具分析跟蹤文件

Tkprof工具可以用來分析跟蹤文件,產生更清晰、更合理的輸出結果。Tkprof可以在$ORACLE_HOME/bin下找到。

1)命令格式

命令格式是:

tkprof tracefile output file[explain =][table =][print =][insert =][sys =][sort =]

參數描述:

Tracefile:要分析的跟蹤文件。

Outputfile:格式化文件。

explain =用戶/密碼@連接字符串

table=schema.tablename

以上兩個參數壹起使用,explain指示tkprof為在跟蹤文件中找到的每個SQL語句提供壹個執行計劃。

這是通過執行sql語句解釋計劃並連接到數據庫來檢查跟蹤文件中出現的每個SQL語句的執行計劃,並將其輸出到outputfile。

指定的表名被提供給EXPLAIN PLAN語句。

Print=n:只列出前n個sql執行語句,默認情況下沒有限制,只有在與參數sort壹起使用時才有意義。

Insert=filename:將生成壹個sql文件。運行該文件可以將收集的數據插入到數據庫表中。

SYS = no:SYS用戶運行的SQL語句(例如,解析操作期間對數據字典的遞歸查詢)不會輸出到輸出文件。

Record=filename:非嵌套的sql語句可以過濾到指定的文件中。

Waits=yes|no:是否計算任何等待事件,默認值為yes。

Aggregate=yes|no:是否聚合同壹個sql語句的執行信息;默認值為是。

Sort= option:設置排序選項,可以用逗號分隔多個選項。默認情況下,跟蹤文件中的SQL順序。具體選項可以通過查看tkprof的命令幫助輸出來獲得。

例如:

tkprof & lttracefile & gt& ltoutputfile & gtsys=no sort=prsela,exeela,fchela

prsela運行時間解析

exeela執行所用的時間

fchela已用時間獲取

2)輸出結果格式

在輸出結果中,首先是標題內容。

然後為每個SQL語句提供以下信息:SQL語句文本、執行統計信息、解析信息、執行計劃和等待事件。

執行計劃和等待事件是可選的,只有存儲在跟蹤文件中時才會出現。

例如,以下輸出:

********************************************************************************

SQL ID: 0c07h414zr55p

計劃哈希:1968341081

更新員工集合sal=2451

在哪裏

empno=7782

調用計數cpu運行磁盤查詢當前行

- - - - - - - -

解析2 0.01 0.00 0 0 0 0

執行2 0.00 3.71 0 3 7 2

取0 0.00 0.00 0 0 0 0

- - - - - - - -

總計4 0.01 3.72 0 3 7 2

解析期間庫緩存中的未命中:1

優化器模式:所有行

解析用戶id: 86(托尼)

行行來源操作

- -

0更新EMP (cr=1 pr=0 pw=0 time=0 us)

1索引唯壹掃描EMP _ PK(Cr = 1 pr = 0 pw = 0 time = 0 us cost = 0 size = 26 card = 1)(對象id 73464)

行執行計劃

- -

0更新語句模式:ALL_ROWS

“員工”的0更新

1索引模式:對“EMP_PK”(索引)進行了分析(唯壹掃描

(唯壹))

********************************************************************************

執行統計信息包含以下列:

Count:指示執行的數據庫調用的數量。

Cpu:表示處理數據調用所花費的CPU時間,以秒為單位。

Elapsed:它是處理數據庫調用所花費的總時間,以秒為單位。如果該值高於CPU時間,下壹節中關於執行統計的等待事件將在等待資源或同步點提供。

Disk:表示物理讀取的塊數。註意,這不是物理I/O操作的數量,物理I/O操作數在關於等待事件的部分給出。如果該值大於邏輯讀取次數(disk >;Query +current),這意味著數據塊被填充到臨時表空間中。

Query:是在壹致模式下從緩存邏輯中讀取的塊數。通常,這種類型的邏輯讀取被用作查詢。

Current:表示在當前模式下從緩存邏輯中讀取的塊數。通常,INSERT、DELETE、MERGE和UPDATE等語句會使用這種邏輯讀取。

Rows:表示處理的數據行數。對於查詢,這是獲得的行數。對於INSERT、DELETE、MERGE和UPDATE等語句,這是受影響的行數。

關於解析的前兩行信息“解析期間在庫緩存中的未命中”和“執行期間在庫緩存中的未命中”提供了解析和執行調用期間發生的硬解析的數量。

如果在調用期間沒有發生硬解析,那麽在執行期間庫緩存中的行未命中將不會存在。

接下來是優化器模式和用於解析SQL語句的用戶。

執行計劃分為兩部分。第壹部分稱為行源操作,當遊標關閉並開始跟蹤時,該操作被寫入跟蹤文件。這意味著,如果應用程序在不關閉遊標的情況下重用遊標,則不會向跟蹤文件中寫入用於重用遊標的新執行計劃。第二部分稱為執行計劃,由TKPROF使用指定的解釋參數生成。由於這是後來生成的,它可能與第壹部分不完全匹配。萬壹妳看到不壹致,前者是正確的。

兩個執行計劃都通過Rows列提供了執行計劃中每個操作返回的行數(未處理——註意)。

對於每個行源操作,還可以提供以下運行時統計信息:

Cr是在壹致性模式下邏輯讀取的數據塊數。

Pr是從磁盤中物理讀取的數據塊數。

Pw是物理寫入磁盤的數據塊數。

Time是以微秒計的總運行時間。請註意,從統計中獲得的值並不總是準確的。事實上,為了減少開銷,可以使用采樣。

成本是操作的估計成本。該值僅在Oracle 11g中可用。

Size是操作返回的估計數據量(以字節為單位)。該值僅在Oracle 11g中可用。

Card是操作返回的估計行數。該值僅在Oracle 11g中可用。

輸出文件的結尾給出了有關跟蹤文件的所有信息。首先,您可以看到跟蹤文件的名稱、版本號以及用於該分析的參數sort的值。然後,給出所有會話和SQL語句的數量。