SQL执行计划改变导致数据库慢

      昨天晚班到今天凌晨4:30,应用作过修改后,进行测试,发现系统极慢,发现对数据库在一张156G的表从v$session_longops可以看出来在做全表扫描,把语句找出来,查看执行计划后,发现执行计划中大表是走的unique index代入值后,手工执代入值后行很快能完成.  接着查看这个语句的历史执行计划,发现发生了改变. 通过对这个语句的表grant 授权操作之后,应用测试这个功能的部分可以成功,但ATM部分还是出不来. 只有将部发表的将上次分析的统计信息导回来,导回来后,应用测试成功.问题解决.

回头想了一下:当时语句抓出来之后,代入值发现执行正常(其实是这条SQL已经重新bind_peeking和parse了),想可能执行计划没有变在查看这条SQL的计划变化历史没注意到已经发生改变,之后转了一圈之后,再仔细看了一下,发现确实改变了,看数据要仔细,优其在人疲劳的时候,否则将浪费宝贵的时间.

--查看执行计划变化历史:
SELECT snap_time,a.* FROM perfstat.stats$sql_plan_usage a, perfstat.stats$snapshot b WHERE a.snap_id=b.snap_id
AND a.hash_value=:hash_value ORDER BY snap_time DESC

--   根据异常的SQLhash_value:原来表分析的统计信息导回数据库select 'EXEC DBMS_STATS.IMPORT_TABLE_STATS(OWNNAME=>'||''''||object_owner||''''||','||'TABNAME=>'||''''||object_name||''''||','||'STATOWN=>'||''''||'PERFSTAT'||''''||','||'STATTAB=>'||''''||'NAME_STAT'||''''||','||'CASCADE=>TRUE'||','||'STATID=>1'||','||'no_invalidate=>true'||')'||';' from (select distinct object_name,object_owner from v$sql_plan where operation='TABLE ACCESS' and object_owner='OWNER' and optimizer='ANALYZED' and hash_value='hash_value');

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10834762/viewspace-469847/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10834762/viewspace-469847/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值