关于ASH:v$session视图是最重要的一个动态性能视图,因为是动态的,所以一旦断开,那么先前记录在v$session中的信息都会全部丢失,因此,为了保留这些历史信息,在10g中推出了v$active_session_history视图,意为活动会话的历史记录,ASH的简称就是这个视图名字而来的。ASH它每秒钟收集一次当前处于非idle等待事件的,活动的session信息,保存在v$active_session_history视图中,但是我们应该知道,动态性能视图其实上是oracle自行构造的一堆存于sga内存区的虚表,即,ash的数据也存在内存中的,另外,oracle分配给ash的空间并不是无限大,ash可供使用的内存空间,可用sql,select * from v$sgastat where name like 'ASH%';因此,v$active_session_history中能够记录多少个会话信息,一方面取决于SGA分给ASH buffer的大小,另一方面也取决于数据库的启动和关闭。但是,oracle提供了AWR的特性,ASH收集到的会话信息,是做为AWR中快照信息的一部份,被保存到文件中。ash报表的生成,oracle提供了脚本:ashrpt.sql:生成指定时间段的统计报表,它会要求你先输入一下起始时间,然后再输入持续多久。ashrpti.sql:生成指定实例的指定时间段的统计报表。AWR,它就是statspack的接替者,它有相应的脚本,运行它可以生成不同的报表:awrrpt.sql:生成你指定的快照区间的统计报表;awrrpti.sql:和上面比较,是可以生成指定的实例下的统计报表,多了选择实例的权利。上面的脚本只能生成你所连接的那个实例的统计。awrsqrpt.sql:生成指定快照区间,指定sql语句的sqlid的统计报表。awrsqrpti.sql:同前,生成指定实例的指定快照区间,指定sql语句的sqlid的统计报表。awrddrpt.sql:指定两个不同的时间周期(指两个时间区间之间的比较),生成这两个周期的统计对比报表。awrddrpti.sql:跨实例来指定两个不同时间段的统计对比报表。以上六个是不同的脚本,不过可以将它分为三组,脚本最后带 i 则是表示是可以指定实例的脚本。上面我们看到,awr可以分析不同的需求的统计报表,与ash的信息只存放在v$active_session_history一个视图中不同,awr的信息存许在78个视图中。awr的快照系统默认是60分钟执行一次,对于快照,我们可以进行一些系统设制,我们可修改的有:快照收集频率,保存时间,捕捉sql的数量三个方面。它分别对应存储过程:modify_snapshot_settings的三个参数:retention:设置保留快照的时间,单位是分钟,可设置的最小值是1天,最大是1年,如果为0,则表示永久保留收集的快照信息。interval:快照收集频率,以分钟为单位,最小值为10分钟,最大为1年。如果设为0,则表示禁用awr功能。topnsql:表示收集比较占用资源的sql数量,可设的最小值为30,最大不超10000000。而视图:dba_hist_wr_control里面可以查看到当前快照收集的相关设置。它只有一行记录。当然,我们也可以手动自己来生成或删除快照,语法:exec dbms_workload_repository.create_snapshot()/drop_snapshot_range()如果我们想要创建一个标本,这个是数据库正常的基准,后续我们采集的快照就以这个为标准来进行分析。我们可以手动用 create_baseline过程带起始快照号来创建一个baseline,同样drop_baseline是用来删除baseline。
学用ORACLE AWR和ASH特性
最新推荐文章于 2024-08-30 10:18:21 发布