`

(转)【SQL 性能优化】参数设置(优化器)

阅读更多

原文:http://space.itpub.net/22664653/viewspace-673997

SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Productio
NLSRTL Version 10.2.0.4.0 - Production
SQL>show parameter optimizer_
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_dynamic_sampling           integer     2
optimizer_features_enable            string      10.2.0.4
optimizer_index_caching              integer     0
optimizer_index_cost_adj             integer     100
optimizer_mode                       string      CHOOSE
optimizer_secure_view_merging        boolean     TRUE
SQL>
---optimizer_features_enable
如果在升级数据库后还想保持优化器在旧版本上的原有行为,可以设置optimizer_features_enable为旧版本号,不过建议尽快将应用程序调整为适合新版本数据库。可以看看这个参数的取值:
SQL> alter session set optimizer_features_enable ='ddd';
ERROR:
ORA-00096: invalid value ddd for parameter optimizer_features_enable, must be from among
10.2.0.4.1, 10.2.0.4, 10.2.0.3, 10.2.0.2, 10.2.0.1, 10.1.0.5, 10.1.0.4, 10.1.0.3, 10.1.0,
9.2.0.8, 9.2.0, 9.0.1, 9.0.0, 8.1.7, 8.1.6, 8.1.5, 8.1.4, 8.1.3, 8.1.0, 8.0.7, 8.0.6,
8.0.5, 8.0.4, 8.0.3, 8.0.0
optimizer_features_enable 是动态的,可以在系统级和语句级修改。也可以在语句级使用提示修改

optimizer_features_enable(enable)
optimizer_features_enable('10.2.0.5')
注意:optimizer_features_enable 不仅能禁用新版本的特性也能禁用bug 修复。

--optimizer_mode
从这里的提示可以看出优化模式的选择值。
SQL> alter session set optimizer_mode ='dd';
ERROR:
ORA-00096: invalid value dd for parameter optimizer_mode, must be from among
first_rows_1000, first_rows_100, first_rows_10, first_rows_1, first_rows, all_rows,choose, rule
每个值的含义如下:
Rule:基于规则的方式,忽略CBO和统计数据并且完全基于基本数据字典信息生成执行计划。
Choose:允许ORACLE选择最合适的优化器目标,默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,那么ORACLE将使用RULE模式
First Rows:基于成本的优化器模式,当一个表有统计信息时,它将以最快的速度返回查询的最先几行,从总体上减少了响应时间,但是会造成总体查询速度的下降或者是消耗更多的资源,通常会选择索引扫描而不是全表扫描,所以这种模式最适用于在线系统,因为在这样的系统中终端用户希望以最快的速度看到一些结果
All Rows:基于成本的优化器模式,当一个表有统计信息时,它将确保总体查询时间最短,但是它可能在收到第一条记录的操作上花费更长的时间。这种模式通常选择全表扫描,所以这种模式最适用于批量查询,没有统计信息则走RULE模式。
一般来讲,
1 需要获取所有记录更重要,应该将参数设置为all_rows。比如报表系统和 OLAP,数据仓库系统和缓存数据的中间层组件中。
2 如果前几行更重要或者对响应时间的要求非常高的系统,使用first_rows_n这里的n可取(1,10,100,1000)。
  optimizer_mode 是动态的,可以在系统级和语句级设置。也可以使用提示(all_rows,first_rows(n))在语句级更改。

---optimizer_dynamic_sampling 动态采样
优化器可以在语句解析阶段进行信息统计并动态收集。注意:动态信息统计信息既不存储在数据字典也不在其他地方,真正重用它们的是共享游标本身。该参数指定了动态采样的的方式和时间。
1 如果optimizer_features_enable设置为10.0.0或者以上,默认为2,
2 9.2.0则为1,
3 9.0.1或者以下则为0,即禁用了动态采样。
可以在系统级别和会话级别来修改这个参数。也可以通过提示dynamic_sampling()在语句级应用动态采样。
1 设置为所有表设置采样层级:dynamic_sampling(N)
2 为某个表指定采样层级:dynamic_sampling(TNAME N)
层级  含义                                                                     数据块的数量
0     禁止动态采样                                                                0
1     对于没有对象统计信息的表在下面三种情况下使用动态采样。                      32
      1 表没有索引。2 是连接的一部分(包括子查询和不可合并视图)。3块数多于采样数。  
 
2      对于没有对象统计信息的表使用动态采样。                                     64

3     对符合层级2标准的表已及已经使用了评估条件选择性猜测的表使用动态采样                             32

4     对符合层级3标准的表以及where子句中引用了两个或更多字段的表使用动态采样。                  32
 
5     同等级4                                                                     64
6     同等级4                                                                     128
7     同等级4                                                                     256
8     同等级4                                                                     1024
9     同等级4                                                                     4096
10    同等级4                                                                      所有               


optimizer_index_caching
这个参数影响嵌套循环连接的探测索引的代价,0-100表示在使用嵌套循环或这in-list迭代时将索引缓存在buffer cache的百分比。例如,设置为100,则优化器认为100%能在内存中找到索引数据,会按照这个设定来计算cost和选择执行计划。

optimizer_index_cost_adj

和optimizer_index_caching一样,这个参数也是cbo用来计算cost的,这个参数可以用来调整使用索引的代价,默认值是100,范围是1-10000,它表示索引扫描和全表扫描的比值。例如设置为10,意味着使用通过索引路径访问是正常通过索引路径访问的10%(oracle 10g performace tuning guide),也即可以设置索引参与计算代价的不同值。
optimizer_secure_view_merging
这个参数控制视图合并,默认值是true,在不影响安全问题的情况下允许视图合并,如果设置为false,则在任何情况下允许视图合并。

分享到:
评论

相关推荐

    ORACLE_SQL性能优化(全).ppt

    Oracle SQL性能优化是数据库开发人员必须掌握的关键技能,它涉及到SQL语句的编写、执行过程、优化器的选择以及执行计划的分析等多个方面。在Oracle数据库环境中,优化SQL性能对于提升系统整体响应时间、提高并发处理...

    《oracle SQL性能优化》中文电子书

    《Oracle SQL性能优化》这本书是数据库管理员和开发人员的重要参考资料,它深入探讨了如何提高Oracle数据库的SQL查询性能。在数据库系统中,SQL查询的速度直接影响到应用的响应时间和整体性能,因此,理解并掌握SQL...

    SQL性能优化专题分享

    从提供的文件内容来看,知识点主要围绕Oracle数据库的SQL性能优化进行展开。下面将详细说明标题和描述中提及的知识点: 1. SQL性能优化专题 - 这一部分是整个分享的主题,强调了性能优化在SQL编程中的重要性。性能...

    MySQL性能优化 SQL优化方法技巧

    本文将详细介绍MySQL性能优化的关键配置参数以及SQL优化的方法技巧。 #### 二、MySQL性能优化的核心参数 **1. Innodb Buffer Pool Instances** - **定义**: 表示InnoDB引擎中用于缓存表和索引数据的内存池的数量。...

    oracle_sql性能优化 文档

    Oracle SQL性能优化是数据库管理中的重要环节,旨在提高SQL查询的效率,减少资源消耗,提升系统整体性能。本文主要从三个方面介绍Oracle SQL性能优化的基本策略。 1. **选择合适的优化器** ORACLE提供了三种优化器...

    ORACLESQL性能优化系列[参考].pdf

    Oracle SQL性能优化是数据库管理中的重要环节,...综上所述,Oracle SQL性能优化涉及优化器的选择、表的访问方式以及SQL语句的共享机制。理解这些概念并据此调整数据库配置和查询编写,对于提升数据库性能至关重要。

    JAVA\ORACLE_SQL性能优化(全).ppt

    【SQL性能优化基础】 在Java或Oracle SQL性能优化中,首要任务是对SQL语句有深入的理解,以便在编程时能够写出高效运行的代码。优化基础知识包括性能管理、SQL优化机制和应用调整等。 1. **性能管理** - **尽早...

    SQL_Server_2008查询性能优化

    在SQL Server 2008查询性能优化的主题中,我们主要关注如何提高SQL查询的速度,减少资源消耗,以及提升数据库的整体效率。对于那些已经具备基本SQL语法知识,并期望提升其代码执行性能的开发者来说,这是一个至关...

    SQL Server性能优化专题之五:负载均衡

    在SQL Server性能优化的过程中,负载均衡是一个至关重要的概念,尤其对于处理大型数据库的场景。负载均衡旨在有效地分配系统资源,确保服务器性能的稳定性和高可用性,避免单一节点过载,提高整体系统的响应时间和...

    SQL+Server+性能优化及管理艺术 脚本优化文件

    在SQL Server数据库管理系统中,性能优化与管理是至关重要的任务,因为这直接影响到系统的响应速度、资源利用率以及整体系统的稳定性。"SQL Server性能优化及管理艺术"这一主题涵盖了多个方面,包括查询优化、索引...

    oracle_sql性能优化

    设置缺省的优化器,可以通过对 init.ora 文件中 OPTIMIZER_MODE 参数的各种声明,例如 RULE、COST、CHOOSE、ALL_ROWS、FIRST_ROWS。为了使用基于成本的优化器(CBO),必须经常运行 analyze(分析)命令,以增加...

    oracle sql性能优化

    ### Oracle SQL性能优化 在Oracle数据库管理中,SQL性能优化是一项至关重要的技能,它直接影响到系统的响应速度和整体性能。本文将围绕Oracle SQL性能优化的关键点进行深入探讨,旨在帮助数据库管理员和开发人员...

    ORACLE培训SQL性能优化.pptx

    我们可以通过设置启动参数文件中的 OPTIMIZER_MODE 参数来选择优化器模式。 在 SQL 语句优化过程中,我们需要注意一些重要的注意事项。例如,我们需要检查执行计划,检查执行过程中优化器的统计信息,分析相关表的...

    oracle性能优化之SQL语句优化

    在Oracle 9i及之后的版本中,优化器模式可以通过初始化参数`optimizer_mode`进行设置。在实例级别,可以使用`optimizer_mode = {choose|rule|first_rows|first_rows_n|all_rows}`进行全局配置;在会话级别,可以使用...

    ORACLE_SQL性能优化

    SQL性能优化涉及多个层面,包括对SQL语句的理解、优化器的工作原理、执行计划的获取与分析,以及应用设计和数据库配置的调整。 首先,优化基础知识涵盖了性能管理的概念,强调了性能问题的识别、调整方法的选择以及...

    ORACLE SQL 性能优化

    总结来说,优化ORACLE SQL性能主要包括以下几个方面:选择COST优化器并保持统计信息的最新;根据查询需求选择合适的表访问方式,合理利用索引;充分利用共享SQL语句以减少解析时间;以及正确使用绑定变量来提高查询...

    sql server的性能优化x

    ### SQL Server 的性能优化详解 #### 一、前言 SQL Server 是一款广泛使用的数据库管理系统,在企业级应用中扮演着重要角色。为了确保系统能够高效运行,SQL Server 的性能优化至关重要。性能优化主要包括两个方面...

    ORACLE SQL性能优化

    在Oracle SQL性能优化过程中,选择合适的优化器至关重要。Oracle提供了三种类型的优化器:基于规则的优化器(Rule-based Optimizer, RBO),基于成本的优化器(Cost-based Optimizer, CBO),以及选择性优化器(Choose ...

Global site tag (gtag.js) - Google Analytics