注册
DM通过动态视图获取慢SQL
技术分享/ 文章详情 /

DM通过动态视图获取慢SQL

醉酒方知浓 2024/05/31 927 0 1

1.1查询正在运行的慢SQL

可以从当前会话动态视图v$sessions中获取数据库中正在运行的慢SQL。

select
sess_id, last_recv_time,
datediff(ss, last_recv_time, sysdate) exetime,
cast(sf_get_session_sql(sess_id) as varchar)  fullsql, clnt_ip
from v$sessions
where state='ACTIVE'
order by exetime desc;

1.2 查询历史慢SQL

V$SQL_HISTORY中记录数据库中的历史运行SQL,根据运行时间可以获取慢SQL语句信息(该表记录数由参数SQL_HISTORY_CNT指定,默认10000);使用该视图需要开启SQL监控ENABLE_MONITOR=1(默认开启)。

--查询最近排行前十的慢SQL,按照耗时倒序排列 
select top 10 t.TOP_SQL_TEXT, t.TIME_USED, t.START_TIME
from v$sql_history t
order by time_used desc;

1.3查询超过运行时间(默认1秒)的慢SQL

DM开启SQL监控(ENABLE_MONITOR=1、MONITOR_TIME=1,默认开启),可以通过查询动态视图 VLONG_EXEC_SQLS 或 VSYSTEM_LONG_EXEC_SQLS 来获取慢SQL语句。

VLONG_EXEC_SQLS默认显示最近 1000 条执行时间较长的 SQL 语句,VSYSTEM_LONG_EXEC_SQLS显示服务器启动以来执行时间最长的300条SQL语句。具体记录数由如下两个参数控制:

SQL> show parameter long_exec_sqls
行号     PARA_NAME                 PARA_VALUE
---------- ------------------------- ----------
1 LONG_EXEC_SQLS_CNT        1000
2 SYSTEM_LONG_EXEC_SQLS_CNT 20

相关参数说明如下:
微信图片_20240531114237.png
VLONG_EXEC_SQLS 和 VSYSTEM_LONG_EXEC_SQLS记录超过预定值时间的SQL,默认预定值时间是1000毫秒。可通过 SP_SET_LONG_TIME修改,通过 SF_GET_LONG_TIME查看当前值。

SQL> select SF_GET_LONG_TIME;
行号     SF_GET_LONG_TIME
---------- ----------------
1 1000
SQL> SP_SET_LONG_TIME(2000);
SQL> select SF_GET_LONG_TIME;
行号     SF_GET_LONG_TIME
---------- ----------------
1 2000
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服