Oracle调优优化器索引成本调整和优化器索引caching

什么是为Oracle设置优化器索引成本调整参数的正确方法。 作为一名开发人员,随着此参数降低,我观察到了巨大的性能提升。 常见查询从2秒减less到200毫秒。 在networking上有很多警告,降低这个值会导致数据库的严重问题,但是没有给出关于什么会出错的细节。

我目前只看到了一个上升的,应用程序性能大大提高,没有下降。 我需要更好地了解调整这些参数可能产生的负面影响。

不推荐改变这个参数的原因是它们对优化器有全db的影响 – 所以当你改变它来调整一个特定的查询时,它可能会对许多其他查询产生一些影响。 所以,如果不仔细testing整个应用程序,在生产环境中进行更改就很危险

然而:

  1. 将其设置在开发/testing环境中,并且在生产中保持相同的值可能是可以接受的(在OLTP系统中通常是惯例)。 但是,你可以确定你的应用程序将运行在一个专用的分贝? 并且将不会被合并到具有默认参数集的另一个数据库中?
  2. 这些参数有助于解决问题,因为Oracle使用了一些关于I / O与CPU的相对成本的启发式,而在您的情况下启发式不够好,因此Oracleselect次优执行计划。 修复启发式的推荐方法是让Oracle为您的数据库机器收集系统统计数据 – CPU速度有多快,在正常的系统负载等情况下从您的I / O系统获取单块/多块需要多长时间。 请参阅Oracle文档 。

如果你想同时使用系统统计信息和优化器参数,可以将其logging下来,乔纳森·刘易斯(Jonathan Lewis)写道(抱歉,该网站不允许发布多个链接)

我希望有帮助

在生产环境中不应更改参数。 主要用途是强制更改计划,以validation不同执行计划的执行情况。 基本上你build议优化器,你的数据库中的所有索引比其他访问path更便宜。 对于某些sql可能是这样,对于其他的可能是错误的。

一旦你有一个良好的性能计划,你应该明白为什么优化器不使用它,并试图修复(即没有新鲜/准确的静态可用 – >收集新的,更准确的统计)。

希望这有助于,斯特凡诺

OLTP系统是最常见的数据库types,这两个参数的默认值是可怕的。 他们导致更多的全表扫描和坏的查询。 一般来说,你想在你上线之前设置这些参数。 你在testing阶段做。

如果您在上线后更改它们,则可能会更改其他被调整为错误设置的查询。 这听起来像你不知道关于数据库调优很多,因为你提到响应时间,而不是查询计划。 你不应该触摸这些参数。

大多数DBA不了解修复和devise之间的概念差异。 你活着后,你正在修复,那就是当你需要小心改变这些参数。 在你生活之前,你正处于devise和开发阶段。 那就是当你像这样调整参数的时候。

顺便说一句,这是一个很好的开始使用这些参数的地方(注意在你开始生产之前,如果你知道你正在做什么!)

optimizer_index_cost_adj = 10优化器caching= 90

这是为OLTPs。 对于批处理,你想要开始的设置是非常不同的。 我稍微鼓励了这些,但这些设置在OLTP上99%的时间给了我最好的总体结果。 但是,在我们投入生产之后,我不会去碰它们。 如果他们不好,我会让他们不好,并调整查询。