ASH和AWR的关系
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
ASH内存记录数据始终是有限的,为了保存历史数据,引入了自动负载信息库(Automatic Workload Repository ,AWR) 由后台进程MMON完成。ASH信息同样被采集写出到AWR负载库中。由于内存是有限的,所以MMNL进程在ASH写满后会将信息写出到AWR负载库中。ASH也不是写出全部数据导AWR,所一般只写入收集的10%的数据量,而且使用direct-path insert完成,尽量减少日志的生成,从而最小化数据库性能影响。
ASH内存记录数据始终是有限的,为了保存历史数据,引入了自动负载信息库(Automatic Workload Repository ,AWR) 由后台进程MMON完成。ASH信息同样被采集写出到AWR负载库中。由于内存是有限的,所以MMNL进程在ASH写满后会将信息写出到AWR负载库中。ASH也不是写出全部数据导AWR,所一般只写入收集的10%的数据量,而且使用direct-path insert完成,尽量减少日志的生成,从而最小化数据库性能影响。
总结一下:AWR是根据snapshot采样间隔来进行系统整体性能判断的。而ASH的粒度更细。比如你的AWR是1小时采样一次,但是如果一个故障仅仅持续了5分钟,之前和之后数据库都正常,那么这5分钟到底发生了什么,要去看ASH。
我们在监控数据库时,如果是当前正在发生的问题,我们可以通过v$session+v$sqlarea来找出性能最差的SQL语句。如果在一个小时以内发生的我们可以通过生成ASH报告来找出SQL.如果是1小时以上或几天我们可以通过AWR报告来找出几小时,几天以来最影响系统的SQL语句。ADDM报告基于AWR库,默认可以保存30天的ADDM报告。
我们也可以直接查询试图:
v$session (当前正在发生)
v$session_wait
我们也可以直接查询试图:
v$session (当前正在发生)
v$session_wait