一. ASH(Active Session History)
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样, 采样工作由新引入的后台进程MMNL完成。
v$active_session_history视图提供了在实例级别抽取会话活动信息。活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中。任何被连接到数据库且正等待一个不属于空闲等待时间的会话会被考虑是一个活动的会话。每个会话抽样都是一组行数据且通过v$active_session_history视图来返回每个被抽样活动会话的行数据,返回最新被抽样会话的第一行数据。因为活动会话抽样是存储在sga中的循环缓冲区中,系统活动越大的,活动时间越少会话的可以被存储在循环缓冲区中。这意味着在这期间被抽样的每个会话会出现在v$视图或者会话活动的时间会在v$视图中被显示,这完全依赖于数据库活动情况。
ASH buffers的最小值为1mb,最大值不超过30mb,内存中记录数据。期望值是记录一小时的内容,所以说ASH内存记录数据始终是有限的。
一般在线上实时诊断数据库性能问题,特别是负载高出来上来100后,cpu 100%,这个时候用ASH实时出日志报告,就能很大程度上准确定位问题所在。
二. 生成ASH报告的方法
SQL> @?/rdbms/admin/ashrpt.sql
#1. 指定报告类型,text还是html
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: text
Type Specified: text
#2. 输入报告开始时间,时间格式有实例说明
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
Enter value for begin_time: -5
Report begin time specified: -5
#3. 输入报告结束时间,一般输入分析统计的总时间,单位为秒,这里为五分钟,默认为sysdate-begin_time,
Enter duration in minutes starting from begin time:
Defaults to SYSDATE - begin_time
Press Enter to analyze till current time
Enter value for duration: 300
Report duration specified: 300
#4. 指定报告名称
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is ashrpt_1_0118_0620.txt. To use this name,
press <return> to continue, otherwise enter an alternative.
Enter value for report_name: /home/oracle/ash_20170224.txt
三. ASH报告解析
ASH报告分为以下几个部分:
top events
load profile
top sql
top pl/sql
top java
top sessions
to objects/files/latches
activity over time
1. top events
top等待事件描述了被抽样会话活动中,由用户、后台等产生的等待事件,使用这些信息可以识别是那些等待事件造成了短暂的性能问题
a. top user events占很高百分比的用户进程等待事件
b. top background events占很高百分比的后台进程等待事件
c. top event p1/p2/p3 values占很高百分比的等待事件的参数值。通过总的等待时间(%event)百分比进行排序被显示。对于每一个等待事件p1,p2,p3的值与等待事件参数parameter1,parameter2,parameter3这三个列相关联。
2. load profile
load profile描述了在抽样会话活动中的负载分析。使用这部分可以识别造成短暂性能问题的服务,客户或sql命令类型。负载概要报告以下信息
a. top service/module显示在抽样会话活动中占很高百分比的服务和模块信息
b. top client ids显示在抽样会话活动中占很高百分比的客户端的id信息,是数据库会话中应用程序的特定标识符
显示在抽样会话活动中占很高百分比的sql命令类型比如select或update
d. top phases of execution显示在在抽样会话活动中占很高百分比的执行步骤比如sql,plsql和java的编译和执行操作
3. top sql
使用这部分信息可以识别造成短暂性能问题的高负载sql语句。
a. top sql with top events显示占总的等待事件很高百分比的sql语句。
b. top sql with top row sources显示占很高百分比的sql语句和它们的详细执行计划信息,通过这部分可以识别出哪部分的sql执行消耗了大量的sql执行事件
c. top sql using literals显示占很高百分比使用literal值得sql语句,可以重新检查这部分sql看是否能使用绑定变量来代替literal值
d. top parsing module/action显示在抽样会话活动中当执行解析sql语句时占很高百分比的模块和操作
e. complete list of sql text显示top sql的完整文本内容
f. top pl/sql显示占很高百分比的plsql过程
g.top java显示占很高百分比的java程序
4. top sessions
top sessions描述了会话正在等待的一个特定等待事件。可用来识别占很高百分比的会话,他们可能是造成短暂性能问题的原因
a. top sessions显示占很高百分比的等待会话
显示占很高百分比的阻塞会话
c. top sessions running pqs显示占很高百分比的正处于等待的并行查询
5. top objects/files/latches
显示通常最消耗数据库资源的信息
a. top db objects显示占所有引用对象很高百分比的数据库对象(比如表和索引)
显示占很高访问量百分比的数据库文件
c. top latches显示占很高百分比的闩锁信息
d. active over time