数据库session分析表

news2024/11/19 20:27:31

目录

Active Session                                活动会话

gv$active_session_history            每秒采集一次

dba_hist_active_sess_history       每10秒采集一次

背景

说明:

常用sql

直接使用V$ACTIVE_SESSION_HISTORY的sql

与其他表和视图共同查询更全面和可读的信息

V$ACTIVE_SESSION_HISTORY说明


名称说明
v$session连接将产生会话,当前会话的信息保存在v$session中,连接断开后消失
v$session_wait将当前会话中正在等待的会话状态复制一份到视图,断开后消失(等待会话生命周期最后1次等待);
v$session_wait_history保存每个活动session在v$session_wait中最近10次的等待事件(等待会话生命周期最后10次等待);
Active Session

v$active_session_history

gv$active_session_history

在内存中保存,每秒从v$session_wait中采样一次(等待会话每秒的快照)
dba_hist_active_sess_historydba_hist_active_sess_history则会将gv$active_session_history里的数据每10秒采样一次并持久化保存。

表关系

v$session(ASH Buffer) —>v$active_session_history—>dba_hist_active_sess_history(AWR仓库)

ASH和AWR关系

背景


在很多情况下,当数据库发生性能问题的时候,我们并没有机会来收集足够的诊断信息,比如system state dump或者hang analyze,甚至问题发生的时候DBA根本不在场。这给我们诊断问题带来很大的困难。那么在这种情况下,我们是否能在事后收集一些信息来分析问题的原因呢?在Oracle 10G或者更高版本上,答案是肯定的。

说明:

在Oracle 10G中,我们引入了AWR和ASH采样机制,有一个视图gv$active_session_history会每秒钟将数据库所有节点的Active Session采样一次,而dba_hist_active_sess_history则会将gv$active_session_history里的数据每10秒采样一次并持久化保存。

ASH代表了近期活动的历史。 该图显示了当活动时如何采样会话。 每秒钟,Oracle数据库服务器查看活动会话,并记录这些会话正在等待的事件。 非活动会话不被采样。 采样非常高效,因为它直接访问Oracle数据库内部结构。

生成报告

SQL> @?/rdbms/admin/ashrpt.sql

Current Instance

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

   DB Id    DB Name      Inst Num Instance

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

   42938845 ORA11G              1 ora11g

Specify the Report Type 

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

Enter 'html' for an HTML report, or 'text' for plain text

Defaults to 'html'

Enter value for report_type: html --指定报告类型,此处使用html

Type Specified:  html

Instances in this Workload Repository schema

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

   DB Id     Inst Num DB Name      Instance     Host

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

* 42938845          1 ORA11G       ora11g       ydq05

详见:Oracle活动会话历史(ASH)及报告解读_51CTO博客_oracle ash报告

常用sql

直接使用V$ACTIVE_SESSION_HISTORY的sql

查找最近一分钟内,最消耗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));

与其他表和视图共同查询更全面和可读的信息

确定那个对象有高的等待:

SELECT a.Current_Obj#
      ,o.Object_Name
      ,o.Object_Type
      ,a.Event
      ,SUM(a.Wait_Time + a.Time_Waited) Total_Wait_Time
  FROM V$active_Session_History a
      ,Dba_Objects              o
 WHERE a.Sample_Time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE
   AND a.Current_Obj# = o.Object_Id
 GROUP BY a.Current_Obj#
         ,o.Object_Name
         ,o.Object_Type
         ,a.Event
 ORDER BY Total_Wait_Time DESC;

看看一段时间主要是那些等待事件:

SELECT a.Event
      ,SUM(a.Wait_Time + a.Time_Waited) Total_Wait_Time
  FROM V$active_Session_History a
 WHERE a.Sample_Time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE
 GROUP BY a.Event
 ORDER BY Total_Wait_Time DESC;

看看那个回话有问题:

--只能查询最近的会准一点,回话退出就不行了

SELECT s.Sid
      ,s.Username
      ,SUM(a.Wait_Time + a.Time_Waited) Total_Wait_Time
  FROM V$active_Session_History a
      ,V$session                s
 WHERE a.Sample_Time BETWEEN SYSDATE - 30 / 1440 AND SYSDATE
   AND a.Session_Id = s.Sid
 GROUP BY s.Sid
         ,s.Username
 ORDER BY Total_Wait_Time DESC;

看看那个sql语句有问题。

这里查询的是v$sqlarea视图。 同样你可以使用视图DBA_HIST_ACTIVE_SESS_HISTORY代替v$active_session_history查询历史的信息。

SELECT a.User_Id
      ,d.Username
      ,s.Sql_Text
      ,SUM(a.Wait_Time + a.Time_Waited) Total_Wait_Time
  FROM V$active_Session_History a
      ,V$sqlarea                s
      ,Dba_Users                d
 WHERE a.Sample_Time BETWEEN SYSDATE - 15 / 1440 AND SYSDATE
   AND a.Sql_Id = s.Sql_Id
   AND a.User_Id = d.User_Id
 GROUP BY a.User_Id
         ,s.Sql_Text
         ,d.Username
 ORDER BY SUM(a.Wait_Time + a.Time_Waited) DESC;

V$ACTIVE_SESSION_HISTORY说明

V$ACTIVE_SESSION_HISTORY显示数据库中的采样会话活动。它包含每秒拍摄一次的活动数据库会话的快照。如果数据库会话在CPU上或正在等待不属于Idlewait类的事件,则认为该数据库会话处于活动状态。请参阅该V$EVENT_NAME视图以获取有关等待类的更多信息。

该视图为每个样本的每个活动会话包含一行,并首先返回最新的会话样本行。V$SESSION视图中显示活动会话历史记录中描述会话的大多数列。

字段数据类型描述
SAMPLE_IDNUMBER样品编号
SAMPLE_TIMETIMESTAMP(3)取样时间
SESSION_IDNUMBER会话标识符;映射到V$SESSION.SID
SESSION_SERIAL#NUMBER会话序列号(用于唯一标识会话的对象);映射到V$SESSION.SERIAL#
USER_IDNUMBEROracle用户标识符;映射到V$SESSION.USER#
SQL_IDVARCHAR2(13)采样时会话正在执行的SQL语句的SQL标识符
SQL_CHILD_NUMBERNUMBER采样时会话正在执行的SQL语句的子代号
SQL_PLAN_HASH_VALUENUMBER游标的SQL计划的数字表示形式。此信息可能不适用于所有会话样本。V$SESSION不包含此信息。
FORCE_MATCHING_SIGNATURENUMBERCURSOR_SHARING参数设置为时使用的签名FORCE
SQL_OPCODENUMBER指示SQL语句处于哪个操作阶段;映射到V$SESSION.COMMAND
另请参见: “ V $ SESSION”以获取有关解释此列的信息
SERVICE_HASHNUMBER标识服务的哈希值;映射到V$ACTIVE_SERVICES.NAME_HASH
SESSION_TYPEVARCHAR2(10)会话类型:
FOREGROUND
BACKGROUND
SESSION_STATEVARCHAR2(7)会话状态:
WAITING
ON CPU
QC_SESSION_IDNUMBER查询协调器会话ID。仅当采样的会话是并行查询从属时,此信息才可用。对于所有其他会话,该值为0。
QC_INSTANCE_IDNUMBER查询协调器实例ID。仅当采样的会话是并行查询从属时,此信息才可用。对于所有其他会话,该值为0。
BLOCKING_SESSIONNUMBER阻止会话的会话标识符。仅在会话等待入队或“缓冲区繁忙”等待时填充。映射到V$SESSION.BLOCKING_SESSION。
BLOCKING_SESSION_STATUSVARCHAR2(11)阻止会话的状态:
VALID
NO HOLDER
GLOBAL
NOT IN WAIT
UNKNOWN
BLOCKING_SESSION_SERIAL#NUMBER阻止会话的序列号
EVENTVARCHAR2(64)如果SESSION_STATE= WAITING,则在采样时会话正在等待的事件。
如果SESSION_STATE= ON CPU,则此列将为NULL。
另请参见: 附录C,“ Oracle等待事件”
EVENT_IDNUMBER会话正在等待或会话最后等待的资源或事件的标识符。解释与该EVENT列相似。
EVENT#NUMBER会话正在等待或会话最后等待的资源或事件的编号。解释与该EVENT列相似。
SEQ#NUMBER唯一标识等待的序列号(每次等待增加)
P1TEXTVARCHAR2(64)第一个附加参数的文本
P1NUMBER第一个附加参数
P2TEXTVARCHAR2(64)第二个附加参数的文本
P2NUMBER第二个附加参数
P3TEXTVARCHAR2(64)第三个附加参数的文本
P3NUMBER第三个附加参数
WAIT_CLASSVARCHAR2(64)采样时会话正在等待的事件的等待类名称。解释与该EVENT列相似。映射到V$SESSION.WAIT_CLASS。
WAIT_CLASS_IDNUMBER采样时会话正在等待的事件的等待类标识符。解释与该EVENT列相似。映射到V$SESSION.WAIT_CLASS_ID。
WAIT_TIMENUMBER0 如果会话在采样时正在等待
如果会话在采样时位于CPU上,则会话最后等待的事件的总等待时间

无论WAIT_TIME=0是什么是有用的,找到SESSION_STATE在采样的时间,而不是实际的价值WAIT_TIME本身。Maps to V$SESSION.WAIT_TIME。
TIME_WAITEDNUMBER如果SESSION_STATE= WAITING,则会话实际等待该事件所花费的时间。此列设置为在取样时正在进行的等待。
如果一个等待事件持续了超过一秒钟,并且在多个会话样本行中被发现等待,那么等待该等待事件的实际时间将被填充在这些会话样本行的最后。在任何给定时间,此信息都将不适用于最新的会话样本。
XIDRAW(8)采样时会话正在处理的事务ID。V$SESSION不包含此信息。
CURRENT_OBJ#NUMBER会话引用的对象的对象ID。仅当会话正在等待应用程序,群集,并发和用户I / O等待事件时,此信息才可用。映射到V$SESSION.ROW_WAIT_OBJ#。
CURRENT_FILE#NUMBER包含会话正在引用的块的文件的文件号。仅当会话正在等待群集,并发和用户I / O等待事件时,此信息才可用。映射到V$SESSION.ROW_WAIT_FILE#。
CURRENT_BLOCK#NUMBER会话引用的块的ID。仅当会话正在等待群集,并发和用户I / O等待事件时,此信息才可用。映射到V$SESSION.ROW_WAIT_BLOCK#。
PROGRAMVARCHAR2(48)操作系统程序名称
MODULEVARCHAR2(48)采样时执行模块的名称,由DBMS_APPLICATION_INFO.SET_MODULE过程设置
ACTIONVARCHAR2(32)采样时执行模块的名称,由DBMS_APPLICATION_INFO.SET_ACTION过程设置
CLIENT_IDVARCHAR2(64)会话的客户端标识符;映射到V$SESSION.CLIENT_IDENTIFIER

参考文章:

        dba_hist_active_sess_history_自摆渡的博客-CSDN博客_dba_hist_active_sess_history

        V $ ACTIVE_SESSION_HISTORY_allway2的博客-CSDN博客_v$active_session_historyOracle性能调整的三把利剑--ASH,AWR,ADDM - 程序员大本营

v$session,v$session_wait,v$session_wait_history,v$active_session_history - 无双的小宝 - 博客园

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络数学原理与编码逻辑(一) 无隐层模型

概述 几年前就想写这篇文章&#xff0c;但是要上班应付各种工作内容&#xff0c;在解析神经网络的理论问题上也是断断续续&#xff0c;加上个人能力有限&#xff0c;很多问题并没有研究的很明白&#xff0c;以及神经网络本身高维问题的复杂性&#xff0c;导致这个问题的理解也…

