什么是活动会话历史记录(ASH)

活动会话历史记录(ASH)是Oracle 10g中引入的。它每秒对每个活动数据库会话的活动进行采样。数据保存在数据库内存中的缓冲区中。设计目标是保持约一个小时。如果会话未处于活动状态,则不会进行采样。内存缓冲区通过称为v$active_session_history的视图公开。拍摄AWR快照时,会将ASH缓冲区中每10行中的1行向下复制到AWR存储库中。当缓冲区达到66%满时,也可以将其刷新到快照之间的磁盘上,因此不会丢失任何数据。数据存储在WRH$_ACTIVE_SESSION_HISTORY中,并通过dba_hist_active_sess_history公开。默认情况下处于启用状态,但在要使用它之前,请注意这是一个许可功能。
您可以通过设置oracle underscore参数来禁用ash

alter system set "_ash_enable"=False;

我要强调的是,如果会话未处于活动状态,则不会进行采样。您实际上可以设置参数 _ash_enable_all = TRUE,以强制对所有会话(包括空闲会话)进行采样

10个有用的查询活动会话历史记录(Oracle ASH)

(1)Oracle提供了一个名为DBMS_APPLICATION_INFO的软件包,它允许您设置两个属性;会话的模块和动作。然后,该值将出现在 v$session中,并且对于帮助您确定哪些数据库会话与应用程序的哪一部分相关非常有用。然后,这些值也会被ASH捕获。

(2)使用活动会话历史记录可以找到最近一小时内最活跃的会话

SELECT sql_id,COUNT(*),ROUND(COUNT(*)/SUM(COUNT(*)) OVER(), 2) PCTLOAD

FROM gv$active_session_history

WHERE sample_time > SYSDATE - 1/24

AND session_type = 'BACKGROUND'

GROUP BY sql_id

ORDER BY COUNT(*) DESC;

SELECT sql_id,COUNT(*),ROUND(COUNT(*)/SUM(COUNT(*)) OVER(), 2) PCTLOAD

FROM gv$active_session_history

WHERE sample_time > SYSDATE - 1/24

AND session_type = 'FOREGROUND'

GROUP BY sql_id

ORDER BY COUNT(*) DESC;

(3)找出此会话为其的oracle等待事件

SELECT sample_time, event, wait_time

FROM gv$active_session_history

WHERE session_id = &1

AND session_serial# = &2

(4) 最近一小时内最活跃的会话

SELECT sql_id,COUNT(*),ROUND(COUNT(*)/SUM(COUNT(*)) OVER(), 2) PCTLOAD

FROM gv$active_session_history

WHERE sample_time > SYSDATE - 1/24

AND session_type = 'BACKGROUND'

GROUP BY sql_id

ORDER BY COUNT(*) DESC;SELECT sql_id,COUNT(*),ROUND(COUNT(*)/SUM(COUNT(*)) OVER(), 2) PCTLOAD

FROM gv$active_session_history

WHERE sample_time > SYSDATE - 1/24

AND session_type = 'FOREGROUND'

GROUP BY sql_id

ORDER BY COUNT(*) DESC;

(5) 最近1小时内大多数I / O密集型sql

SELECT sql_id, COUNT(*)

FROM gv$active_session_history ash, gv$event_name evt

WHERE ash.sample_time > SYSDATE - 1/24

AND ash.session_state = 'WAITING'

AND ash.event_id = evt.event_id

AND evt.wait_class = 'User I/O'

GROUP BY sql_id

ORDER BY COUNT(*) DESC;

(6)最近1分钟内在Oracle锁定信息

col event for a22

col block_type for a18

col objn for a18

col otype for a10

col fn for 99

col sid for 9999

col bsid for 9999

col lm for 99

col p3 for 99999

col blockn for 99999

select

to_char(sample_time,'HH:MI') st,

substr(event,0,20) event,

a.session_id sid,

mod(a.p1,16)  lm,

a.p2,

a.p3,

