ITPub博客

首页 > 数据库 > Oracle > v$action_session_history

v$action_session_history

Oracle 作者:小亮520cl 时间:2015-02-06 21:36:02 0 删除 编辑

V$ACTIVE_SESSION_HISTORY 显示数据库中的采样会话活动。ASH每秒从v$session中取快照,存在V$ACTIVE_SESSION_HISTORY中,并收集所有活动会话的等待信息。若ASH数据被刷新到磁盘,则需要从DBA_HIS_ACTIVE_SESS_HISTORY视图中查询相关信息。

该视图是ASH的核心,用以记录活动SESSION的历史等待信息,每秒采样一次,这部分内容记录在内存中,期望值是记录一个小时的内容。

列名

数据类型

说明

SAMPLE_ID

NUMBER

样本的ID

SAMPLE_TIME

TIMESTAMP(3)

取样本的时间

SESSION_ID

NUMBER

会话标识符; 映射到 V$SESSION.SID

SESSION_SERIAL#

NUMBER

会话序列号 (用于唯一标识一个会话的对象); 映射到 V$SESSION.SERIAL#

USER_ID

NUMBER

Oracle用户标识符; 映射到 V$SESSION.USER#

SQL_ID

VARCHAR2(13)

会话在取样时执行的 SQL 语句的 SQL 标识符

SQL_CHILD_NUMBER

NUMBER

Child number of the SQL statement that the session was executing at the time of sampling

SQL_PLAN_HASH_VALUE

NUMBER

sql游标计划的数值表示形式。这所有会话样本的信息可能不可用。v$session不包含此信息。

FORCE_MATCHING_SIGNATURE

NUMBER

The signature used when the CURSOR_SHARING parameter is set to FORCE

SQL_OPCODE

NUMBER

Indicates what phase of operation the SQL statement was in; maps to V$SESSION.COMMAND。 “V$SESSION” for information on interpreting this column

SERVICE_HASH

NUMBER

Hash that identifies the Service; maps to V$ACTIVE_SERVICES.NAME_HASH

SESSION_TYPE

VARCHAR2(10)

会话类型:

·         FOREGROUND

·         BACKGROUND

SESSION_STATE

VARCHAR2(7)

会话状态:

·         WAITING

·         ON CPU

QC_SESSION_ID

NUMBER

查询协调器的会话ID。This information is only available if the sampled session is a parallel query slave. For all other sessions, the value is 0.

QC_INSTANCE_ID

NUMBER

查询协调器实例的ID。 This information is only available if the sampled session is a parallel query slave. For all other sessions, the value is 0.

BLOCKING_SESSION

NUMBER

阻塞会话的会话标识符。Populated only when the session was waiting for enqueues or a “buffer busy” wait. Maps toV$SESSION.BLOCKING_SESSION.

BLOCKING_SESSION_STATUS

VARCHAR2(11)

阻塞会话的状态:

·         VALID

·         NO HOLDER

·         GLOBAL

·         NOT IN WAIT

·         UNKNOWN

BLOCKING_SESSION_SERIAL#

NUMBER

阻塞会话的序列号

EVENT

VARCHAR2(64)

If SESSION_STATE = WAITING, then the event for which the session was waiting for at the time of sampling.If SESSION_STATE = ON CPU, then this column will be NULL.See Also: “Oracle Wait Events”

EVENT_ID

NUMBER

Identifier of the resource or event for which the session is waiting or for which the session last waited. Interpretation is similar to that of theEVENT column.

EVENT#

NUMBER

Number of the resource or event for which the session is waiting or for which the session last waited. Interpretation is similar to that of theEVENT column.

SEQ#

NUMBER

序列号唯一标识等待(增加每个等待)

P1TEXT

VARCHAR2(64)

第一个附加参数的文本

P1

NUMBER

第一个附加参数

P2TEXT

VARCHAR2(64)

第二个参数的文本

P2

NUMBER

第二个附加参数

P3TEXT

VARCHAR2(64)

第三个附加参数的文本

P3

NUMBER

第三个附加参数

WAIT_CLASS

VARCHAR2(64)

Wait class name of the event for which the session was waiting at the time of sampling. Interpretation is similar to that of the EVENT column. Maps to V$SESSION.WAIT_CLASS.

WAIT_CLASS_ID

NUMBER

等待的会话在等待的时间采样的事件的类标识符。Interpretation is similar to that of the EVENTcolumn. Maps to V$SESSION.WAIT_CLASS_ID.

WAIT_TIME

NUMBER

0 if the session was waiting at the time of samplingTotal wait time for the event for which the session last waited if the session was on the CPU when sampledWhether or not WAIT_TIME = 0 is what is useful to find the SESSION_STATE at the time of sampling, rather than the actual value of WAIT_TIMEitself. Maps to V$SESSION.WAIT_TIME.

TIME_WAITED

NUMBER

If SESSION_STATE = WAITING, then the time that the session actually spent waiting for that EVENT. This column is set for waits that were in progress at the time the sample was taken.If a wait event lasted for more than a second and was caught waiting in more than one session sample row, then the actual time spent waiting for that wait event will be populated in the last of those session sample rows. At any given time, this information will not be available for the latest session sample.

XID

RAW(8)

Transaction ID that the session was working on at the time of sampling. V$SESSION does not contain this information.

CURRENT_OBJ#

NUMBER

