oracle 分区表 字典,Oracle session相关数据字典(一)

(一)session相关视图

(1)视图

v$session

v$active_session_history

dba_hist_active_session_history

如果是多节点数据库,vsession和vactive_hist_session_history仅获得单节点的信息,可以使用gvsessiongvactive_session_history来获取所有节点的信息。

(2)三个视图介绍

(2.1)v$session

vsession视图记录了当前连接到数据库的session信息,记录的是实时的数据,当有新的会话连接到数据库时,vsession就会产生一条新的session记录,一旦会话断开,记录消除,所以v$session的信息是实时动态变化的。

视图结构如下:

链接: v$session视图介绍 ,其它2个视图与其类似,不再介绍。

(2.2)v$active_session_history

vactive_session_history是记录了数据库活跃会话的采样,如果是多节点,则用gvactive_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.

bd206b36eddb58c54878e403f828e756.png

图1、 v$active_session_history是ash报告的数据来源

(2.3)dba_hist_active_sess_history

视图gvactive_session_history会每秒钟将数据库所有节点的活跃会话采样一次,但是数据是存放在内存中的,无法长久保存。而dba_hist_active_sess_history则会将gvactive_session_history里的数据每10秒采样一次并持久化保存。

(3)视图数据流向

1878eb32af167801c8aa5bff6092a02f.png

图2、视图数据流向

注意:这里需要非常注意,假如一个sql语句运行了100秒,那么会在vactive_session_history里面采集到100~101次,而vdba_hist_active_session_history每隔10秒从v$active_session_history里面采集一次样本,那么会采集到10~11次样本,计算时间时需要x10.

(二)session相关视图的用途

(1)使用v$session来查看实时阻塞会话

以前处理异常锁的方式如下:

1、查询blocking session

2、根据1的sid,serial#杀死会话

后来在EM里面的Blocking session里面看到下图,以折叠图的形式展现,最上面的代表正在阻塞其它session的会话,研究了一下,可以使用v$session来得到类似的效果。

9d4d1b311179f2871116a4008c0304b1.png

图1、blocking session树形图

我们来做一次测试,对表test01和test02进行DML操作,观察运行情况,操作如下

(1)创建测试表test01,test02。并在2个表的id列添加主键约束

96741a274ebcb59c0c49fef980a043b4.png43b2ee562aa03700a1f8c7fcdb6ef790.png

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得到类似的图形

结果如下,红色的为阻塞源头:

94c0d39c870dd8bff76b240568eca79e.png

(2)使用v$active_session_history、dba_hist_active_sess_history来查看历史阻塞会话信息

有时数据库出现问题,而我们不在现场,事后需要分析当时的业务异常情况,可以使用v$active_session_history和dba_hist_active_sess_history来分析当时的情况。

【完】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值