您的位置:首页 > 数据库 > Oracle

【解剖】Oracle-----Oracle优化-学习笔记(1.1)

2008-08-07 12:41 369 查看
学习笔记的目的:
l 督促自己总结从书中学到的知识深入研究。
l 对于书中一部分晦涩难懂的东西经过自己的提炼,希望能给其他学习者帮助。
l 添加书中不足的地方,增加试验指导,使理论和实践紧密连接在一起,快速提高Oracle优化方面知识。
l 在一个问题点上,扩展其他书中的知识,尽可能把其他本书中的相关精华联系在起来,构建一个稳健的知识体系。
l 两个表以上的连接成本问题进行分析。
l 综合现存市面上多本经典的Oracle优化书籍的精华,降低Oracle学习“成本”。
l 以实用为基础。
声明:所有内容均为凌蓝风原始创作,未经同意请勿转载。[/b][/b]
环境说明:[/b]Oracle 10g R2 (CentOS 5)[/b]

【解剖】Oracle 主要针对一下问题(随时扩展):
1.Oracle优化
l Oracle成本
l 影响Oracle成本的因素
l 执行计划分析】
l SQL性能对设计者的影响
l SQL优化(重点)
Ø 索引(如何设计索引、使用索引和索引的危害。)
Ø 如何查找IO问题
Ø 如何写出好SQL
l 特例问题分析
2.Oracle开发
3.Oracle管理
4.Oracle问题解决

Oracle优化-学习笔记(1.1)
问题:
I. Oracle优化模式有那些?我们需要特殊指定优化模式吗?10g中使用那种模式?
II. Oracle为什么放弃RBO,转向CBO?
III. Oracle成本是什么?
IV. 如何确认成本?
V. 成本和执行时间一定成正比吗?
VI. Oracle 8i、9i和10g中成本计算的不同之处?

问题分析:
I. Oracle优化模式有那些?我们需要特殊指定优化模式吗?10g中使用那种模式?
Oracle优化模式有:基于规则的优化(RBO)和基于成本的优化(CBO)
对于普通用户不需要指定优化模式,Oracle9i和10g都是基于CBO的优化模式。
不过在Oracle 10g版本中,已经不再支持RBO规则。
II. Oracle为什么放弃RBO,转向CBO?
RBO和数据库一起产生,所谓规则就是更具SQL语句结构,产生执行计划,这里有个很严重的缺陷,忽略了数据特点、I/O分布、CPU性能和其他影响执行的因素,通俗点讲,就是不会随着数据的变化而变化,毕竟SQL语句的中心是数据。
CBO克服了RBO的缺点,但是又带来了另一个问题,就是我们如何确认成本?这个问题非常复杂,毕竟没有一个固定的“公式”能够完美的解决。这也是我们研究CBO的意义。
III. Oracle成本是什么?
首先必须明确成本是什么,它是Oracle优化的重要依据,主要包含两方面的含义:
1. 诸如解释计划等工具导致的大量的执行次数。
2. 执行SQL语句导致的实际资源消耗。
IV. 如何确认成本?
通过执行计划可以看到SQL成本。
对于初级用户可以使用PL/SQL的在SQL状态,按F5功能快速看到执行计划。
V. 成本和执行时间一定成正比吗?
绝大多数时候成正比,但是也存在相反情况。
例:一个执行计划,使用散列连接的成本是700万,嵌套循环的成本是42,但是前者执行消耗时间未3秒,后者需要14小时。
当让这是个极端情况,只是用于说明问题。
VI. Oracle 8i、9i和10g中成本计算的不同之处?
8i中,只是简单地计算I/O子系统的请求数目,并选择I/O请求数目最小的作为执行计划。Oracle做了一个最理想的假设,读取1个数据块实用的CPU资源和I/O资源一定比2个数据块消耗的资源要多。还忽略了Oracle缓冲区所问题。

9i中,优化器追加了CPU成本计算功能,优化器自动把这些因子引入到成本方程中,并计算出更加符合实际执行计划。比8i更加符合接近实际。优化器可以更好地估计表扫描的成本。
成本公式如下:
成本= (单数据块的个数×单数据块读取时间 + 多数据块的个数×多数据块读取时间 + CPU处理时间) / 单数据块读取时间。

10g中,优化器追加了脱机优化器功能,用于存储关键的统计信息,以帮助联机优化器处理有关数据的分布问题。

所以 8i升级到 9i或是10g需要更多的测试。
Oracle每次大版本号的升级都是对算法做了比较重要的变更,需要多注意。

待续。。
2008-8-7 凌蓝风
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: