查找长时间运行的查询Oracle DB沿着开始和结束时间

vtwuwzda  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(147)

嗨,我试图找到长期运行的查询沿着与数据库示例名称,节点名称,但我不确定有时节点名称和数据库示例名称是相同的。
请检查我使用的查询

select 
A.SQL_ID,
B.MACHINE AS SQL_ID_INSTANCE,
CASE 
WHEN C.MACHINE LIKE '%NODE%' Then 'NODE TRIGGER'
WHEN B.MACHINE LIKE '%DB_INSTANCE%' Then 'DB_INSTANCE_TRIGGER'
END AS FIRED_FROM_WHICH_INSTANCE ,
CASE 
WHEN C.MACHINE LIKE '%NODE%' Then 'NODE TRIGGER'
WHEN B.MACHINE LIKE '%DB_INSTANCE%' Then 'DATABASE' 
END AS RAN_ON_WHICH_NODE,
C.MACHINE AS NODE_NAME,
B.MODULE AS APPLICATION,
B.PROGRAM AS DB_INSTANCE_MACHINE,
B.SQL_OPNAME AS OPERATION
from 
V$SQL A JOIN gv$active_session_history B ON A.SQL_ID=B.SQL_ID
JOIN dba_hist_active_sess_history C ON C.SQL_ID=B.SQL_ID
WHERE C.SAMPLE_TIME LIKE '%14-JUN-23%';
g0czyy6m

g0czyy6m1#

您提出的问题对于解决性能问题非常有用,因为它可以帮助确定占用大量资源并导致数据库变慢的查询。
您可以使用v$session_longops视图。此视图包含有关数据库中所有活动会话的信息以及会话的开始时间、会话已运行的时间量和已完成工作的百分比。
还有另一种使用SQL Query Profiler优化Oracle查询的方法,它可以以最有效的方式识别比预期花费更长时间的查询,并优化Oracle查询的性能。它可以帮助您跟踪会话统计信息,并直观地比较分析结果。

相关问题