OAuth2代码流程演示

目录 一&#xff0c;创建项目 二&#xff0c;项目结构 一&#xff0c;创建项目 新建项目时&#xff0c;如果换了工作区间我们一定要记得改maven地址&#xff0c;不然下载插件时不仅占用C盘内存&#xff0c;还会下载的很慢。 导入项目 导入新项目后就会下载新的插件&#xf…

消息队列简介

提高系统性能首先考虑的是数据库的优化&#xff0c;之前一篇文章《数据库的使用你可能忽略了这些》中有提到过开发中&#xff0c;针对数据库需要注意的事项。但是数据库因为历史原因&#xff0c;横向扩展是一件非常复杂的工程&#xff0c;所有我们一般会尽量把流量都挡在数据库…

Unity可用 运行时语音合成(文本转语音)插件 RT-Voice PRO

Unity语音合成文本转语音插件 RT-Voice PRO前言一、导入RT-Voice PRO插件二、使用步骤1.先看自带例子&#xff08;01-Speech&#xff09;2.自行配置总结前言 提示&#xff1a;这个插件在Unity Asset Store 卖 78美刀,确实买不起啊。 &#x1f602; AssetStore下载链接 文章最后…

复试数据结构篇[第5章-第6章]

文章目录第五章 数组和广义表1-数组定义2-数组的顺序表示3-矩阵的压缩存储&#xff08;1&#xff09;对称矩阵和三角矩阵&#xff08;2&#xff09;对角矩阵&#xff08;3&#xff09;稀疏矩阵&#xff08;3&#xff09;十字链表4-广义表的定义串、数组、广义表小结第六章 树与…

JVM的类加载

什么是类加载&#xff1f;java程序运行前&#xff0c;要经过编译即.java>.class文件。运行的时候java进程(JVM)就会读取对应的.class文件&#xff0c;并解析内容&#xff0c;在内存中构造出类对象并进行初始化&#xff08;类对象就是描述这个类有哪些属性&#xff0c;哪些方…

基于卡尔曼滤波器的PID控制-3

基于卡尔曼滤波器的PID控制系统结构如图1所示。图1 基于卡尔曼滤波器的PID控制被控对象为二阶传递函数&#xff1a;离散化结果与“基于卡尔曼滤波器的PID控制-1”的仿真实例相同。采样时间为1ms。控制干扰信号w(k)和测量噪声信号v(k)幅值均为0.002的白噪声信号&#xff0c;输入…

Python中最全的窗口操作,如窗口最大化、最小化、窗口置顶、获取缩放比例等

Python窗口操作 前言 本文记录在Python中操作Windows应用窗口的操作。 这里的操作都是自己摸索借助强大的搜索引擎整理出来的&#xff0c;我真棒&#xff01;&#xff01;&#xff01; 知识点&#x1f4d6;&#x1f4d6; 名称解释名称ctypes****ctypesPython的外部函数库。它…

高阶导数——“高等数学”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是高阶导数&#xff0c;在这之前&#xff0c;我们学习了导数的概念和函数的求导法则&#xff0c;那么今天&#xff0c;就让我们一起进入高阶导数的世界吧 一、高阶导数的定义 二、高阶导数的计算 1.直接法 2.间…

儿童护眼台灯如何选择?2023年儿童护眼台灯推荐

随着科技不断发展&#xff0c;生活方式的改变&#xff0c;各类的电子产品的使用&#xff0c;加上不注意保护视力、过度用眼等&#xff0c;我国儿童青少年的近视率出现上升趋势&#xff0c;为了保护孩子们的健康&#xff0c;护眼台灯受到许多家庭的青睐&#xff0c;那么儿童的护…

[个人备忘]go包管理

版本 1.18创作目的: 之前想要在go的项目里引用另一个自己写的项目, 然后被折磨半天,乃至弃坑1,创建项目我们创建目录gogogo,下面有两个项目: 分别创建main.goutils/main.gopackage utils import "fmt" // 大写才能被外部访问 func Log(){fmt.Print("go mod is s…

