注册
应用压测时SQL很慢,单独运行不慢分析
专栏/Database Thinking/ 文章详情 /

应用压测时SQL很慢,单独运行不慢分析

胡li 2021/10/09 4277 8 2
摘要 进行压力测试时功能很慢,但是单独拿出来到数据库运行很快

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;

​​​​1.png

执行以下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比较耗时
2.png

执行以下SQL,定位执行符

select * from V$SQL_NODE_NAME  where "TYPE$" IN (218,219)

3.png

根据上一步定位的执行符去查看SQL执行计划

4.png
对有问题的SQL进行优化,比如创建条件组合索引,消除BLKUP2

优化完成后关闭sql跟踪日志,登录数据库执行以下sql

sp_set_para_value(1,‘SVR_LOG’,0);

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服