前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【DB笔试面试817】在Oracle中,什么是ASH?

【DB笔试面试817】在Oracle中,什么是ASH?

作者头像
AiDBA宝典
发布2020-06-17 15:15:48
1.3K0
发布2020-06-17 15:15:48
举报
文章被收录于专栏:小麦苗的DB宝专栏

题目部分

【DB笔试面试817】在Oracle中,什么是ASH?

答案部分

ASH(Active Session History,活动会话历史信息)、AWR(Automatic Workload Repository,自动负载信息库)、ADDM(Automatic Database Diagnostic Monitor,数据库自动诊断监视工具)是Oracle性能调整的三把利剑,需要深入地了解,但是面试一般都问得比较简单,主要问到的是AWR。

Oracle性能调整最重要的就是对最影响性能的SQL的调整。在一个应用中,能够影响到数据库的只有SQL,也只能是SQL。系统不能一味地依靠增强硬件、修改系统、数据库参数来提高数据库的性能,更多的应该关注那些最影响性能的SQL语句。ASH报告、AWR报告和ADDM报告都是能够找出影响性能SQL的工具。在分析ASH报告、AWR报告和ADDM报告的时候,最重要的工作就是找出对性能影响最大的SQL语句,并对其进行优化。

ASH(Active Session History,活动会话历史信息)每秒从VSESSION中取ACTIVE状态会话的信息,存储在VACTIVE_SESSION_HISTORY中,并收集所有活动会话的等待信息,不活动的会话不会采样。这里的活动会话包含2类情况,一类是非空闲等待事件(WAIT_CLASS <> 'Idle'),一类是“ON CPU”状态的会话。采样工作由新引入的后台进程MMNL(Manageability Monitor Lite Process)来完成。若ASH数据被刷新到磁盘,则需要从DBA_HIST_ACTIVE_SESS_HISTORY视图中查询相关信息。

是否启用ASH功能,受一个隐含参数“_ASH_ENABLE”的控制,默认为TRUE。而采样时间同样由另一个隐含参数“_ASH_SAMPLING_INTERVAL”决定,默认为1000毫秒,即1秒。

代码语言:javascript
复制
SYS@lhrdb> set pagesize 9999
SYS@lhrdb> set line 9999
SYS@lhrdb> col NAME format a40
SYS@lhrdb> col KSPPDESC format a50
SYS@lhrdb> col KSPPSTVL format a20
SYS@lhrdb> SELECT a.INDX,
  2         a.KSPPINM NAME,
  3         a.KSPPDESC,
  4         b.KSPPSTVL 
  5  FROM   x$ksppi  a,
  6         x$ksppcv b
  7  WHERE  a.INDX = b.INDX
  8  and lower(a.KSPPINM) like  lower('%&parameter%');
Enter value for parameter: _ash_enable
old   8: and lower(a.KSPPINM) like  lower('%&parameter%')
new   8: and lower(a.KSPPINM) like  lower('%_ash_enable%')

      INDX NAME                                     KSPPDESC                                           KSPPSTVL
---------- ---------------------------------------- -------------------------------------------------- --------------------
      2840 _ash_enable                              To enable or disable Active Session sampling and f TRUE
                                                    lushing
SYS@lhrdb> /
Enter value for parameter: _ash_sampling_interval
old   8: and lower(a.KSPPINM) like  lower('%&parameter%')
new   8: and lower(a.KSPPINM) like  lower('%_ash_sampling_interval%')
      INDX NAME                                     KSPPDESC                                           KSPPSTVL
---------- ---------------------------------------- -------------------------------------------------- --------------------
      2838 _ash_sampling_interval                   Time interval between two successive Active Sessio 1000
                                                    n samples in millisecs

1000毫秒,正好是1秒的时间。

众所周知,动态性能视图实质是Oracle自行构造的一堆存在于SGA内存区的虚表,也就是说,ASH的数据是保存在内存里的,实际上,Oracle分配给ASH的空间并不是无限大,ASH buffers的最小值为1MB,最大值不超过30MB。ASH占用的SGA内存大小可以通过如下SQL查询:

代码语言:javascript
复制
SYS@lhrdb> SELECT * FROM V$SGASTAT WHERE NAME LIKE '%ASH buffers%';
POOL         NAME                                          BYTES
------------ ---------------------------------------- ----------
shared pool  ASH buffers                                16777216

可以看到这里分配了大约16M大小的内存。

直白地讲,VACTIVE_SESSION_HISTORY中能够记录多少会话信息,一方面取决于该数据库的SGA分配给ASH buffers的大小,另一方面取决于数据库的启动和关闭(重启数据库时将重构SGA内存区)。这两方面的因素制约了VACTIVE_SESSION_HISTORY中能够保存的会话信息的能力。作为一名DBA,肯定是希望ASH尽可能多地保留关于会话的信息,但目前来看,单纯依靠V

本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档