Postman 实现备份数据 Postman恢复数据 postman 导出导入数据 postman 导入导出数据

Postman 实现备份数据 Postman恢复数据 postman 导出导入数据 postman 导入导出数据 一、需求描述 在使用postman调试接口时&#xff0c;若遇到内网的环境&#xff0c;无法通过账户同步数据&#xff1b; 在A电脑调试的接口数据&#xff0c;需要移动到B电脑上&#xff0c;如何实…

python第三方库的离线安装与自动安装脚本(以flask为例 Ubuntu18.04系统)

1.第三方库安装方式 1.1 pip 安装 以flask为例&#xff0c;使用指令 pip install flask即可安装 其他选项&#xff1a; install 安装库 uninstall 卸载库 list 列出已经安装的库 show 列出已安装的库的详细信息 search 通过PyPI搜索库 help 帮助命令1.2 源码安装 官网获取…

SpringBoot整合Shiro

简介Shiro是一个功能强大和易于使用的Java安全框架&#xff0c;为开发人员提供一个直观而全面的解决方案的认证&#xff0c;授权&#xff0c;加密&#xff0c;会话管理。Shiro 四个主要的功能&#xff1a;Authentication&#xff1a;身份认证/登录&#xff0c;验证用户是不是拥…

kubernetes -- 删除namespace的过程以及遇到的bug解决

通过阅读本篇文章你可以收获如下知识&#xff1a; 解决一个bug。理解k8s的controller中&#xff0c;删除namespace的源码&#xff0c;理解其中的删除过程。 问题 执行kubectl delete ns {ns-name}命令来删除ns-name的时候&#xff0c;发现状态一直停留在Terminating。 [roo…

2023牛客寒假算法基础集训营5

(0条未读通知) 【题解】2023牛客寒假算法基础集训营5_ICPC/CCPC/NOIP/NOI刷题训练题单_牛客竞赛OJ (nowcoder.com) A-小沙の好客 下面是错误代码&#xff0c;我刚开始看到这题&#xff0c;觉得很简单阿&#xff0c;做了才知道&#xff0c;会超时&#xff0c;所以不能单纯的去做…

Mac电脑运行速度又卡又慢如何解决?CleanMyMacX2023最新版

CleanMyMac X为您喜爱的东西腾出空间。体验一系列巧妙的新功能&#xff0c;CleanMyMac可让您安全智能地扫描和清理整个系统&#xff0c;删除大量未使用的文件&#xff0c;缩小iPhoto图库的大小&#xff0c;卸载不需要的应用程序或修复不正常工作的应用程序&#xff0c;管理所有…

ARM异常处理

1.ARM异常源1.1 异常模式2.ARM异常响应CPSR内存储的是当前模式。2.1 异常向量表每个异常源只有四个字节的存储空间&#xff0c;所以不在向量表中写异常处理程序&#xff0c;而是写跳转指令。2.2 IRQ异常举例

产业互联网曾被认为是一个生搬硬凑出来的概念

有关产业互联网的质疑&#xff0c;依然还在耳畔会响。但&#xff0c;我们却无可避免地进入到了产业互联网的周期里。这听上去有些耸人听闻&#xff0c;却在真实地发生着。曾经&#xff0c;产业互联网被认为是一个生搬硬凑出来的概念&#xff0c;甚至还有人认为&#xff0c;它仅…

垃圾渗滤液膜后稳定出水水质稳定工艺

垃圾渗滤液的来源及水质特点 垃圾渗滤液是垃圾在堆放和填埋过程中由于发酵和雨水的淋洗、冲刷以及地表地下水的浸泡出来的污水。 当垃圾堆体的湿度超过其持水能力后&#xff0c;垃圾堆体内悬浮的或溶解的有机污染物和重金属等无机污染物将会随之一块溶出&#xff0c;便会产生渗…