在ORACLE性能问题调查时,有价值的诊断情报有很多:STATSPACK,AWR,ASH,SYSTEMSTATE DUMP等等。每一种都在特定的场景起到重要的作用。其中最多的一个场景就是问题发生后采用了紧急对应,暂时回避了问题,但是问题的原因需要详细的调查。这时候,ASH就是一个非常有效的情报。

为什么呢?

因为在这种情况下,无论是客户还是Support工程师,最想知道的就是到底发生了啥问题。

ASH就是为了满足这个需要而产生的,它可以提供两种时间间隔(1秒和10秒)的Active Session的几乎所有相关的信息。

下面先说一下ASH的内部设计吧。

参照上面的图,我们来整理一下ASH情报的来源和处理过程。1.  后台进程MMNL(MMON Lite 即轻量化的MMON进程),每1秒钟1次(采集间隔由隐藏参数“_ash_sampling_interval”控制)把V$SESSION 和V$SESSION_WAIT的数据里的ACTIVE SESSION(非IDLE待机SESSION)转存到V$ACTIVE_SESSION_HISTORY里。

2.  V$ACTIVE_SESSION_HISTORY的数据存储在SGA中的一个循环使用的Buffer里,大小用隐藏参数“_ash_size”控制。

3.  Buffer里的记录按照比例( 由隐藏参数“_ash_disk_filter_ratio”控制)被写到磁盘上,可以通过DBA_HIST_ACTIVE_SESS_HISTORY查询。

4.  存到磁盘上的数据遵守AWR的保存Policy。

关于ASH机能一些隐藏参数,可以参照以下:Parameter Value

-------------------------------------------------- ----------

Description

----------------------------------------------------------------------------------------------------

_ash_sampling_interval 1000

Time interval between two successive Active Session samples in millisecs

_ash_size 1048618

To set the size of the in-memory Active Session History buffers

_ash_enable TRUE

To enable or disable Active Session sampling and flushing

_ash_disk_write_enable TRUE

To enable or disable Active Session History flushing

_ash_disk_filter_ratio 10

Ratio of the number of in-memory samples to the number of samples actually written to disk

_ash_eflush_trigger 66

The percentage above which if the in-memory ASH is full the emergency flusher will be triggered

_ash_sample_all FALSE

To enable or disable sampling every connected session including ones waiting for idle waits

_ash_dummy_test_param 0

Oracle internal dummy ASH parameter used ONLY for testing!

_ash_min_mmnl_dump 90

Minimum Time interval passed to consider MMNL Dump

_ash_compression_enable TRUE

To enable or disable string compression in ASH

_ash_progressive_flush_interval 300

ASH Progressive Flush interval in secs

那么如何利用ASH情报分析性能问题呢?

这个问题没有固定答案,因为ASH是一种原始数据,只负责记录SESSION在采样时的状态。所以ASH并不直接反映问题,只提供分析问题的材料。

也就是说,DBA或Support工程师必须先对问题分析,想定一个或多个问题发生的原因和剧本。然后在利用ASH数据找到支持自己设想的证据。

今天举一个简单的例子。

客户报告3个APP Servers和两个节点的RAC环境中,有一个APP Server的处理比另外两个APP Servers的处理慢,但是发往3个APP Servers的处理本身没有任何区别。

因为客户是在APPLICATION 的画面上确认到的这个问题,所以首先调查了APP Server端,但是没有找到原因,于是APP Server的Support工程师怀疑DB端的问题,就向我们DB的Support发出了调查要求。

基于前面问题的描述,最直观的反应就是这个问题和DB没有关系,原因有二:第一是3个APP Servers发出的处理(SQL文)本身没有区别;第二是DB端处理SQL文时只关注SQL的请求内容,不会关注是哪一台APP Server发来的请求。

为了找到证据来证明上面的观点,我首先假设这个问题慢的地方不在DB,而是APP Server本身或网络延迟,而在DB端实际没有任何延迟,3台APP Servers的处理速度是一样的。

然后我用下面的SQL文对延迟时间段内3台APP Servers发出的所有SQL文进行了抽取和比较,结果如下:SQL> select SQL_ID,SQL_PLAN_HASH_VALUE,SQL_EXEC_ID,count(*)

from m_dba_hist_active_sess_history

where PROGRAM='JDBC Thin Client'

and MACHINE='APP Server Name'

group by SQL_ID,SQL_PLAN_HASH_VALUE,SQL_EXEC_ID

order by count(*) desc;

