67.业务反应数据库执行慢

1.业务反应数据库执行慢
(1)收集AWR报告,查看慢SQL 

SQL_ID=bgm0vwvbq0rf0    
SQL_TEXT=MERGE INTO prplrprepare t1 USING...;
该SQL运行好几个小时没有结束。

(2)查询前台正在发出的 sql 语句 

--查询前台发出的 sql 语句 :  
col USER_NAME for a20
col SQL_TEXT for a10000
SELECT SID,USER_NAME,SQL_TEXT FROM V$OPEN_CURSOR 
WHERE SID IN (SELECT SID FROM (SELECT SID,SERIAL# FROM V$SESSION WHERE STATUS= 'ACTIVE' ))
and SQL_TEXT like 'MERGE INTO prplrprepare t1%'; 

       SID USER_NAME SQL_TEXT
---------- --------------------
      7241 ACTUARY MERGE INTO prplrprepare t1		USING		   (
      3792 ACTUARY MERGE INTO prplrprepare t1		USING		   (
     12108 ACTUARY MERGE INTO prplrprepare t1		USING		   (
     14312 ACTUARY MERGE INTO prplrprepare t1		USING		   (
      9910 ACTUARY MERGE INTO prplrprepare t1		USING		   (
      8333 ACTUARY MERGE INTO prplrprepare t1		USING		   (
      1577 ACTUARY MERGE INTO prplrprepare t1		USING		   (
      3471 ACTUARY MERGE INTO prplrprepare t1		USING		   (
       653 ACTUARY MERGE INTO prplrprepare t1		USING		   (

发现有9个会话发起 这个语句。

(3)查看这些SID(会话ID对应的 会话和SQL_ID)

select SID, SERIAL#,USERNAME,SQL_ID from v$session where SID in(7241,3792,12108
,14312,9910,8333,1577,3471,653);

        SID    SERIAL# USERNAME		    SQL_ID
---------- ---------- -------------------------------
       653	56471 ACTUARY			bgm0vwvbq0rf0
      1577	26801 ACTUARY			bgm0vwvbq0rf0
      3471	45308 ACTUARY			bgm0vwvbq0rf0
      3792	47101 ACTUARY			bgm0vwvbq0rf0
      7241	16120 ACTUARY			bgm0vwvbq0rf0
      8333	61306 ACTUARY			bgm0vwvbq0rf0
      9910	33348 ACTUARY			bgm0vwvbq0rf0
     12108	16036 ACTUARY			bgm0vwvbq0rf0
     14312	12481 ACTUARY			bgm0vwvbq0rf0

(4)杀掉会话重新执行。

alter system kill session  '653,56471';
alter system kill session  '1577,26801'; 
alter system kill session  '3471,45308'; 
alter system kill session  '3792,47101'; 
alter system kill session  '7241,16120'; 
alter system kill session  '8333,61306'; 
alter system kill session  '9910,33348'; 
alter system kill session  '12108,16036';
alter system kill session  '14312,12481';

2.总结

当数据库比较慢的时候,有以下几种可能:

(1)SQL语句没有优化。

(2)产生锁,夯住了。

(3)临时表空间不足或表空间不足。

(4)磁盘损坏。

上面的问题是多个会话执行同一个SQL夯死了。同时我们还发现该SQL的逻辑读居然达到32T.

逻辑读达到了31.56T: 4236170089*8K/1024/1024/1024=31.56T,消耗时间:20551/60/60=5.7小时。

和业务人员交流,该SQL实际执行2个小时。但是我们看到的是5.7小时,同时SQL有4个并发,由此我们断定该执行时间是多个CPU并行执行的总时间。平均每个CPU的执行时间大约1.425小时。

因此这里的Elapsed Time(s),并不是SQL在单个CPU里面的执行时间,而是多个CPU执行时间综合。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值