Oracle session相关数据字典(一)
(一)session相关视图
(1)视图
- v$session
- v$active_session_history
- dba_hist_active_session_history
如果是多节点数据库,v$session和v$active_hist_session_history仅获得单节点的信息,可以使用gv$sessiongv$active_session_history来获取所有节点的信息。
(2)三个视图介绍
(2.1)v$session
v$session视图记录了当前连接到数据库的session信息,记录的是实时的数据,当有新的会话连接到数据库时,v$session就会产生一条新的session记录,一旦会话断开,记录消除,所以v$session的信息是实时动态变化的。
视图结构如下:
链接: v$session视图介绍 ,其它2个视图与其类似,不再介绍。
(2.2)v$active_session_history
v$active_session_history是记录了数据库活跃会话的采样,如果是多节点,则用gv$active_session_history来查看所有节点的信息。每隔1秒钟,数据库会进行一次采样,将活跃会话记录到该视图,每个活跃会话记录一行。该视图是ASH的核心,用以记录活动SESSION的历史等待信息,这部分内容记录在内存中,期望值是记录一个小时的内容。
关于活跃会话的定义,大致如下:会话在CPU进行运算或者是非空闲等待的会话都属于活跃会话。官方解释:A database session is considered active if it was on the CPU or was waiting for an event that didn't belong to the Idle
wait class. Refer to the V$EVENT_NAME
view for more information on wait classes.
图1. v$active_session_history是ash报告的数据来源
(2.3)dba_hist_active_sess_history
视图gv$active_session_history会每秒钟将数据库所有节点的活跃会话采样一次,但是数据是存放在内存中的,无法长久保存。而dba_hist_active_sess_history则会将gv$active_session_history里的数据每10秒采样一次并持久化保存。
(3)视图数据流向
图2.视图数据流向
注意:这里需要非常注意,假如一个sql语句运行了100秒,那么会在v$active_session_history里面采集到100~101次,而v$dba_hist_active_session_history每隔10秒从v$active_session_history里面采集一次样本,那么会采集到10~11次样本,计算时间时需要x10.
(二)session相关视图的用途
(1)使用v$session来查看实时阻塞会话
以前处理异常锁的方式如下:
1.查询blocking session
select se.machine,se.sid,se.serial#,se.seconds_in_wait,se.paddr,lo.block
from v$lock lo, v$session se
where lo.sid = se.sid
and lo.block > 0; --bloc>0代表这个会话阻塞了其他会话
2.根据1的sid,serial#杀死会话
alter system kill session 'sid,serial#';
后来在EM里面的Blocking session里面看到下图,以折叠图的形式展现,最上面的代表正在阻塞其它session的会话,研究了一下,可以使用v$session来得到类似的效果。
图1.blocking session树形图
我们来做一次测试,对表test01和test02进行DML操作,观察运行情况,操作如下
(1)创建测试表test01,test02。并在2个表的id列添加主键约束
test01表 test02表
(2)对2个表进行操作,执行顺序如下
----------------------------------------test01操作-------------------------------------------------------
[sessid:27 ] delete from test01; --删除test01整个表的数据,未提交,阻塞源头
[sessid:28 ] update test01 set name = 'aaa' where id = 1; --更新test01表id=1的行,会话产生等待
[sessid:142] insert into test01 values(1,'abc'); --插入test01表id=1的行,会话产生等待
[sessid:25 ] delete from test01 where id = 2; --删除test01表id=2的行,会话产生等待
[sessid:29 ] update test01 set name = 'bbb' where id = 2; --更新test01表id=2的行,会话产生等待
-----------------------------------------test02操作--------------------------------------------------------
[sessid:30 ] insert into test02 values(3,'augly',3000); --插入test02表id=3的行,未提交,阻塞源头
[sessid:23 ] insert into test02 values(3,'augly',3300); --插入test02表id=3的行,会话产生等待
此时我们到EM里面观察,就会发现图1的blocking session树形图。
在实际环境中,大部分系统是没有安装EM的,在没有EM的情况下,我们依然可以通过v$session得到类似的图形
--使用v$session来查看阻塞session信息 SELECT LPAD(' ',5*LEVEL-1)||S."USERNAME" AS user_name ,
LPAD(' ',5*LEVEL-1)||S."SID" AS session_id,
S."SERIAL#",
S."SQL_ID",
S."ROW_WAIT_OBJ#",
S."WAIT_CLASS",
S."EVENT",
S."P1",
S."P2",
S."P3",
S."SECONDS_IN_WAIT"
FROM V$SESSION S
WHERE S."BLOCKING_SESSION" IS NOT NULL
OR S.SID IN(SELECT DISTINCT BLOCKING_SESSION FROM V$SESSION)
START WITH S."BLOCKING_SESSION" IS NULL
CONNECT BY PRIOR S."SID" = S."BLOCKING_SESSION";
结果如下,红色的为阻塞源头:
(2)使用v$active_session_history、dba_hist_active_sess_history来查看历史阻塞会话信息
有时数据库出现问题,而我们不在现场,事后需要分析当时的业务异常情况,可以使用v$active_session_history和dba_hist_active_sess_history来分析当时的情况。
使用dba_hist_active_sess_history的例子:https://www.cnblogs.com/lijiaman/p/10423272.html
【完】
Oracle session相关数据字典(一)的更多相关文章
- oracle session 相关优化
导读: 同学们是不是都用遇到过这种情况,一个业务系统开发期业务并发量只是估算一个值,而系统上线后这个并发量可能会出现溢出或是不够的 情况.在这种情况下我们DBA怎么给出合理的性能优化建议呢?本文就 ...
- oracle常用的数据字典
一.oracle数据字典主要由以下几种视图构成:1.user视图以user_为前缀,用来记录用户对象的信息 2.all视图以all_为前缀,用来记录用户对象的信息及被授权访问的对象信息 3.dba视图 ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- Oracle中的数据字典技术及常用数据字典总结
一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等.当用户在对数据库中的数据进行 ...
- (转)oracle常用的数据字典
一.oracle数据字典主要由以下几种视图构成: .user视图 以user_为前缀,用来记录用户对象的信息 .all视图 以all_为前缀,用来记录用户对象的信息及被授权访问的对象信息 .dba视图 ...
- Oracle 性能相关常用脚本(SQL)
在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考.以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整 ...
- Oracle session active 和 inactive 状态 说明
Oracle session active 和 inactive 状态 说明 原创 2011年06月12日 13:08:00 标签: session / oracle / database / ser ...
- Oracle session连接数和inactive的问题记录
Oracle session连接数和inactive的问题记录 http://timnity.javaeye.com/blog/280383 从上周起,服务器Oracle数据库出现问题,用不到半天,就 ...
- 面试回顾——session相关
原地址:https://blog.csdn.net/quiet_girl/article/details/50580095 Session结束生命周期的几种情况: (1)客户端关闭浏览器(只针对ses ...
随机推荐
- 怎样关闭占用80端口的pid为4的进程
我也被这个问题给纠结了好几天.重装系统都三次了.终于找到原因了:我用的是sqlserver 2008;解决方法:window-sqlserver 2008-配置工具-sqlserver 配置管理器 找 ...
- 无法远程访问Mysql的解决方案
现在在很多的互联网公司对于mysql数据库的使用已经是不可阻挡的趋势了,所以经常我们在项目开始的时候就会做的事情就是找一台Linux服务器,到上面去安装个mysql,然后在开始我们的数据表的导入工作, ...
- 把连接中传的参数截取出来变成一个json对象
获取url function test() { var url=window.location.search; if(url.indexOf("?")!=-1) { var str ...
- 基础架构之GitLab
Git几乎是软件开发人员的必备工具了,关于代码管理,公司都一般都会搭建自己的仓库,关于GitLab的详细介绍参见官方网站详见 https://about.gitlab.com,这篇文章主要介绍安装及使 ...
- deb文件怎么安装
deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式.deb是debian发行版的软件包ubuntu是基于debian 发行的 所有可以用.d ...
- Web API 2 入门——创建ASP.NET Web API的帮助页面(谷歌翻译)
在这篇文章中 创建API帮助页面 将帮助页面添加到现有项目 添加API文档 在敞篷下 下一步 作者:Mike Wasson 创建Web API时,创建帮助页面通常很有用,以便其他开发人员知道如何调用A ...
- Oracle查看每小时日志切换量脚本
---- Show the Number of Redo Log Switches Per Hour-- SET PAUSE ONSET PAUSE 'Press Return to Continue ...
- easyui学习笔记12—tab标签页的添加和删除
这一篇我们来看看标签页的添加和删除动作.我在想看这些例子还不如看文档,文档的内容更加全面,但是文档全部是理论没有实际的操作,看起来很枯燥,文档只能是遇到问题的时候查.easyui的文档写的还是很详细的 ...
- [零基础学JAVA]Java SE面向对象部分.面向对象基础(01)
在对象的内存分配上与c++有区别: C++:#include <iostream>#include <string> class Person{ private: ...
- 在Go语言中记录log:seelog包
前两周调bug调的吐血,虽然解决了但是还是挺浪费时间的.跟同事聊了聊,觉得我们现在项目中的日志记录太少了,导致出了问题不知道怎么下手,还得自己改代码记录日志,然后排查问题.这样如果将来还有bug的话还 ...