nvl(o.object_name,ash.current_obj#) objn,

substr(o.object_type,0,10) otype,

CURRENT_FILE# fn,

CURRENT_BLOCK# blockn,

a.SQL_ID,

BLOCKING_SESSION bsid

from v$active_session_history a,

all_objects o

where event like 'enq: TX%'

and o.object_id (+)= a.CURRENT_OBJ#

and sample_time > sysdate - 40/(60*24)

Order by sample_time

/

(7) 顶级sqlcpu / wait / io上花费更多

select

ash.SQL_ID ,

sum(decode(a.session_state,'ON CPU',1,0)) "CPU",

sum(decode(a.session_state,'WAITING',1,0)) -

sum(decode(a.session_state,'WAITING', decode(en.wait_class, 'User I/O',1,0),0)) "WAIT" ,

sum(decode(a.session_state,'WAITING', decode(en.wait_class, 'User I/O',1,0),0)) "IO" ,

sum(decode(a.session_state,'ON CPU',1,1)) "TOTAL"

from v$active_session_history a,v$event_name en

where SQL_ID is not NULL and en.event#=ash.event#

(8)特定会话的sql分析

SELECT C.SQL_TEXT,

B.NAME,

COUNT(*),

SUM(TIME_WAITED)

FROM v$ACTIVE_SESSION_HISTORY A,

v$EVENT_NAME B,

v$SQLAREA C

WHERE A.SAMPLE_TIME BETWEEN '&starttime' AND

'&endtime' AND

A.EVENT# = B.EVENT# AND

A.SESSION_ID= &sid AND

A.SQL_ID = C.SQL_ID

GROUP BY C.SQL_TEXT, B.NAME

(9)最近15分钟内在CPU上的最高会话

SELECT * FROM

(

SELECT s.username, s.module, s.sid, s.serial#, s.sql_id,count(*)

FROM v$active_session_history h, v$session s

WHERE h.session_id = s.sid

AND h.session_serial# = s.serial#

AND session_state= 'ON CPU' AND

sample_time > sysdate - interval '15' minute

GROUP BY s.username, s.module, s.sid, s.serial#,s.sql_id

ORDER BY count(*) desc

)

where rownum <= 10;

如何生成ASH报告

Oracle提供与AWR一样的标准脚本来分析ASM数据

我将解释如何从SQL * PLUS生成ASH(活动会话历史记录)报告。也可以使用企业管理器完成相同的操作。

脚本位置与其他标准脚本$ ORACLE_HOME / rdbms / admin /

SQL> @$ORACLE_HOME/rdbms/admin/ashrpt.sql

Current Instance

~~~~~~~~~~~~~~~~

DB Id DB Name Inst Num Instance

———– ———— ——– ————

848748484 TECHDB 1 TECHDB

Specify the Report Type

~~~~~~~~~~~~~~~~~~~~~~~

Enter ‘html’ for an HTML report, or ‘text’ for plain text

Defaults to ‘html’

Enter value for report_type: html

..

..

Defaults to -15 mins

Enter value for begin_time: 01/11/15 00:00:00

Report begin time specified: 01/11/15 00:00:00

Enter value for duration: 10

Report duration specified: 10

Using 11-Jan-15 00:00:00 as report begin time

Using 11-Jan-15 00:10:00 as report end time

Enter value for report_name: Example

Summary of All User Input

————————-

Format : HTML

DB Id : 848748484

Inst num : 1

Begin time : 11-Jan-15 00:00:00

End time : 11-Jan-15 00:10:00

Slot width : Default

Report targets : 0

Report name : Example

End of Report

</body></html>

Report written to Example

活动会话历史记录存档

活动会话历史记录每秒钟从数据库实例中收集有关活动会话的信息。根据数据库活动的不同,这将导致在ASH缓冲区内收集大量数据,但是由于ASH缓冲区是内存驻留结构,因此它只有有限的空间。另外,当实例发生故障时,实例的内存也随之消失。因此,Oracle数据库将信息从ASH缓冲区存档到数据库表中以使其持久化。在一个名为DBA_HIST_ACTIVE_SESS_HISTORY的视图中可以看到该已归档的表数据。如果在V$ACTIVE_SESSION_HISTORY视图中找不到数据,请在DBA_HIST_ACTIVE_SESS_HISTORY视图中进行检查

Oracle ASH查询活动会话历史记录相关推荐

  1. ORACLE RAC集群大范围delete大表与insertupdate同时执行导致活动会话数飙升

    2018年6月7日 21:30左右,客户一oracle rac 11.2.0.3集群数据库活动会话数短时间内飙升,经过分析发现,客户应用21:26:00 首先发起对一张12G,6700万条数据的大表进 ...

  2. oracle平均活动会话数,Oracle11g r2的活动会话数问题解决

    如果你在Oracle11g r2的活动会话数的实际操作中,你对Oracle11g r2的活动会话数有不解之处时,你可以通过以下的文章对其的实际应用与功能有所了解,以下是文章的具体介绍,望你浏览完以下的 ...

  3. 通过案例学习调优之--Oracle ASH

    应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2 案例场景: SCOTT用户做事务处理,事务已经完成! 1 2 3 4 5 6 7 8 9 10 11 12 ...

  4. Oracle ASH分析详解

    一. ASH(Active Session History) ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件.不活动的会话不会采样, 采样工作由新引入的后台进程MMNL完成. ...

  5. Oracle系统信息查询

    --Oracle系统信息查询(需要DBA权限) --查询oracle系统信息 SELECT * FROM V$DATABASE; --查询数据库名 SELECT NAME FROM V$DATABAS ...

  6. oracle ASH之隐含参数_ash_size过小故障问题

             Oracle ASH空间过小导致的故障问题隐含参数_ash_size 今天现场数据库又说出了问题,表现就是hang住,无法提供服务.打开alert日志如下: Fri Aug 17 1 ...

  7. oracle 会话实例,返璞归真:Oracle实例级别和会话级别的参数设置辨析

    杨廷琨(yangtingkun) 云和恩墨 CTO 高级咨询顾问,Oracle ACE 总监,ITPUB Oracle 数据库管理版版主 参数文件是Oracle数据库文件中级别最低,也是最基本的文件, ...

  8. oracle保持会话连接,oracle中连接与会话

    oracle中连接与会话 oracle中连接与会话不是一个概念!!! 在Oracle中,连接只是客户进程和数据库实例之间的一条特殊线路,最常见的就是网络连接.这条连接可能连接到一个专用服务器进程,也可 ...

  9. ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL、DBA必备)

    ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 文章目录 ORACLE数据库查询锁表语句sql脚本,以及删除锁信息脚本(数据库开发ETL.DBA必备) 前 ...

