Database 成本与持续收益

Database 成本与持续收益,database,sql-execution-plan,Database,Sql Execution Plan,在explain计划中看到一个低成本但在autotrace中看到高一致性GET计数的查询表明了什么?在这种情况下,成本为100,CR为数百万。充其量,成本是优化器对查询将执行的I/O数量的估计。因此,充其量,只有当优化器找到了一个非常好的计划时,成本才可能是准确的——如果优化器对成本的估计是正确的,并且计划是理想的,这通常意味着您永远不会费心查看计划,因为查询将执行得相当好 然而,一致性GET是对查询实际执行的GET数量的实际度量。因此,这是一个更准确的基准 虽然有很多很多因素会影响成本,也有一

在explain计划中看到一个低成本但在autotrace中看到高一致性GET计数的查询表明了什么?在这种情况下,成本为100,CR为数百万。

充其量,成本是优化器对查询将执行的I/O数量的估计。因此,充其量,只有当优化器找到了一个非常好的计划时,成本才可能是准确的——如果优化器对成本的估计是正确的,并且计划是理想的,这通常意味着您永远不会费心查看计划,因为查询将执行得相当好

然而,一致性GET是对查询实际执行的GET数量的实际度量。因此,这是一个更准确的基准

虽然有很多很多因素会影响成本,也有一些因素会影响一致性GET的数量,但如果您的成本非常低,一致性GET的数量非常高,那么优化器可能会对各个步骤的基数进行错误的估计,这可能是合理的(PLAN_表中的ROWS列告诉您在每个步骤中返回的预期行数)。这可能表明您缺少或过时的统计信息,缺少一些直方图,初始化参数或系统统计信息在某种程度上存在错误,或者CBO由于某些其他原因在估计结果的基数时遇到问题


您使用的是哪一版本的Oracle?

根据版本以及您是否在基于cpu的成本计算模式下运行,成本可能代表两种不同的情况

简单地说,成本表示优化器期望查询执行的时间量,但它以单个块读取所需的时间量为单位表示。例如,如果Oracle期望单个块读取需要1ms,而查询需要20ms,则成本等于20

一致性GET与此不完全匹配,原因有很多:成本包括不一致(当前)GET(例如读取和写入临时数据),成本包括CPU时间,一致性get可以是多块读取,而不是单块读取,因此具有不同的持续时间。Oracle也可以完全错误地估计成本,最终可能需要比估计值更多或更少的一致性get

“基数反馈”是一种可以解释预测执行计划和实际绩效之间脱节的有用方法。请参见本演示: