AWR报告头:
需要了解的信息如下:
CPUs:64个
Cores:32核
Memory:内存为128G
Sessions:采样快照点时刻的session数,
Cursors/Session:每个session开启的游标数(根据这个判断ora-1000错误)
Elapsed:代表采样时间.结束快照点-起始快照点的时间.
DB Time: 所有用户会话(前台会话)花费在数据库调用上的总和时间(不包含后台进程).这个时间包含CPU时间,CPU队列时间,以及非空闲会话的等待时间,所以DB TIME= DB CPU + Non-Idle Wait +Wait on CPU queue.
DB Time官方解释:
(DB time is measured cumulatively from the time of instance startup and is calculated by aggregating the CPU and wait times of all sessions not waiting on idle wait events (non-idle user sessions)).
需要注意的是DB TIME描述了数据库总体负载情况,需要和elapsed time时间结合看.
从网上看到一个很好的例子:
假设一家理发店统计半小时(30.11(mins))营业情况,那么一共有64个理发师(64个CPU),顾客在理发店的累计逗留时间就是 DB TIME:612.03 (mins)。
如果拿顾客累计逗留时间除以营业时间,612.03 /30.11=20.32, 也就是说,在这半小时营业时间内,店内平均有20.32个顾客。顾客的累计逗留时间(DB TIME)不是理发师(CPU)的累计工作时间,如果两个顾客都要烫发,正巧只有一个烫发机,则其中一个顾客需要等待(CPU队列时间),这段时间理发师没有干活。
所以
DB CPU 是一定会小于 DB Time的,理发师剪头发的时间一定小于顾客在店内逗留的时间。
如果遇到DB CPU时间大于DB Time的情况请参考:
DB CPU is Reported as Larger than DB TIME in AWR Report and Trace (Doc ID 1911984.1)
而DB time/Elapsed Time这个值就叫做Average Active Session AAS平均活动会话
例如:
DB Time=60min Elapsed Time=60min AAS=60/60=1 负载一般
DB Time=1min Elapsed Time=60min AAS=1/60 负载很轻
DB Time=60000min Elapsed Time=60min AAS=1000 -> 性能出现瓶颈
既然DB Time= DB CPU + Non-Idle Wait +Wait on CPU queue
那么我们假设如果数据库仅有2个逻辑CPU,而2个session在60分钟都没等待事件,一直跑在CPU上,那么DB CPU= 2 * 60 mins ,DB Time = 2* 60 + 0 + 0 =120,AAS = 120/60=2
如果有3个session都100%仅消耗CPU,那么总有一个要wait on queue,那么此时DB CPU = 2* 60 mins ,wait on CPU queue= 60 mins,AAS= (120+ 60)/60=3.
以上情况只为假设,那么在真实情况下DB Cpu = xx mins,Non-Idle Wait= enq:TX + cursor pin S on X + latch : xxx + db file sequential read + …………
以上这份报告DB CPU占据DB Time比例比较高.
DB CPU+Non-Idle Wait=(27300+6458.5+1649.5+450.5+294.2+105.6)=36258.3s
DB Time=36258.3/60=604.3min 与AWR报告头部DB Time相差不大.
整理自Maclean Liu