查询优化器对于SQL语句的性能非常重要,因为我们写的SQL语句最后被数据库执行,是通过查询优化器生成执行计划实现的。如果查询优
一. 背景介绍
查询优化器对于SQL语句的性能非常重要,因为我们写的SQL语句最后被数据库执行,是通过查询优化器生成执行计划实现的。如果查询优化器生成的执行计划低效,那么就会导致低劣的性能。有一些参数的配置能够影响到查询优化器生成高效的执行计划,但也是有风险的。总之,可以这么说,配置查询优化器的代价是昂贵的,但值得为此付出。
二. 配置线路图
我们可以按照如下图所示的路线,来一个个参数进行配置
下面是对图中标有数字步骤的描述:(后面再详细描述各个参数的含义)
1. 这两个参数需要调整:optimizer_mode 和 db_file_mutiblock_read_count
2. 这一步的参数默认值已经很合适了,通常没必要调整。这些参数主要是要启用或者禁止查询优化器某一些特性
3. 收集系统统计信息和对象统计信息,这一步是必须做到,不过Oracle10g中已经自己做了。
4. 内存中存储数据时选择手动还是自动调整内存的使用量。
5. 自动调整的话,需要设置pga_aggregate_target参数。
6. 手动调整的话,需要设置这些参数。
7. 测试应用程序是否达到预期的性能
8. 如果查询优化器能为大多数SQL生成高效执行计划,则配置成功,,否则需要进行第9步。
9. 如果查询优化器倾向于使用过多或者过少索引,通常需要调整参数optimizer_index_caching和optimizer_index_cost_adj