全部博文(389)
分类: Oracle
2012-01-14 11:36:47
ASH入门
ASH介绍:ASH是从10G开始新引入的一种性能监视方法。与AWR,ADDM一起结合,形成了强大的性能诊断体系。是否启用ASH,可以通过_ASH_ENABLE(FALSE/TRUE,default:TRUE)来进行控制.
ASH的定位:AWR提供了整个实例的某个周期的性能数据,比较适合从全局的角度来分析,但是得到的数据不是最及时和最细的。使用SQL TRACE可以对每个SQL语句进行跟踪,产生的信息非常详细,由于太过于详细,又不利于快速的分析性能。当然也可以由用户自行对V$SESSION进行采询采样,如果过于频率,带来的负载比较大。而ASH是ORACLE自动在代码层面上来执行,带来的影响最少,对CPU的使用不超过2%。
ASH的工作过程:主要由MMNL进程来执行,从V$SESSION视图来对数据进行采样,对STATUS栏位为’ACTIVE’的会话的相关信息进行采样(_ASH_SAMPLE_ALL,表示采样范围,DEFAULT为false,true表示对每个会话都进行采样).采样的频率为一秒,由参数_ASH_SAMPLING_INTERVAL(default:1000毫秒)来控制。然后刷新到ash buffers当中,可以通过以下查询来看:
SQL> select * from v$sgastat where name='ASH buffers';
POOL NAME BYTES
------------ -------------------------- ----------
shared pool ASH buffers 2097152
可以通过_ASH_SIZE参数来决定ASH buffers大小.我们可能通过v$active_session_history视图来对这里的数据进行访问。也可以通过ashdump事件来进行访问,ashdump产生的信息可读性不强.再AWR快照发生时或者是ASH BUFFERS达到三份之一满时,数据被刷新到DBA_HIST_ASTIVE_SESSION_HISTORY中.
ASH的使用方法:1,OEM上,性能页中关于ash的;2,$ORACLE_HOME/rdbms/admin/ashrpt.sql;脚本.3,手动查询v$active_session_history.(个人比较喜欢这种方式);4,ASHDUMP产生TRC文件.
ASH的数据栏位:具体可以参看oracle reference中的栏位,了解相关的栏位的意义.但是总的说来有大概以下几个方面:
1, 会话:sid,serial#,session_type等
2, 等待方面,event,p1,p2,p3等
3, 应用方面:module,action,program等
4,SQL方面:sql_id,sql_opname等
ASH的数据分析:这个可以要根据需要来查询,网络上的脚本非常多。比如我们可以通过以下查询,看出在10分钟内,哪个SQL语句执行的次数最多:
select sql_id,count(*),count(*)/sum(count(*)) over ()
from v$active_session_history
where sample_time>sysdate-1/24/60*10
group by sql_id
order by count(*);
比如我们在AWR中看到CBC事件,占用比较多的等待时间,接下来我们可以查询ASH中
Event为cache buffers chains的语句,然后重点对等待事件长的语句进行分析.