ASH(active session history)是V$SESSION视图获取
1.每秒钟收集一次当前处于非空闲等待事件的、活动状态的、会话的信息,并保存在 V$ACTIVE_SESSION_HISTORY 视图中
2.活动会话包含2类情况,一类是非空闲等待事件(WAIT_CLASS <> 'Idle'),一类是“ON CPU”状态的会话
3.ASH数据被刷新到磁盘,则需要从DBA_HIST_ACTIVE_SESS_HISTORY视图中查询相关信息
AWR(aotumatic workload repository )信息来源是DBA_HIST_%开头的数据字典,select table_name from dictionary where table_name like 'DBA_HIST_%';
一般Oracle服务器负载飙升,90%都是由不规范的sql、性能差的sql造成的,而ASH和AWR报告是我们解决问题的最有效的途径
ASH和AWR的区别:
1.awr默认1小时生成一个快照,ash是1秒钟,
2.awr默认保存7天,ash理论是1小时(ash buffers)
3.awr是全面的,ash是单方面的,更侧重于session级的event跟踪,
4.awr用于诊断数据库的整体性能分析,ash用于当前时间段内的数据库性能分析
5.由于业务量大的数据库的event wait是瞬息万变,有时候性能抖动时间很短,awr很可能会监控不到,因为AWR是数据合集,重要信息的指标值被稀释。为了弥补这个不足,使用ASH对session的event进行跟踪。
ASH报告生成:
SQL> @?/rdbms/admin/ashrpt.sql
AWR报告生成:
$su - oracle
$sqlplus / as sysdba
单实例 SQL>@?/rdbms/admin/awrrpt.sql
RAC环境 @?/rdbms/admin/awrgrpti.sql
ASH报告解读:
1.top user events 可以识别是那些等待事件造成了短暂的性能问题
2.top sql 可以识别出造成短暂性能问题的高负载sql语句
3.top sql with top events 显示了在抽样会话活动中占总的等待事件很高的百分比的sql语句
4.top sql with top row resource 在⒊的基础上展示详细的执行计划
5.top session 显示了在抽样会话活动中占很高的百分比的等待会话
6.top blocking sessions 显示了那些在抽样会话活动中占比很高的阻塞会话
7.activity over time 展示了在单位时间内等待事件的数量和总占比
AWR报告解读:
1.SQL ordered by CPU Time 记录了执行占CPU时间总和时间最长的TOP SQL
2.SQL ordered by User I/O Wait Time 展示了IO等待时间
3.SQL ordered by Gets 每次执行获得的内存数据块数量。
4.SQL ordered by Executions 这部分列出了SQL执行次数的信息,按照从大到小的顺序排列。OLTP系统较为有用
PS:
1.Sessions 表示采集实例连接的会话数。这个数可以帮助我们了解数据库的并发用户数大概的情况。这个数值对于我们判断数据库的类型有帮助。
2.Cursors 每个会话平均打开的游标数。
3.Elapsed 通过Elapsed/DB Time比较,反映出数据库的繁忙程度。如果DB Time>>Elapsed,则说明数据库很忙。cpu利用率为:DB Time /(Elapsed* NUM_CPUS)
4.DB Time 表示用户操作花费的时间,包括CPU时间和等待事件。通常同时这个数值判读数据库的负载情况。db time = cpu time + wait time(不包含空闲等待)(非后台进程)
5.Redosize 根据每秒产生的日志大小,可以用来判断数据变更频率程度,大的redosize往往对lgwr写日志,和arch归档造成I/O压力,也有可能造成logbuffer堵塞从而产生相关的等待事件。
6.Logical reads 从内存中读取数据的次数每秒钟逻辑读数据量:(次数*块数)
7.Physical reads 当从内存中未得到数据时则从硬盘上读取数据,每秒物理读数据量:(次数*块数) Physical reads/Logical reads 比若很高,io可能是系统的性能瓶颈
8.Parses 每秒产生的解析的次数,包括软解析和硬解析,但是不包括快速软解析; Hard parses 每秒产生的硬解析次数。
9.Logons:每秒(每个事务)登录数据库次数,这个数接近0比较理想
10.Executes 每秒(每个事务)SQL语句执行次数。包括了用户执行的SQL语句与系统执行的SQL语句,表示一个系统SQL语句的繁忙程度
11.Transactions 每秒的事务数。表示一个系统的事务繁忙程度。
12.Rollback 看事务回滚是不是很高,因为回滚很耗资源。
13.如果看到SQL语句执行时间很长,而CPU时间很少,则说明SQL在I/O操作时消耗较多;SQL的等待时间主要发生在I/O操作方面,不能说明系统就存在I/O瓶颈,只能说SQL有大量的I/O操作