Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2803036
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2012-01-14 11:36:47

                                                                                   ASH入门

 

   ASH介绍:ASH是从10G开始新引入的一种性能监视方法。与AWRADDM一起结合,形成了强大的性能诊断体系。是否启用ASH,可以通过_ASH_ENABLE(FALSE/TRUE,default:TRUE)来进行控制.

 

ASH的定位:AWR提供了整个实例的某个周期的性能数据,比较适合从全局的角度来分析,但是得到的数据不是最及时和最细的。使用SQL TRACE可以对每个SQL语句进行跟踪,产生的信息非常详细,由于太过于详细,又不利于快速的分析性能。当然也可以由用户自行对V$SESSION进行采询采样,如果过于频率,带来的负载比较大。而ASHORACLE自动在代码层面上来执行,带来的影响最少,对CPU的使用不超过2%

 

 

ASH的工作过程:主要由MMNL进程来执行,从V$SESSION视图来对数据进行采样,对STATUS栏位为’ACTIVE’的会话的相关信息进行采样(_ASH_SAMPLE_ALL,表示采样范围,DEFAULTfalse,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

Eventcache buffers chains的语句,然后重点对等待事件长的语句进行分析.

 

 

阅读(7476) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~