1、打开sql跟踪日志,登录数据库执行以下脚本(详细情况请查看博客DM8 开启 sql跟踪日志),详细方法可参考另外一篇笔记《DM8 开启 sql跟踪日志》
sp_set_para_value(1,'SVR_LOG',1);
2、开启et,也就是可以查看下面的主要耗时慢的执行符
sp_set_para_value(1,'ENABLE_MONITOR',1);
sp_set_para_value(1,'MONITOR_SQL_EXEC',1);
sp_set_para_value(1,'MONITOR_TIME',1);
3、执行以下脚本查询慢sql
--压测过程中执行以下sql,查询出慢sql
SELECT a.sess_id || ',' || a.SESS_SEQ sid,
a.user_name,
b.sql_id sql_id,
b.HASH_VALUE plan_hash_value,
datediff(ss, a.last_send_time,sysdate) last_ela,
a.sql_text sql_text
FROM V$SESSIONS a left join v$sqltext b
on a.SQL_TEXT=b.SQL_TEXT
WHERE a.STATE='ACTIVE' and a.user_name!='SYSDBA' order by last_ela desc;
执行以下sql,根据上图中的sql_id:1510查询主要耗时在哪一步
--查询sql主要耗时在哪
select
a.*
from
V$SQL_NODE_HISTORY a
left join V$SQL_HISTORY b
on
a.exec_id = b.exec_id
where
b.sql_id='1510'
order by
a.exec_id
查询得出,主要耗时是218和219比较耗时
执行以下SQL,定位执行符
select * from V$SQL_NODE_NAME where "TYPE$" IN (218,219)
根据上一步定位的执行符去查看SQL执行计划
对有问题的SQL进行优化,比如创建条件组合索引,消除BLKUP2
优化完成后关闭sql跟踪日志,登录数据库执行以下sql
sp_set_para_value(1,‘SVR_LOG’,0);
文章
阅读量
获赞