sql执行计划变化 oracle,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

--根据异常的SQL的hash_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(selectdistinctobject_name,object_ownerfromv$sql_planwhereoperation='TABLE ACCESS'andobject_owner='OWNER'andoptimizer='ANALYZED'andhash_value='hash_value');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值