ASH实时分析
ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件。不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成。
v$active_session_history视图提供了在实例级别抽取会话活动信息。活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中.任何被连接到数据库且正等待一个不属于空闲等待事件的会话会被考虑是一个活动的会话。每个会话抽样都是一组行数据且通过v$active_session_history视图来返回每个被抽样活动会话的行数据,返回最新被抽样会话的第一行数据。因为活动会话抽样是存储在sga中的循环缓冲区中,系统活动越大的,活动时间越少会话的可以被存储在循环缓冲区中。这意味着在这期间被抽样的每个会话会出现在v$视图中或者会话活动的时间会在v$视图中被显示,这完全依赖于数据库活动情况。
ASH buffers 的最小值为1MB,最大值不超过30MB.内存中记录数据。期望值是记录一小时的内容,所以说ASH 内存记录数据始终是有限的
一般在线上实时诊断数据库性能问题,特别是负载高w出来上了100后,cpu 100%,这个时候用ash实时出日志报告,就能很大程度上准确定位问题所在。
在执行SQL> @?/rdbms/admin/ashrpt.sql命令后,会让有如下参数需要手动填写:
(1)日志报告类型
Enter value for report_type: text
-- 选择生成的ASH 报告类型,是text 还是html
(2)日志报告起始时间
Enter value for begin_time: 08/31/1620:00:00
-- 输入ASH 开始的时间,时间格式上面的示例有说明,比如我这里是2016年8月31日晚上20:00:00开始。
(3)日志报告结束时间
Enter value for duration:7200
-- 输入ASH 结束时间,默认是SYSDATE - begin_time,一般输入的分析统计的总时间,一般默认是秒,比如这里7200就是2个小时,拿出2个小时的ash分析日志来。
(4)报告文件名
Enter value for report_name: /home/oracle/ash_20160831_3.html
-- 输入ASH 报告的名称,可以指定生成的目录,默认情况是当前登陆sqlplus的目录。 这里的扩展最好加上,如果不加扩展名,扩展名会变成lst. 不影响数据,但是会影响阅读效率。
SQL> @?/rdbms/admin/ashrpt.sql
Current Instance ~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------ 3391761643 POWERDES 1 powerdes
Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Enter 'html' for an HTML report, or 'text' for plain text Defaults to 'html' Enter value for report_type: html
Type Specified: html
Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host ------------ -------- ------------ ------------ ------------ * 3391761643 1 POWERDES powerdes pldb1 * 3391761643 1 POWERDES powerdes localhost.lo caldomain
Defaults to current database
Using database id: 3391761643
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
ASH Samples in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oldest ASH sample available: 23-Aug-16 08:00:17 [ 12265 mins in the past] Latest ASH sample available: 31-Aug-16 20:25:19 [ 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 Enter value for begin_time: 08/31/16 20:00:00 Report begin time specified: 08/31/16 20:00:00
Enter duration in minutes starting from begin time: Defaults to SYSDATE - begin_time Press Enter to analyze till current time Enter value for duration: 7200 Using 31-Aug-16 20:00:00 as report begin time Using 31-Aug-16 20:26:30 as report end time
Specify Slot Width (using ashrpti.sql) for 'Activity Over Time' section ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ……… # 这里信息太多,省过不贴了。
# 这里填写好生成的报表文件名字,然后回车 Enter value for report_name: ash_20160831_3.html
Using the report name ash_20160831_3.html
Summary of All User Input ------------------------- Format : HTML DB Id : 3391761643 Inst num : 1 Begin time : 31-Aug-16 20:00:00 End time : 31-Aug-16 20:26:30 Slot width : Default Report targets : 0 Report name : ash_20160831_3.html End of Report |