服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Oracle - Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

2023-03-09 16:44Yideng Oracle

这篇文章主要为大家介绍了Oracle动态视图v$active_session_history实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Oracle动态视图实战之v$active_session_history

 

先看下官方解释

  • Samples of wait event information are taken once per second and made available using the V$ACTIVE_SESSION_HISTORY view. An active session is one that is waiting on CPU or any event that does not belong to the "Idle" wait class at the time of the sample. The sample information is written to a circular buffer in the SGA, so the greater the database activity, the less time the information will remain available for.
  • 有几个关键点:1秒采集一次,执行时间很快远小于1秒的SQL基本不会采集到,只写入非空闲状态的事件,循环存放活动越多保存的时间就越短。

 

实际工作中主要应用

v$active_session_history的字段非常丰富,实际工作中主要应用在下面这些情况:

a.应用场景:开发反应2023-03-02 00:22至00:35,数据落盘慢,根据情况查看此时间段的主要活动事件,数量,与sql_id(全局)
select count(*), sql_id, event, blocking_session
  from gv$active_session_history
 where sample_time between
       to_date("2023-03-02 00:22:00", "yyyy-mm-dd hh24:mi:ss") and
       to_date("2023-03-02 00:35:00", "yyyy-mm-dd hh24:mi:ss")
 group by sql_id, event, blocking_session
 order by 1;
(非全局)BLOCKING_INST_ID--被阻塞者, blocking_session--阻塞者
select count(*), sql_id, event, BLOCKING_INST_ID, blocking_session
  from v$active_session_history
 where sample_time between
       to_date("2023-03-02 00:20:00", "yyyy-mm-dd hh24:mi:ss") and
       to_date("2023-03-02 00:35:00", "yyyy-mm-dd hh24:mi:ss")
 group by sql_id, event, BLOCKING_INST_ID, blocking_session
 order by 1;
b.现在我们已经得到两个关键信息:sql_id与阻塞事件,首先根据sql_id我们可以再进一步使用此视图,实际中可以多调整几个较小的时间段,以突出最有代表的信息
select count(*),
       session_id,
       session_serial#,
       sql_id,
       event,
       BLOCKING_INST_ID,
       blocking_session
  from v$active_session_history
 where sample_time between
       to_date("2023-03-02 00:24:00", "yyyy-mm-dd hh24:mi:ss") and
       to_date("2023-03-02 00:25:00", "yyyy-mm-dd hh24:mi:ss")
   and sql_id = "1xfbtdvu3xb67"
 group by session_id,
          session_serial#,
          sql_id,
          event,
          BLOCKING_INST_ID,
          blocking_session
 order by 3;
c.加入等待事件后更清晰
select count(*),
       session_id,
       sql_id,
       event,
       BLOCKING_INST_ID,
       blocking_session
  from v$active_session_history
 where sample_time between
       to_date("2023-03-02 00:25:00", "yyyy-mm-dd hh24:mi:ss") and
       to_date("2023-03-02 00:35:00", "yyyy-mm-dd hh24:mi:ss")
   and event = "library cache lock"
   and sql_id = "1j47z0mc6k02b"
 group by session_id, sql_id, event, BLOCKING_INST_ID, blocking_session
 order by 1;
结论:可以看出大量并发等待,最终是发现有什么阻塞了此SQL语句

 

结合我们的AWR报告

当然也要结合我们的AWR报告:(两份为同时间段,上一份为有争用,下一份为正常情况,报告太长,只截取了关键点)

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

 

关键点

最后关键点a:下面报告里的sql_id与事件与v$active_session_history里查出来的结果相同,进一步证明事件与此SQL的关联性。

Oracle动态视图v$active_session_history实战示例

Oracle动态视图v$active_session_history实战示例

  • 总结时间:

我们根据SQL_ID找到相应的SQL语句,从而找到对应的TABLE,最终对应到两张分区表,分别为:AA_BBB_CCCC_DDDD_OUT,AA_BBB_CCCC_DDDD_IN。

在对开发进行严刑拷打逼问后(如果开发小哥不松口怎么办?下节预告:可以直接查询时间段的DDL语句执行情况),终于告诉我当天晚上时间点上对这两张表做了大量新建分区表的操作,至此基本水落石出。

#根据dba_objects确定创建时间是否匹配
select owner,
       object_name,
       object_type,
       to_char(created, "yyyy-mm-dd hh24:mi:ss")
  from dba_objects
 where object_name = "AA_BBB_CCCC_DDDD_OUT"
   and created > to_date("2023-03-01", "yyyy-mm-dd")
 order by 4;
 select owner,
       object_name,
       object_type,
       to_char(created, "yyyy-mm-dd hh24:mi:ss")
  from dba_objects
 where object_name = "AA_BBB_CCCC_DDDD_IN"
   and created > to_date("2023-03-01", "yyyy-mm-dd")
 order by 4;

最后关键点b:我一定要记住,应该最先查看OSWatch的数据,排除OS的问题。至于OSW怎么部署,运行和查看以后章节再补充。同时也得查看database的alert.log日志,有惊喜╰(°▽°)╯

以上就是Oracle动态视图v$active_session_history实战示例的详细内容,更多关于Oracle动态视图的资料请关注服务器之家其它相关文章!

原文地址:https://juejin.cn/post/7207757855033917496

延伸 · 阅读

精彩推荐
  • OracleOracle在PL/SQL中使用子查询

    Oracle在PL/SQL中使用子查询

    这篇文章介绍了Oracle在PL/SQL中使用子查询的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    springsnow11142022-09-12
  • OracleOracle按身份证号得到省市、性别、年龄的示例代码

    Oracle按身份证号得到省市、性别、年龄的示例代码

    这篇文章主要介绍了Oracle按身份证号得到省市、性别、年龄,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要...

    时光有伱记忆成花3772020-08-21
  • OracleOracle中decode函数用法

    Oracle中decode函数用法

    本文详细讲解了Oracle中decode函数的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...

    qichangjian8802022-01-17
  • OracleOracle 数据显示 横表转纵表

    Oracle 数据显示 横表转纵表

    横表转纵表亦可用与decode意义相似的case语句实现,原理同该语句,这里不再过多描述。 ...

    Oracle教程网3012019-11-05
  • OracleOracle创建自增字段--ORACLE SEQUENCE的简单使用介绍

    Oracle创建自增字段--ORACLE SEQUENCE的简单使用介绍

    在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方接下来为大家介绍下Oracle创建自增字段方法感兴趣的各...

    Oracle教程网3682019-11-21
  • OracleORACLE批量导入图片到BLOB字段代码示例

    ORACLE批量导入图片到BLOB字段代码示例

    这篇文章主要介绍了ORACLE批量导入图片到BLOB字段代码示例,此代码示例是文章作者的项目源码,具有一定参考价值,需要的朋友可以了解下。 ...

    我心自明3542020-03-13
  • Oracleplsql 连接oracle数据库详细配置的方法步骤

    plsql 连接oracle数据库详细配置的方法步骤

    这篇文章主要介绍了plsql 连接oracle数据库详细配置的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    weinichendian13662020-04-15
  • OracleOracle 数据仓库ETL技术之多表插入语句的示例详解

    Oracle 数据仓库ETL技术之多表插入语句的示例详解

    Oracle 数据库为 ETL 流程提供了丰富的功能,今天我们就给大家介绍一下 Oracle 多表插入语句,也就是 INSERT ALL 语句,今天通过示例代码给大家介绍Oracle 数据...

    不剪发的Tony老师4302021-04-26