回收站(recyclebin)引发row cache lock

 版本10.2.0.4 RAC 环境

昨天一哥们QQ发来消息,说有个insert ...语句插入了30分钟还没完成,请求帮忙优化,SQL语句如下:

 

INSERT INTO Temp_CheckSExit101320166
  SELECT KEYCOL,
         CARDNETWORK,
         CARDID,
         EXITSTATION,
         EXITDATE,
         TOTALTOLL,
         PAYMETHOD,
         DEALSTATUS,
         FREEKIND,
         SPLITTOLLINFO,
         ECARDTYPE,
         OWNERNUM,
         0,
         NULL,
         NULL,
         NULL FROMCHECK_SEXIT201108
   WHERE PAYMETHOD = 2
     AND CARDNETWORK = 3201
     AND SUBSTR(EXITNETWORK, 1, 2) = 32
     AND ECARDTYPE = 22
     AND EXITDATE <= 20110829
     AND validflag = 1
     AND ENDFLAG = 0


这个SQL很简单,就是从另外一个表抽取数据到另外一个表,执行计划很简单,是全表扫描,询问得知表CHECK_SEXIT201108 只有0.8G,跑30分钟确实不应该

让他监控等待事件,绝大部分等待是row cache lock

处理问题的方法:

1.由于是insert .... select 没有 sequence,所以sequence因素排除了

2.让他检查 alert.log 搜寻十分有 ROW CACHE LOCK关键字,搜索完毕之后没发现有该关键字,所以ORACLE BUG 也基本排除了

3.查看AWR TOP 5 Timed Events,没有发现ROW CACHE LOCK,所以 row cache lock 竞争也排除了

Top 5 Timed Events

EventWaitsTime(s)Avg Wait(ms)% Total Call TimeWait Class
CPU time 9,610 74.7 
db file sequential read660,8512,590420.1User I/O
db file scattered read284,34645623.5User I/O
gc cr multi block request448,7071120.9Cluster
gc cr disk read296,228970.8Cluster

SQL ordered by Elapsed Time

  • Resources reported for PL/SQL code includes the resources used by all SQL statements called by the code.
  • % Total DB Time is the Elapsed Time of the SQL statement divided into the Total Database Time multiplied by 100

Elapsed Time (s)CPU Time (s)ExecutionsElap per Exec (s)% Total DB TimeSQL IdSQL ModuleSQL Text
6,0836,0793,0352.0047.240hhmdwwgxbw0r select obj#, type#, flags, ...
3,5103,4919,8790.3627.25b52m6vduutr8jdelete from RecycleBin$ ...
3,4453,37713444.9426.75bx1r0wn35qt1pPL/SQL Developerbegin -- Call the procedure ...
3,0883,0270 23.97fxsxz22x0zha3JDBC Connect ClientBEGIN DBMID.PRCSPLITALL ( :V1,...
3,0743,019023.8771dgy4pygdq40JDBC Connect Client INSERT INTO Temp_CheckSExit101...
2,1092,0710 16.37gyvwadw7ruh03PL/SQL DeveloperINSERT INTO Temp_CheckSExit211...
1,5461,5260 12.01326g4yt56tq4ztoad.exeINSERT INTO Temp_CheckSExit2...
1,2471,2222623.449.687wsvh5zkkcxwpTOAD 9.7.0.51begin DBMID.PRCTRANSDATA('DBMI...
1,2311,2142615.559.565gswufgngjg8rDataTransServer.exeINSERT INTO DBMID.TRANS_EXIT20...
8488482424.166.59c6fzw54pm9ra1TOAD 9.7.0.51select * from v$access where o...
6206023206.834.8216514g0b52g4gTOAD 9.7.0.51begin DBMID.PRCTRANSDATA('DBMI...
6135963204.294.76b771m0v7ndgz2TOAD 9.7.0.51INSERT INTO DBMID.TRANS_Entry2...
5073292472.053.930pvtkmrrq8usg select file#, block# from seg...
262199485.462.038nsfam0acu8tnJDBC Thin ClientBEGIN dbmid.PRCCOSMRECORD(:1, ...
2521691516.791.962n67bkp4cv12tJDBC Thin ClientBEGIN dbmid.PrcGetCardMFlux(:1...
1601510 1.24dbgy2zdz33dbvTOAD 9.7.0.51SELECT * FROM DBMTC.RAW_EXIT20...
156156439.071.21cz6qdwvbvf7wmtoad.exeselect * from v$access where o...

 

通过查看TOP SQL,我发现recyclebin居然没有关闭,这实在是不应该,recyclebin通常是需要关闭的,于是让该哥们查看表空间使用率

给了他一个脚本,结果跑半天没结果。。。遇到了library cache lock 由于我不能登录他的数据库,所以建议该哥们关闭回收站,因为我怀疑insert的时候由于表空间几乎满了

导致ORACLE去清空回收站,从而引发row cache lock。果然,当那哥们关闭回收站之后,insert 报错 ORA-01653: unable to extend table.... by 128 in tablespace...

现在已经证明了是回收站引发的row cache lock,那个哥们添加了2个数据文件之后insert 很快,最后让那个哥们purge recyclebin

其实还有个方法可以快速定位是回收站引发的问题,这里就不说了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值