似乎在我们拥有的某些服务器上,与实际成本相比,散列连接、分组依据和排序依据的成本太低了。即,索引范围扫描的执行计划通常优于前者,但在解释计划中,成本会更高。
一些进一步的说明:
- 我已经将optimizer_index_cost_adj设置为 20,但仍然不够好。我不想增加纯全表扫描的成本,事实上我不介意优化器降低成本。
- 我注意到pga_aggregate_target会对 CBO 成本估算产生影响,但我绝对不想降低这个参数,因为我们有足够的 RAM。
- 与在单个查询中使用优化器提示相反,我希望设置是全局的。
编辑 1:我正在考虑尝试动态采样,但我没有足够的知识来预测这会如何影响整体性能,即执行计划的更改频率。我肯定更喜欢非常稳定的东西,事实上,对于我们一些最大的客户,我们有一个锁定所有统计数据的策略(这将随着 Oracle 11g SQL 计划管理而改变)。