最新文章

  1. python在print()中使用format的时候前面一定要有花括号{},否则值打印不上去
  2. selenium之 webdriver与三大浏览器版本映射表(更新至v2.29)
  3. MyBatis-02 MyBatis XML方式概述及配置步骤
  4. 电商行业知识汇集 这里有你想要的东西
  5. 详解预训练模型、图神经网络、模型压缩、知识图谱、信息抽取、序列模型、深度学习、语法分析、文本处理...
  6. SpringBoot用JdbcTemplates访问Mysql
  7. 个性化配置你的SQL Server on Linux
  8. android remote shell,关于 Appium V1.7.2 新增的唯一安卓可执行 mobile 命令 shell 的疑问...
  9. 我用Python爬虫挣钱的那点事
  10. android studio for android learning (三) 我的第一个APP
  11. selenium爬取豆瓣电影和电视剧
  12. Python+旧衣物捐赠系统 毕业设计-附源码290942
  13. AMD处理器的发展历程
  14. Android轻松实现分享功能
  15. 自己写的12306买火车票手机APP
  16. xe6 动态元素数量
  17. ch340串口驱动_如何使用串口来给STM32下载程序
  18. 嵌入式 Linux LED 驱动开发实验
  19. java 字符串驻留_【Java中的字符串驻留】
  20. 透过代理加速 Github 访问

热门文章

  1. Windows多线程 CreateThread()+结构体
  2. FDA辅料数据库-在线查询网址
  3. 略谈UPS及其技术发历程(二)
  4. 林书豪030-成为前巴
  5. 超声波换能器的几点总结
  6. java油画转换,java 图像特效之油画
  7. 觉非科技李东旻:智能驾驶向大模型的进化与感知决策新范式的诞生
  8. 【通达信指标公式】主力博弈分时指标,分时图抓日内弱转强牛股
  9. 【Linux】Linux 中的UID
  10. educoder——面向对象程序设计java——第一阶段Java语言基础(七)- String类