《Oracle大型数据库系统在AIXUNIX上的实战详解》集中讨论17, 还是继续大前天的话题——对Oracle性能数据的获得。
在Oracle10gR2以后版本中添加了经过完善的ASH功能。所谓ASH,就是自动的会话历史纪录,它纪录了每时每刻激活会话的活动信息,这些信息记录在SGA的一个循环使用的缓冲区中。任何用户的连接,只要该用户当前不处于闲置(idle类)状态,那么,该连接就会被记录。我们可以通过V$ACTIVE_SESSION_HISTORY 视图来查看这些会话的CPU使用方面的信息。
那么究竟V$ACTIVE_SESSION_HISTORY中记录了那些信息呢? 在该视图中,每个会话的历史纪录占若干行,每次取样占一行。由于这些信息被临时性循环存储在缓存中,这个缓存结构的大小是有限的,当系统处于繁忙状态时,这部分内存结构循环将使用的更快,因此,这导致缓存中记录的激活会话信息更少,从时间上看,则记载的时间更短,这取决于数据库活动程度。
不仅如此,会话历史纪录将定期存放到硬盘中,并作为自动工作量资料档案库(AWR)的一部分。由于该视图的内容可能很大,尤其在系统繁忙的状态下,因此可能仅有部分会话信息被保存。
由于ASH仅保存激活会话信息,因此被捕获的数据将简短但有用,避免大量的统计数据造成的视听的混淆。一般而言,如果查看较为当前的会话历史记录,可以通过V$ACTIVE_SESSION_HISTORY 视图获得。如果查看历史数据,则查看DBA_HIST_ACTIVE_SESS_HISTORY 视图。有了这些信息,我们就可以探寻到数据库“过去”的状态,包括下列常用的信息:
- SQL语句的SQL标识符
- 对象标号、文件标号、块标号
- 等待事件和对应参数
- 会话标识符和会话序列号
- 模块名和动作名
- 会话的客户标识符
- 服务哈希标识符
未完,待续,
转载于:https://blog.51cto.com/wenping/265065