部分内容引自 Oracle优化器的优化方式和优化模式-性能调优
http://www.cnblogs.com/sopost/archive/2010/12/21/2190066.html
书 <<收获,不止Oracle>> 作者梁敬彬。
以前做过生产运行环境慢的问题定位与调优,记忆中影响最大的部分在Oracle数据库。
Oracle的种种问题会导致应用产生性能问题:
数据库服务器操作系统的版本问题(32位或者64位等),
oracle的版本问题(32位或者64位、10g、11g等),
数据表的关键列索引没建,
表空间不足了,
数据库服务器IP地址冲突了,
数据库表设计不合理,
DBA没有建好rac等等。
这篇文章介绍一下Oracle优化器方面的知识,可能只与上面所列条目的索引建立有关系。
索引的概念应用广泛:图书馆图书编目、编码,电视节目列表,文件系统的树形结构编目,全文搜索与搜索引擎也通过建立索引提高检索效率等等。
Oracle索引就是对数据库表中一列或多列的值进行排序的一种结构。
Oracle索引有三种类型: B-Tree索引,位图索引,函数索引。
通常应用较多的是B-Tree索引。
按照常人的理解,当只需要检索数据表中少量数据时,应用索引是可以提高速度的(比如修改某一条记录,查询某几条记录);但是当要检索大量数据时(比如从100万记录中查询出30万条),索引应该不起什么作用。
对应现实阅读书籍的例子来理解就容易了:当只要查看书籍中某个理论的内容时翻看一下目录,找到具体页数,然后去阅读,非常方便;但是当一本书的很多内容都有吸引力时,我最可能会从头到尾阅读一遍。
当然现实生活中阅读书籍的模式并不只是这两种,如:我对书籍中很多概念都有兴趣,我可能会翻看目录来一一检索查看。
Oracle数据库也有同样的问题:虽然索引号称比较快,但是索引实际的检索效率可能不如别的检索方式。那么Oracle是如何处理这种种情况的呢?
Oracle优化器就是用来权衡检索效率的。
Oracle优化器(Optimizer)主要工作是分析语句的执行计划。
Oracle优化器有两种优化方式: RBO(Rule-Based Optimization) 基于规则的优化, CBO(Cost-Based Optimization)基于代价的优化。
当采用RBO方式时:优化器在分析SQL语句时遵循Oracle内部预定的一些规则,如where 字句中某条件列有索引则走索引等。
当采用CBO方式时:优化器在分析SQL语句参照的是表及索引的统计信息。
Oracle优化器的模式有四种:Rule, Choose, First Rows, All Rows。
Rule既是走RBO方式。
Choose是指当一个表或索引有统计信息则走CBO方式,反之并且表不是特别小且有索引则走RBO方式。Choose模式是Oracle的默认优化器模式。
First Rows与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。
All Rows:也就是我们所说的Cost方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走基于规则的方式。
优化器模式的设定:
A、Instance级别
我们可以通过在init.ora文件中设定OPTIMIZER_MODE=RULE、OPTIMIZER_MODE=CHOOSE、OPTIMIZER_MODE=FIRST_ROWS、OPTIMIZER_MODE=ALL_ROWS去选用3所提的四种方式,如果你没设定OPTIMIZER_MODE参数则默认用的是Choose这种方式。
B、Sessions级别
通过SQL> ALTER SESSION SET OPTIMIZER_MODE=?;来设定。
C、语句级别
可能需要用到Hint。
本文要说明的核心思想是: Oracle并不认为SQL语句走索引就是最优的,这和现实生活中阅读书籍有异曲同工之妙。
但是话又说回来:对于普通的应用,表的索引添加是必须的。因为如果表没有索引,Oracle优化器就陷入巧妇难为无米之炊的境地。
分享到:
相关推荐
Oracle优化器有两种:基于规则的优化器(RBO)和基于成本的优化器(CBO)。RBO在Oracle 8i之前被使用,执行机制相对简单,它根据优化器中嵌入的规则来制定执行计划。例如,如果谓词上有索引的列存在,就会使用索引...
【Oracle 优化器及其优化模式】Oracle 优化器是数据库执行SQL语句前进行分析的关键组件,主要包括基于规则的优化器(RBO)和基于代价的优化器(CBO)。在Oracle 8及后续版本中,CBO被强烈推荐使用,因为它能够根据...
从Oracle 10g开始,RBO(基于规则的优化器)已被淘汰,现在主要使用CBO(基于成本的优化器),它会根据表的物理大小、索引状态等信息来估算成本,选择最低成本的执行计划。 索引是提升查询性能的关键手段。B-tree...
- **优化器模式**:包括规则驱动(Rule-Based Optimizer, RBO)和成本驱动(CBO)。CBO是现代Oracle默认模式,基于统计信息和成本计算最佳执行路径。 4. **HINT**:HINT是Oracle提供的一种机制,允许开发者直接...
接下来,Oracle优化器分为基于规则的优化器(RBO)和基于代价的优化器(CBO)。RBO主要依赖于数据库中已经定义好的规则,如索引的使用规则等;而CBO则依据统计信息来计算不同操作计划的成本,从而选择成本最低、效率...
- **规则基优化器(RBO)**:基于一组预定义的规则来选择执行计划。 - **选择优化器**:通常情况下,CBO能更好地适应大数据量的情况。 #### 六、Oracle的执行计划 - **执行计划的重要性**:执行计划决定了SQL语句的...
优化器的工作方式,如基于规则优化器(RBO)和基于成本优化器(CBO),以及索引的选择和使用,例如B树索引、Bitmap索引,也是关键点。此外,统计信息的收集、Hint的运用、排序和连接的优化、物化视图和临时表的使用...
通过以上对Oracle SQL调优的知识点介绍,我们可以了解到SQL语句从创建到执行完成的整个生命周期,以及如何通过优化器和执行计划来提高查询效率。这对于任何从事Oracle数据库管理或开发工作的专业人士来说都是非常...
3. **优化器处理**:查询转换、RBO或CBO处理。 4. **生成执行计划**。 5. **实际执行**:按照执行计划执行SQL语句。 6. **返回结果**。 综上所述,执行计划是Oracle数据库执行SQL语句的核心部分,对于提高查询效率...
在优化器方面,Oracle提供了基于规则的优化器(Rule-based Optimizer, RBO)和成本基优化器(Cost-based Optimizer, CBO)。CBO在数据库管理中占主导地位,通过分析表中的数据分布、索引、I/O统计和计算出最优的执行...
Oracle的优化器负责选择执行计划,常见的有基于规则的优化器(RBO)和成本基优化器(CBO)。CBO通常更先进,根据统计信息计算成本来选择最佳执行路径。 **8. 执行计划分析** 分析执行计划可以帮助我们理解SQL语句的...
总结来说,Oracle9i优化器是数据库性能调优的关键,通过综合考虑各种因素来选择最佳的执行计划,以提高查询效率。理解并掌握优化器的工作原理和特性,对于提升Oracle数据库的运行效率具有重要意义。
优化器主要基于成本模型来选择执行计划,包括CBO(Cost-Based Optimizer)和RBO(Rule-Based Optimizer)。现代Oracle系统普遍使用CBO,它根据统计信息预测执行成本,选择最低成本的执行路径。 优化SQL性能可以从...
总之,Oracle的优化器是数据库性能调优的关键。RBO虽然已被淘汰,但了解其工作原理有助于理解CBO的发展历程。CBO通过更复杂但更为灵活的策略来选择执行计划,是当前Oracle数据库管理员必须掌握的重要知识。理解CBO的...
从Oracle 10g版本开始,原有的基于规则的优化器(RBO)不再受到支持,因此所有老版本Oracle数据库在升级过程中都需要将优化器从RBO迁移到CBO。 在Oracle数据库优化过程中,以下几个方面是重点需要关注的: 1. CBO...
Oracle提供了多种类型的优化器,包括基于规则的优化器(RBO)和基于成本的优化器(CBO)。然而,CBO是现代Oracle版本中的默认选择,因为它能根据统计信息和实际系统资源消耗来评估执行计划的成本。 CBO依赖于统计...
- **使用Hint**: 在SQL语句中添加Hint可以指导优化器如何执行查询,这对于调试和性能调优非常有用。 通过以上几个方面的深入理解和实践,你可以更好地掌握Oracle数据库性能分析的基本方法,从而有效地管理和优化...
总之,Oracle存储过程的编写和调优是一个涉及多个层面的过程,包括数据库设计、SQL编程、索引策略以及优化器选择。理解这些知识点并结合实际情况应用,可以显著提升Oracle数据库系统的性能和响应速度。