对于数据库运行期间的各种状态的实时监控以及相关性能数据捕获对于解决性能问题,提高整体业务系统运行效率是至关重要的。在Oracle数据库中,实时捕获相关性能数据是通过ASH工具来实现的。ASH通过每秒钟抽取活动会话样本,为分析在最近时刻的性能问题提供最直接最有效的依据。本文主要讲述ASH的用法及使用。
一、活动会话历史概述
Oracle v$active_session_history视图提供了实例中的活动会话采样。通过该视图提供的最详细最完整性能数据,可作为定位性能故障的一手证据。任一连接到数据库时,那些不属于空闲等待类的事件的会话被认为是活动会话。这包括在采样时在CPU上的任何会话。
活动会话样本存储在SGA中的循环缓冲区中。随着系统活动的增加,可以存储在循环缓冲区中的会话活动的秒数将减少。会话样本的时间保留在v$视图中。在v$视图中显示的会话活动的秒数是完全依赖于数据库活动的。
当自动工作负载信息库(AWR)快照的创建,动态性能视图v$active_session_history的内容被刷新到磁盘。通过只捕获活动会话,表示一组可管理的数据,它的大小直接关系到正在执行的工作,而不是系统上允许的会话数。
数据字典dba_hist_active_sess_history是视图v$active_session_history的历史数据,dba_hist_active_sess_history视图默认每十秒收集一次信息储存在磁盘中。也就是说最终保存到磁盘的数据也就是实时收集数量量的1/10。相应地,可用于诊断性能的数据也就没有v$active_session_history更详细,更丰富。
活动会话数据流:
v$session(ASH Buffer) —>v$active_session_history—>dba_hist_active_sess_history(AWR仓库)
活动会话历史样本通常包括如下:
SQL语句的SQL标识符
对象号,文件号和块号
等待事件标识符和参数
会话标识符和会话序列号
模块和动作名称
会话的客户端标识符
服务哈希标识符
阻塞会话
二、活动会话历史逻辑架构图
如上图所示,ASH从V$SESSION提取信息样本。每秒提取一个样本,直接读取Oracle使用的特定结构数据,而不是使用SQL,因此该方式比较高效。
ASH被设计为内存中的滚动缓冲区,以前的信息在需要时被覆盖。由于ASH缓冲区中的数据量可能非常大,并且将其全部刷新到磁盘是不可接受的。更有效的方法是过滤历史数据,同时将其刷新到工作负载存储库。每隔60分钟通过可管理性监视器(MMON)进程自动执行此操作,并且每当缓冲区已满时,都通过MMNL进程完成。
注意:ASH的存储器来自系统全局区域(SGA),它在实例的使用寿命期间是固定的。它代表每个CPU 2 MB的内存。 ASH不能超过共享池大小的百分之五,也就是SGA_TARGET的百分之五。
SQL> select * from v$version where rownum<2; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production SQL> select pool,name,bytes/1024/1024 From v$sgastat where name like '%ASH %'; POOL NAME BYTES/1024/1024 ------------ -------------------------- --------------- shared pool ASH buffers 10.4000015 SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,2 '645746311' QQ from dual; AUTHOR BLOG QQ ------- ---------------------------- --------- Leshami http://blog.csdn.net/leshami 645746311
三、ASM采样示例
如前所述,ASH代表了近期活动的历史。 该图显示了当活动时如何采样会话。 每秒钟,Oracle数据库服务器查看活动会话,并记录这些会话正在等待的事件。 非活动会话不被采样。 采样非常高效,因为它直接访问Oracle数据库内部结构。
如上图中,活动会话1 Wait I/O以及Wait Block被记录到v$active_session_history视图。
四、访问活动会话数据
检查当前活动会话历史:v$active_session_history
检查活动会话历史数据:dba_hist_active_sess_history
生成ASH报告
通过OEM 诊断包性能页面
五、生成ASH报告
SQL> @?/rdbms/admin/ashrpt.sql Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------ 42938845 ORA11G 1 ora11g Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Enter 'html' for an HTML report,or 'text' for plain text Defaults to 'html' Enter value for report_type: html --指定报告类型,此处使用html Type Specified: html Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ -------- ------------ ------------ ------------ * 42938845 1 ORA11G ora11g ydq05 Defaults to current database Using database id: 42938845 Enter instance numbers. Enter 'ALL' for all instances in a RAC cluster or explicitly specify list of instances (e.g.,1,2,3). Defaults to current instance. Using instance number(s): 1 --输入实例号,RAC可以选择ALL或者特定实例号 ASH Samples in this Workload Repository schema--当前已保存的ASH sample数据 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Oldest ASH sample available:19-Apr-17 22:00:37[ 12689 mins in the past] Latest ASH sample available:28-Apr-17 17:31:09[ 0 mins in the past] Specify the timeframe to generate the ASH report ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter begin time for report: --输入起止时间 --以下为参考格式, -- Valid input formats: -- To specify absolute begin time: -- [MM/DD[/YY]] HH24:MI[:SS] -- Examples: 02/23/03 14:30:15 -- 02/23 14:30:15 -- 14:30:15 -- 14:30 -- To specify relative begin time: (start with '-' sign) -- -[HH24:]MI -- Examples: -1:15 (SYSDATE - 1 Hr 15 Mins) -- -25 (SYSDATE - 25 Mins) Defaults to -15 mins 缺省为-15分钟 Enter value for begin_time: 未输入则使用缺省值 Report begin time specified: Enter duration in minutes starting from begin time: Defaults to SYSDATE - begin_time Press Enter to analyze till current time Enter value for duration: 输入持续时间,缺省为当前 Report duration specified: Using 28-Apr-17 17:16:09 as report begin time Using 28-Apr-17 17:31:09 as report end time Specify Slot Width (using ashrpti.sql) for 'Activity Over Time' section ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Explanation: -- In the 'Activity Over Time' section of the ASH report, -- the analysis period is divided into smaller slots -- and top wait events are reported in each of those slots. -- Default: -- The analysis period will be automatically split upto 10 slots -- complying to a minimum slot width of -- 1 minute,if the source is V$ACTIVE_SESSION_HISTORY or -- 5 minutes,if the source is DBA_HIST_ACTIVE_SESS_HISTORY. Specify Slot Width in seconds to use in the 'Activity Over Time' section: Defaults to a value as explained above: Slot Width specified: -- 以下部分描述如何生成特定的ASH报告,如根据SESSION,SQL_ID,模块等生成,省略 .................... Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is ashrpt_1_0428_1731.html. To use this name,press <return> to continue,otherwise enter an alternative. Enter value for report_name: Using the report name ashrpt_1_0428_1731.html
六、ASH报告结构
ASH报告结构,如下图所示:
Top Events:
报告的用户事件,背景,事件,和事件的参数值
Load Profile:
报告顶级服务/模块,顶级客户端,识别SQL命令和执行SQL的类型
Top SQL:
报告与首要事件相关SQL语句,与rowsources相关SQL,完整SQL语句,SQL语句绑定变量使用
Top PL/SQL Procedures:
列出的PL/SQL程序,占百分比最高的采样会话活动
Top Java Workload:
描述了在采样会话活动java程序
Top Sessions:
首要会话,阻塞会话和并行相关会话
Top Objects/Files/Latches:
报告对象,文件,或锁存
Activity Over Time:
报告前三等待事件为10个同样大小的时间报告期,该报告可以让你看到在最后时刻非常详细的活动。
七、ASH报告分析
1、头部信息:
注,DataSource 可以有2个来源,一个是V$ACTIVE_SESSION_HISTORY,一个是DBA_HIST_ACTIVE_SESS_HISTORY
2、首要等待事件
首要等待事件部分描述了被抽样会话活动中由用户,后台等产生的首要等待事件,首要等待事件,意味着采样期间这些事件是产生性能问题的根源。
首要等待事件包含以下部分:
(1)Top User Events首要用户事件
首要用户事件,也成为前台等待事件,信息显示了在抽样会话活动中占很高百分比的用户进程等待事件。
(2)Top Background Events首要后台事件
这部分信息显示了在抽样会话活动中占很高百分比的后台进程等待事件。