Content

Oracle动态视图v$active_session_history实战示例(oracle视图创建语句在哪查看)燃爆了

文章摘要

这篇文章讨论了通过自定义视图和查询来分析SQL阻塞问题。首先,作者展示了两个自定义视图,分别统计了全局和非全局的阻塞情况,帮助识别阻塞者和被阻塞者的活动。接着,作者进一步细化查询,加入了等待事件的分析,以更清晰地发现阻塞原因。最后,文章得出了结论,指出在特定时间段内,某个SQL语句出现了大量并发等待和阻塞现象,最终发现是由于某个操作的阻塞导致的。

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语句