执行计划不稳定的原因分析

本文探讨了CBO(Cost-Based Optimizer)在数据库中如何根据统计信息、环境变量及SQL语句的变化来调整执行计划。重点介绍了统计信息的自动更新机制、优化器参数的影响以及SQL语句变化对执行计划的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CBO主要的输入有3种:统计信息、环境变量和SQL语句。上面任何一种发生变化,执行计划都有可能发生变化。
1. 统计信息的变化
在10g和11g中,在默认情况下都有一个在晚上运行的后台job收集新的统计信息,如果没有禁用这个job,也就意味着统计信息每天都在自动更新,有可能导致执行计划的突然改变。
在10g和11g中,dbms_stats的no_invalidate默认设置为dbms_stats.auto_invalidate,意味着新的统计信息收集完毕后,与该表相关的游标不回立即失效,而是在接下来的5小时内的某个随机时间点上失效。
2. 运行环境的变化
有很多优化器参数会影响成本的计算,有些参数的值是基于数据库所在服务器的物理特性自动计算的,这就是为什么有时候很难在开发或测试环境中得出与生产环境相匹配的执行计划。
3. SQL语句的变化
以下两个原因可能会导致语句的文本没变而优化器评估的实际SQL语句却发生了变化:
1)引用的底层视图发生了变化;
2)使用绑定变量时传过来的值发生了变化(即绑定变量窥视)。

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

转载于:http://blog.itpub.net/26277071/viewspace-716277/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值