当我尝试使用Oracle Statistics时,我的成本会增加吗?

时间:2011-05-03 23:43:24

标签: oracle optimization statistics

我对表有一个很大的疑问,我想优化它。

奇怪的是,当我得到没有统计数据的执行计划时,它会说1.2M之类的东西。但是,如果我获得查询中涉及的其中一个表的统计信息,我的成本会降低到4k。但如果我在其他表格中要求统计数据,成本会增加到50k,所以我不确定发生了什么。

有人能解释为什么提供更多统计数据会增加查询成本吗?

2 个答案:

答案 0 :(得分:5)

基于成本的优化工具使用尽可能多的信息来计算计划的成本。如果您更新(即更改)其使用的统计信息,那么显然会改变计划的计算成本。

实际上并不是收集统计数据导致成本增长 - 这些统计数据的变化(无论是向上还是向下)导致计算出的成本发生变化。

如果没有统计数据,Oracle可能会使用启发式,猜测或快速的数据样本(取决于您实例中的设置)。

通常,统计数据越好(越准确或越具代表性),成本计算就越准确。

答案 1 :(得分:0)

基于成本的优化器面临着挑战。存在舍入错误,这可能对其所做的决策产生相当大的影响。这是11g中引入的SQL Plan Stability非常好的原因之一。忘记大约10g,如果可以,或准备长时间的调试。

首次使用时,会根据当前统计信息生成计划并执行。如果重复SQL,则SQL和计划将存储在基准中。在维护窗口中,重新评估最昂贵的计划,并且在许多情况下,可以提供更好的计划。这是可能的,因为在运行时,优化程序在搜索计划时受到限制。在维护窗口中,可以花费更多时间来找到最佳计划。

在11g中,偷看也是固定的,根据绑定变量的值,单个SQL现在可以有多个计划。 查询成本基于许多因素,其中IO是一个非常重要的因素。 你的桌子是如何填满的,高水位在哪里?一张经常填充和清空的桌子可以让它的水印很远......

优化器中存在大量错误,许多选项由隐藏参数控制。您可以尝试使用它们来调整行为。升级到11g可能会更加智能,因为它解决了许多应用程序的许多性能问题。