◆1号機(Slow Node)

SQL_ID SQL_PLAN_HASH_VALUE SQL_EXEC_ID COUNT(*)

-------------------- ------------------- ----------- ----------

aaaaaaaaaaaa 2617621828 16777258 115

aaaaaaaaaaaa 2617621828 16777220 69

bbbbbbbbbbbb 1192575627 33554439 34

cccccccccccc 1878459779 16777216 13

dddddddddddd 2703624694 16777216 7

dddddddddddd 2703624694 33554432 6

eeeeeeeeeeee 876643066 33554438 4

eeeeeeeeeeee 876643066 33554439 4

eeeeeeeeeeee 876643066 16777238 4

eeeeeeeeeeee 876643066 16777237 4

eeeeeeeeeeee 876643066 16777240 4

◆2号機

SQL_ID SQL_PLAN_HASH_VALUE SQL_EXEC_ID COUNT(*)

-------------------- ------------------- ----------- ----------

aaaaaaaaaaaa 2617621828 16777223 150

aaaaaaaaaaaa 2617621828 16777221 150

aaaaaaaaaaaa 2617621828 16777224 30

aaaaaaaaaaaa 2617621828 16777222 30

aaaaaaaaaaaa 2617621828 16777225 27

aaaaaaaaaaaa 2617621828 16777219 16

aaaaaaaaaaaa 2617621828 16777218 16

bbbbbbbbbbbb 3425641204 16777222 32

bbbbbbbbbbbb 3425641204 16777221 31

bbbbbbbbbbbb 3425641204 16777223 28

bbbbbbbbbbbb 3425641204 16777220 16

bbbbbbbbbbbb 3425641204 16777219 15

dddddddddddd 2703624694 33554437 7

dddddddddddd 2703624694 33554436 6

eeeeeeeeeeee 876643066 33554450 4

eeeeeeeeeeee 876643066 16777219 4

eeeeeeeeeeee 876643066 16777220 4

eeeeeeeeeeee 876643066 33554440 4

eeeeeeeeeeee 876643066 16777221 4

eeeeeeeeeeee 876643066 33554452 4

eeeeeeeeeeee 876643066 16777222 3

eeeeeeeeeeee 876643066 33554441 3

eeeeeeeeeeee 876643066 16777241 3

eeeeeeeeeeee 876643066 16777224 3

eeeeeeeeeeee 876643066 33554453 3

◆3号機

SQL_ID SQL_PLAN_HASH_VALUE SQL_EXEC_ID COUNT(*)

-------------------- ------------------- ----------- ----------

aaaaaaaaaaaa 2617621828 16777217 7

bbbbbbbbbbbb 3425641204 16777218 8

eeeeeeeeeeee 876643066 16777216 6

eeeeeeeeeeee 876643066 33554449 4

eeeeeeeeeeee 876643066 33554446 4

eeeeeeeeeeee 876643066 16777239 4

eeeeeeeeeeee 876643066 16777244 4

eeeeeeeeeeee 876643066 16777223 4

eeeeeeeeeeee 876643066 16777243 4

eeeeeeeeeeee 876643066 33554443 4

eeeeeeeeeeee 876643066 16777217 4

eeeeeeeeeeee 876643066 16777245 3

eeeeeeeeeeee 876643066 33554445 3

eeeeeeeeeeee 876643066 33554444 3

eeeeeeeeeeee 876643066 16777218 3

eeeeeeeeeeee 876643066 33554442 3

eeeeeeeeeeee 876643066 33554448 3

eeeeeeeeeeee 876643066 33554451 3

eeeeeeeeeeee 876643066 33554447 3

eeeeeeeeeeee 876643066 16777242 3

通过上面的比较,我们会发现相同的SQL文在客户报告处理慢的1号机和不慢的2号机3号机相比,采样时并没有明显的区别。因为一个采样基本可以看作SQL文执行了10秒钟。

这就证明了我们对DB端没有区别,问题点也不在DB端的设想,剩下的就得让APP Server和网络的Support去调查了。

今天只是用一个小例子来简单说明一下ASH的用法,以后我会分享更多的例子,欢迎关注。

2021/03/17 @ Dalian