对象ID的会话被引用的对象。此信息仅供如果会话在等待申请,集群,并发和用户I / O等待事件。映射到 V$SESSION.ROW_WAIT_OBJ#.

CURRENT_FILE#

NUMBER

File number of the file containing the block that the session is referencing. This information is only available if the session was waiting for Cluster, Concurrency, and User I/O wait events. Maps to V$SESSION.ROW_WAIT_FILE#.

CURRENT_BLOCK#

NUMBER

ID of the block that the session is referencing. This information is only available if the session was waiting for Cluster, Concurrency, and User I/O wait events. Maps to V$SESSION.ROW_WAIT_BLOCK#.

PROGRAM

VARCHAR2(48)

操作系统程序的名称

MODULE

VARCHAR2(48)

Name of the executing module when sampled, as set by the DBMS_APPLICATION_INFO.SET_MODULE procedure

ACTION

VARCHAR2(32)

Name of the executing module when sampled, as set by the DBMS_APPLICATION_INFO.SET_ACTION procedure

CLIENT_ID

VARCHAR2(64)

Client identifier of the session; maps to V$SESSION.CLIENT_IDENTIFIER

查找最近一分钟内,最消耗CPU的sql语句

select sql_id,count(*),
round(count(*)/sum(count(*)) over (),2) pctload
from v$active_session_history
where sample_time > sysdate -1/(24*60)
and session_type <> 'BACKGROUND'
and session_state= 'ON CPU'
group by sql_id
order by count(*) desc;
 
查找最近一分钟内,最消耗I/O的sql语句
select ash.sql_id,count(*)
from v$active_session_history ash,v$event_name evt
where ash.sample_time > sysdate -1/(24*60)
and ash.session_state = 'WAITING'
and ash.event_id = evt.event_id
and evt.wait_class = 'USER I/O'
group by ash.sql_id
order by count(*) desc;
 
查找最近一分钟内,最消耗CPU的session
select session_id,count(*)
from v$active_session_history
where session_state = 'ON CPU'
and sample_time > sysdate -1/(24*60)
group by session_id
order by count(*) desc;
 
查找最近一分钟内,最消耗资源的sql语句
select ash.sql_id,
sum(decode(ash.session_state,'ON CPU',1,0)) "CPU",
sum(decode(ash.session_state,'WAITING',1,0)) -
sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) "WAIT",
sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) 
"IO",
sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"
from v$active_session_history ash,v$event_name en
where SQL_ID is not null and en.event#=ash.event# and ash.sample_time > sysdate -1/(24*60)
group by ash.sql_id
order by sum(decode(ash.session_state,'ON CPU',1,1)) desc;
 
查找最近一分钟内,最消耗资源的session
select ash.session_id,ash.session_serial#,ash.user_id,ash.program,
sum(decode(ash.session_state,'ON CPU',1,0)) "CPU",
sum(decode(ash.session_state,'WAITING',1,0)) -
sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) "WAITING",
sum(decode(ash.session_state,'WAITING',decode(en.wait_class,'USER I/O',1,0),0)) 
"IO",
sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"
from v$active_session_history ash,v$event_name en
where en.event# = ash.event# and ash.sample_time > sysdate -1/(24*60)
group by ash.session_id,ash.user_id,ash.session_serial#,ash.program
order by sum(decode(ash.session_state,'ON CPU',1,1))

 

 

今天工作中用到了,当时比较急也不知道怎么查,下来总结了一下!

查看两个时间点之间的等待事件

SQL>

select session_id,SAMPLE_TIME,SQL_ID,SQL_PLAN_HASH_VALUE,EVENT,BLOCKING_SESSION from V$ACTIVE_SESSION_HISTORY WHERE SAMPLE_TIME BETWEEN TO_DATE('20150205 03:00:00','YYYYMMDD HH24:MI:SS') and TO_DATE('20150205 03:03:00','YYYYMMDD HH24:MI:SS');


SESSION_ID SAMPLE_TIME                    SQL_ID        SQL_PLAN_HASH_VALUE EVENT                BLOCKING_SESSION

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

       288 05-2月 -15 03.01.07.768 上午                                   0 null event          

       268 05-2月 -15 03.00.41.232 上午                                   0                     

       286 05-2月 -15 03.00.41.232 上午                                   0 control file paralle

                                                                            l write             


       295 05-2月 -15 03.00.41.232 上午                                   0 control file paralle

                                                                            l write             


       268 05-2月 -15 03.00.40.232 上午                                   0                     

       286 05-2月 -15 03.00.40.232 上午                                   0                      

       268 05-2月 -15 03.00.39.232 上午                                   0 db file sequential r

                                                                            ead   



查看等待事件并分组排序

SQL> select count(*),EVENT from V$ACTIVE_SESSION_HISTORY

     WHERE SAMPLE_TIME BETWEEN TO_DATE('20150205 03:00:00','YYYYMMDD HH24:MI:SS')

    and TO_DATE('20150205 03:03:00','YYYYMMDD HH24:MI:SS') group by event order by count(*) desc;


  COUNT(*) EVENT

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

         4

         2 db file sequential r

           ead


         2 control file paralle

           l write


         2 log file parallel wr

           ite


         1 null event

         1 log file sync


6 rows selected

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29096438/viewspace-1429085/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
毕业以后专业任职数据库工程师职位,itpub一直作为自己的笔记记录的地方,blog写的不详细,草书笔记,仅供参考!

注册时间:2013-09-12

  • 博文量
    529
  • 访问量
    1126953