從10g開始,我們采用awr報告來分析資料庫的性能,我們發現增加了很多dba_hist相關的視圖,其中基于時間相關的字段delta開始出現,對于我們計算語句的時間消耗很有幫助!
其實Delta 表示第四個希臘字母,大寫為Δ,小寫為δ,其在數學和科學,表示變量的變化
在Oracle中的Delta number其實是指在采樣間隔内,名額的增加值,也就是2個采樣間的內插補點
有Delta相關字段的表為dba_hist_active_sess_history、DBA_HIST_SEG_STAT、DBA_HIST_SQLSTAT
Delta可以省略以前隻能用分析函數來計算兩個快照間內插補點辦法,可以直接查詢
如果部分快照沒有捕獲對象統計資訊,那麼用分析函數也無法得到該期間的數值,但是如果有delta字段,可以直接查詢
SQL> SELECT * FROM (
2 SELECT SNAP_ID,
3 LOGICAL_READS_TOTAL,
4 LOGICAL_READS_TOTAL -
5 (LAG(LOGICAL_READS_TOTAL) OVER(ORDER BY SNAP_ID)) LOGICAL_READS,
6 LOGICAL_READS_DELTA
7 FROM DBA_HIST_SEG_STAT
8 WHERE OBJ# = 3278293
9 AND INSTANCE_NUMBER=1
10 ORDER BY 1)
11 WHERE ROWNUM
SNAP_ID LOGICAL_READS_TOTAL LOGICAL_READS LOGICAL_READS_DELTA
---------- ------------------- ------------- -------------------
12315 43227600 45168
12316 43275936 48336 48336
12321 43415056 139120 29056
12323 43532160 117104 69536
12325 43710256 178096 103760
12326 43771904 61648 61648
12327 43815680 43776 43776
12328 43871648 55968 55968
12332 44220256 348608 90016
12333 44296544 76288 76288
在11g中,又為ASH增加了delta字段(V$ACTIVE_SESSION_HISTORY & DBA_HIST_ACTIVE_SESS_HISTORY)
有2組:
1.時間模型統計
TM_DELTA_TIME 一次統計間隔
TM_DELTA_CPU_TIME 在這個間隔内,CPU時間
TM_DELTA_DB_TIME 在這個間隔内,DB時間
因為ASH采樣的粒度是1秒,但是程序并不是在1s内都ACTIVE的。該統計的粒度是微秒(百萬分之一秒)
TM_DELTA_TIME - TM_DELTA_DB_TIME = INACTIVE TIME
TM_DELTA_DB_TIME - TM_DELTA_CPU_TIME = WAIT TIME
2.IO&網絡統計
DELTA_TIME
DELTA_READ_IO_REQUESTS
DELTA_WRITE_IO_REQUESTS
DELTA_READ_IO_BYTES
DELTA_WRITE_IO_BYTES
DELTA_INTERCONNECT_IO_BYTES
統計時間内,實體讀/寫/心跳流量高的SQL
SELECT SQL_ID,
SUM(DELTA_READ_IO_REQUESTS),
SUM(DELTA_WRITE_IO_REQUESTS),
SUM(DELTA_READ_IO_BYTES),
SUM(DELTA_WRITE_IO_BYTES),
SUM(DELTA_INTERCONNECT_IO_BYTES)
FROM V$ACTIVE_SESSION_HISTORY
GROUP BY SQL_ID
ORDER BY 2 DESC