活动会话历史报告
活动会话历史
v$active_session_history视图提供了在实例级别抽取会话活动信息.活动会话每分钟会被抽样一次且被存储在sga中的循环缓冲区中.任何被连接到数据库且正等待一个不属于空闲等待事件的会话会被考虑是一个活动的会话.每个会话抽样都是一组行数据且通过v$active_session_history视图来返回每个被抽样活动会话的行数据,返回最新被抽样会话的第一行数据.因为活动会话抽样是存储在sga中的循环缓冲区中,系统活动越大的,活动时间越少会话的可以被存储在循环缓冲区中.这意味着在这期间被抽样的每个会话会出现在v$视图中或者会话活动的时间会在v$视图中被显示,这完全依赖于数据库活动情况.
作为awr快照的一部分,v$active_session_history视图的内容也会被刷新到磁盘.因为当有繁忙的系统活动时v$视图的内容会变得非常大,只有会一部分会话被抽样并写到磁盘.通过只捕获活动的会话,那么只会生成正在被执行的会话的相关的一组数据而不是系统中所有会话的数据.使用ash能让你对v$active_session_history视图中的当前数据和dba_hist_active_sess_history视图中的历史数据进行检查和性能分析,通常可能避免需要重放工作量来收集额外的性能跟踪信息.ash包含了被捕获的每一个sql语句的执行计划.可以使用这个信息来识别哪部分sql执行消耗了大部分的sql执行时间.ash报告展现了以下各种信息:
sql语句的sql标识符
sql执行计划标识符和用于执行sql语句的sql执行计划的哈希值
sql执行计划信息
对象数,文件数和块数
等待事件标识符和参数
会话标识符和会话序列号
模块和操作名
服务哈希标识符
用户组标识符
使用活动会话历史报告来执行以下性能分析:
短暂的性能问题通常只会持续几分钟.
通过各种维度或者象时间,会话,模块,操作或sql_id的组合来进行有范围或针对性的性能分析
短暂的性能问题是短暂的不在出现在addm分析中.addm试图报告指出在分析周期内最对DB时间最有影响的性能问题.如果一个特定的问题持续非常短的时间那么它可的严重性可能会被平均化或者由于其它的性能问题使其影响最小化.然而这个问题可能在addm中不会出现,一个性能问题是否会被addm捕获依赖于这个问题的持续时间与生成awr快照的时间间隔.
如果一个性能问题在两个awr快照生成的时间间隔内持续了很长时间那么这个问题会被addm捕获.例如如果awr快照时间被设置为一个小时,一个性能问题持续了30分钟那么这个问题不会被认为是一个短暂的性能问题因为它在快照时间间隔内持续很长时间它会被addm捕获.然而如果一个性能问题仅仅持续2分钟可能会被认为是一个短暂的性能问题因为在快照时间间隔内它只持续了很短的时间所以这个问题不会出现在addm报告中.例如如果你被告知系统在上午10:00到上午10:10之间很慢,但addm分析的时间间隔是从上午10:00到上午11:00.那么在addm报告中不会显示这个问题.
ASH报告分成多个部分.HTML报告包括能快速导航到不同部分的链接.
生成一个ash报告
ashrpt.sql脚本用来生成一个html或text格式的报告来显示特定持续期间的ash信息.为了生成一个ash报告执行以下操作:
1.在sql提示符处输入:
@$ORACLE_HOME/rdbms/admin/ashrpt.sql
2.指定你想生成的报告格式html或text:
Enter value for report_type: text
在这个例子中选择生成text格式的ash报告
3.指定在ash报告开始时间:
Enter value for begin_time: -10
在这个例子中开始时间是当前时间之前的10分钟
4.输入这个报告持续的时间如果你想捕获从指定的开始时间到当前时间的之间的ash信息:
Enter value for duration:
在这个例子中缺省是持续到当前的系统时间减去指定的开始时间的结果就是持续的时间.
5.输入报告名或使用缺省的报告名:
Enter value for report_name:
Using the report name ashrpt_1_0310_0131.txt
在这个例子中使用缺省的ash名ashrpt_1_0310_0131被生成.这个报告会从当前系统时间之前的10分钟开始收集ash信息一直持续
到当前时间结束.
对一个指定的数据库实例生成ash报告
ashrpti.sql脚本用来对一个指定的数据库和实例生成一个html或text格式的报告来显示特定持续期间的ash信息.这个报告在设置收集ash信息时间之前允许你指定数据库和实例,为了生成一个ash报告执行以下操作:
1.在sql提示符处输入:
@$ORACLE_HOME/rdbms/admin/ashrpti.sql
2.指定你想生成的报告格式html或text:
Enter value for report_type: html
在这个例子中选择生成html格式的ash报告
3.列出了可用的数据库ID和实例号:
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
3349173529 1 cs cs cs1
3349173529 1 test1 test1 test1
输入数据库标识符(dbid)和实例号(inst_num):
Enter value for dbid: 3349173529
Using 3349173529 for database id
Enter value for inst_num: 1
4.这一步仅适用于对一个活动的data guard物理备库实例收集ash报告,如果不是这种情况,可以跳过这一步.为了对一个物理备库生成一个ash报告,这个备库实例必需是以只读方式打开.这个ash报告包含了主数据库存储在磁盘中的ash信息和备数据库内存中的ash信息.指定对于主数据库或备数据库是否使用数据抽样来生成报告:
You are running ASH report on a Standby database.
To generate the report over data sampled on the Primary database, enter 'P'.
Defaults to 'S' - data sampled in the Standby database.
Enter value for stdbyflag:
Using Primary (P) or Standby (S): S
在这个例子中选择了缺省值S备库
5.指定在ash报告开始时间:
Enter value for begin_time: -10
在这个例子中开始时间是当前时间之前的10分钟
6.输入这个报告持续的时间如果你想捕获从指定的开始时间到当前时间的之间的ash信息:
Enter value for duration:
在这个例子中缺省是持续到当前的系统时间减去指定的开始时间的结果就是持续的时间.
7.以秒为单位指定slot_width
Enter value for slot_width:
在这个例子中使用缺省值
8.根据后续提示的说明解释输入报告以下目标信息的值:
target_session_id
target_sql_id
target_wait_class
target_service_hash
target_module_name
target_action_name
target_client_id
target_plsql_entry
9.输入报告名或使用缺省的报告名:
Enter value for report_name:
Using the report name ashrpt_1_0310_0131.txt
在这个例子中使用缺省的ash名ashrpt_1_0310_0131被生成.这个报告会对数据库ID为3349173529的数据库实例从当前系统时间之前的10分钟开始收集ash信息一直持续到当前时间结束.
对oracle rac生成ash报告
ashrpti.sql脚本用来对oracle rac环境中的指定的数据库和实例生成一个html或text格式的报告来显示特定持续期间的ash信息只有被写入磁盘的ash数据才会被用来生成ash报告.这个报告只会对在dba_hist_active_sess_history表中在过去10分钟之内找到的ash进行抽样.为了在oracle rac环境中生成ash报告执行以下操作:
1.在sql提示符处输入:
@$ORACLE_HOME/rdbms/admin/ashrpti.sql
2.指定你想生成的报告格式html或text:
Enter value for report_type: html
在这个例子中选择生成html格式的ash报告
3.列出了可用的数据库ID和实例号:
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
3349173529 1 cs cs cs1
3349173529 1 test1 test1 test1
3349173529 2 test2 test2 test2
3349173529 3 test3 test3 test3
3349173529 4 test4 test4 test4
输入数据库标识符(dbid)和实例号(inst_num):
Enter value for dbid: 3349173529
Using database id: 3349173529
Enter instance numbers. Enter 'ALL' for all instances in an Oracle
RAC cluster or explicitly specify list of instances (e.g., 1,2,3).
Defaults to current instance.
Enter value for inst_num: ALL
Using instance number(s): ALL
4.指定在ash报告开始时间:
Enter value for begin_time: -1:10
在这个例子中开始时间是当前时间之前的1小时10分钟
5.输入这个报告持续的时间如果你想捕获从指定的开始时间到当前时间的之间的ash信息:
Enter value for duration: 10
在这个例子中持续的时间是10分钟.
6.以秒为单位指定slot_width
Enter value for slot_width:
在这个例子中使用缺省值
7.根据后续提示的说明解释输入报告以下目标信息的值:
target_session_id
target_sql_id
target_wait_class
target_service_hash
target_module_name
target_action_name
target_client_id
target_plsql_entry
8.输入报告名或使用缺省的报告名:
Enter value for report_name:
Using the report name ashrpt_1_0310_0131.txt
在这个例子中使用缺省的ash名ashrpt_1_0310_0131被生成.这个报告会对数据库ID为3349173529的数据库的所有实例从当前系统时间之前的1小时10分钟开始收集ash信息一直持续到当前时间之前的1小时为止结束.
使用ash报告
在生成ash报告之后,可以重新检索哪些标识为短暂性能问题的信息.ash报告的内容分成了以下几个部分:
top events
load profile
top sql
top pl/sql
top java
top sessions
to objects/files/latches
activity over time
top evnets
顶级等待事件部分描述了被抽样会话活动中由用户,后台等产生的顶级等待事件,使用这些信息可以识别是哪些等待事件造成了短暂的性能问题.顶级等待事件包含以下部分:
顶级用户事件
这部分信息显示了在抽样会话活动中占很高百分比的用户进程等待事件.
顶级后以事件
这部分信息显示了在抽样会话活动中占很高百分比的后台进程等待事件.
顶级等待事件参数P1/P2/P3
这部分信息显示了在抽样会话活动中占很高百分比的等待事件的参数值它通过总的等待时间(%Event)百分比进行排序后被显示.对于每一个等待事件p1,p2,p3的值与等待事件参数parameter 1,parameter 2,parameter 3这三个列相关联.
load profile
load profile部分描述了在抽样的会话活动中的负载分析.使用这部分信息可以识别造成短暂性能问题的服务,客户或sql命令类型.负载概要部分包含以下部分信息:
top service/module
这部分信息显示了在抽样会话活动中占很高百分比的服务和模块信息
top client ids
这部分信息显示了在抽样会话活动中占很高百分比的客户端的id信息它是数据库会话中应用程序的特定标识符
top sql command types
这部分信息显示了在抽样会话活动中占很高百分比的sql命令类型比如select或update
top phases of execution
这部分信息显示了在抽样会话活动中占很高百分比的执行步骤比如sql,pl/sql和java的编译和执行操作.
top sql
顶级sql部分描述了抽样会话活动中的顶级sql语句,使用这部分信息可以识别出造成短暂性能问题的高负载sql语句
顶级sql部分包含以下信息:
top sql with top events
top sql with top row sources
top sql using literals
top parsing module/action
complete list of sql text
top sql with top events
这部分信息显示了在抽样会话活动中占总的等待事件很高百分比的sql语句.
top sql with top row sources
这部分信息显示了在抽样会话活动中占很高百分比的sql语句和它们的详细执行计划信息.通过这部分信息可以识别出哪部分的sql执行消耗了大量的sql执行时间
top sql using literals
这部分信息显示了在抽样会话活动中占很高百分比的使用literal值的sql语句.可以重新检查这部分sql语句看是否能使用绑定变量来代替literal值.
top parsing module/action
这部分信息显示了在抽样会话活动中当执行解析sql语句时占很高百分比的模块和操作
complete list of sql text
这部分信息显示了顶级sql语句的完整的文本内容
top pl/sql
这部分信息显示了在抽样会话活动中占很高百分比的pl/sql过程.
top java
这部分信息显示了在抽样会话活动中占很高百分比的java程序
top sessions
这部分信息描述了会话正在等待的一个特定等待事件.使用这部分信息来识别在抽样会话活动中占很高百分比的会话它们可能是造成短暂性能问题的原因.top sessions部分包含以下信息:
top sessions
这部分信息显示了在抽样会话活动中占很高百分比的等待会话
top blocking sessions
这部分信息显示了在抽样会话活动中占很高百分比的阻塞会话
top sessions running pqs
这部分信息显示了哪些在抽样会话活动中占很高百分比的正处于等待的并行查询
top objects/files/latches
这部分信息显示了通常最消耗数据库资源的信息括以下部分:
top db objects
这部分信息显示了在抽样会话活动中占所有引用对象很高百分比的数据库对象(比如表和索引)
top db files
这部分信息显示了在抽样会话活动中占访问量很高百分比的数据库文件
top latches
这部分信息显示了在抽样会话活动中占很高百分比的闩锁信息
闩锁是一种简单低级别串行化机制用来保护sga中的共享数据结构.比如闩锁保护当前访问数据库和缓冲区缓存中数据块结构的用户列表.当维护或查找这些结构时服务器或后台进程请求持有闩锁的时间是非常短暂的.闩锁的实现依赖于操作系统特别是一个进程等待获取一个闩锁多长时间.
activity over time
这一部分是ash报告信息最丰富的一部分.这部分信息对于长时间周期的ash报告来说因为在分析期间它提供了关于活动和工作负载概要深层次的详细信息.activity over time会被分成10个时段.每个时段的大小基于分析所持续的时间.第一个和最后一个时段是奇怪.所有内部时段是相等的大小它们可以相互比较.例如,如果分析时间持续10分钟那么所有的时段将会是每个一分钟.然后如果分析时间持续9分30秒,那么外部的时段可能是每个15秒内部的时段可能每个1分钟
特定时段中每个时段包含的信息如下:
列 描述
slot time(持续时间) 时段的持续时间
solt count 在时段中抽样会话的数量
event 在时段中顶级的三个等待事件
event count ash抽样等待的等待事件的数量
%event ash抽样等待的等待事件在整个分析期间所占的百分比
当比较内部时段时,通过识别异常的event count和slot count列执行一个倾斜分析.event count列的异常指示了在抽样会话中等待的等待事件数量增加了.slot count列的异常指示活动的会自豪感增加了,因为ash数据只从活动会话中进持抽样说明数据库的
负载增加了.通常来说当活动会话抽样的数理和与这些会话相关的等待事件增加时那么这个时段可能会造成短暂性能问题.