oracle ash介绍,Oracle ---- 性能调查之ASH(一)相关推荐

  1. oracle rman介绍,oracle RMAN 简要介绍及使用

    1.RMAN环境简介 1)RMAN是对数据库进行备份和恢复操作并自动管理相关备份策略的客户端工具. 2)RMAN环境至少包括两部分: 目标数据库(target database):即需要进行备份和恢复 ...

  2. oracle数据库各组件介绍,Oracle 数据库 组件相关说明【第一部分】

    参考MOS文档: Information On Installed Database Components and Schemas (文档 ID 472937.1) Oracle 组件可以通过下面的S ...

  3. 详解:Oracle数据库介绍 、字符、类型、语言

    Oracle的介绍 是一个数据库管理系统,是Oracle公司的核心产品.其在数据安全性与安整性控制方面的优越性能,以及跨操作系统.跨硬件平台的数据操作能力.基于"客户端/服务 器" ...

  4. Oracle Dataguard 介绍

    Oracle DataGuard介绍 一. DataGuard的基本原理 当某次事务处理对生产数据库中的数据作出更改时,Oracle数据库将在一个联机重做日志文件中记录此次更改.在DataGuard中 ...

  5. Oracle学习I —— Oracle介绍

    第一章 Oracle介绍 Oracle简介 Oracle数据库是由甲骨文公司开发的关系型数据库:它为各行业在各类环境下(服务器.虚拟机.微机环境下)可以快速搭建一种高效率.可靠性好.高吞吐量的数据库解 ...

  6. oracle 索引介绍、作用、使用

    oracle 索引介绍.作用.使用 1.什么是索引? 索引是建立在表的一列或者多列上的辅助对象,目的是加快访问表中的数据. oracle 存储索引的结构是B*数(平衡树),而索引是由根节点.分支点和叶 ...

  7. oracle数据库优化-IO性能分析优化

    在部署了ORACLE数据库的服务器上,我们大家或多或少的遇到过下列情况: 1. 业务系统运行缓慢,作为系统管理员需要检查包括IO在内的系统资源,这时系统管理员.存储管理员可能得到DBA(数据库管理员) ...

  8. oracle23290,详细介绍Oracle数据库EM Console重建过程

    详细介绍Oracle数据库EM Console重建过程 本文详细介绍了Oracle数据库中EM Console重建的一些知识以及重建时的错误分析与解决,希望能够对您有所帮助. Oracle数据库操作中 ...

  9. 高级SQL优化(二) ——《12年资深DBA教你Oracle开发与优化——性能优化部分》

    目录: Oracle数据完整性和锁机制  索引及优化之表分析  表分析.约束及表间关系  Oracle体系结构1 Oracle体系结构2  海量数据库及分区1  海量数据库及分区2  海量数据库及分区 ...

最新文章

  1. HDU - 1875 畅通工程再续
  2. 使用Jedit建立IDE图文教程
  3. Intel Realsense D435 hardware_reset() 摄像头重置记录 context.query_devices()
  4. 操作系统(概述、组成)、用户态、内核态
  5. python web cgi
  6. SharePoint 2010设计(Design)权限能操作的网站操作菜单项
  7. Python学习入门基础教程(learning Python)--4.3 Python的for嵌套
  8. mybatis+mysql分库分表_一种简单易懂的 MyBatis 分库分表方案
  9. Python怎么安装jieba库?
  10. 微信聊天记录删除了怎么恢复
  11. h桥控制电机刹车_一种电机H桥制动电路的制作方法
  12. win10关闭计算机的原因,win10电脑自动关机是怎么回事
  13. Cypress 增加自定义header访问
  14. 2021最新爬取百度关键词时出现,百度安全验证,解决方法
  15. win10注册ocx控件的步骤(包含错误处理方法0x80040200)
  16. iOS快速清除全部的消息推送
  17. 微信小程序九宫格布局
  18. HTTP协议-Cookie和Session详解
  19. DSP中定点与浮点运算
  20. RDkit二:利用RDkit筛选进行化学小分子2D药效团筛选

热门文章

  1. 毕业后想成为一名软件开发工程师,应该如何学习,大牛给出建议!
  2. 科园贸易:帆软助力其推动数据应用落地,打造自主可控数据平台
  3. 那时我大约5岁的飞鸽传书
  4. 基于Nokia S60的游戏开发之二
  5. 好男人必看!女生的30条隐私……
  6. 我的年终奖是大饼+鸡汤,and you?
  7. 代码敲慢一点,学得会快一点
  8. mysql写入 cpu飙升_分析MySQL中索引引引发的CPU负载飙升的问题
  9. oracle统计学生成绩c,Oracle11g学生成绩管理系统.docx
  10. 别人运行的好好的R代码,到我这怎么就冲突了?