Oracle session相关数据字典(一)

Oracle session相关数据字典(一),第1张

概述(一)session相关视图 (1)视图 v$session v$active_session_history dba_hist_active_session_history 如果是多节点数据库,v$

(一)session相关视图

(1)视图

v$sessionv$active_session_historydba_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,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(||S."SID" 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 NulLOR S.SID IN(SELECT disTINCT BLOCKING_SESSION V$SESSION)START WITH S."BLOCKING_SESSION" IS NulLCONNECT 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相关数据字典(一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/sjk/1151940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存