从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