“神话”这个词指的是Oracle的那些从未是真的或者曾经是真的,但是现在不是真的的行为的基本情况。大多数的Oracle神话的起源都是技更换术产生的结果。
大多数的人都认为今天的许多Oracle神话在他们那个年代都是真实的(例如,“磁盘负载平衡对于性能非常重要”),但是当硬件和Oracle软件都改进了之后却发现它们都变成了神话。
我们不要忘记Oracle的技术已经超过了15年了,1989年的技术也与今天的技术大相径庭。幸运的是,大多数Oracle的专业人员都充分理解了Oracle神话的不断改变,曾经正确的建议今天是如何变得不再正确,并且成为了具有神话色彩的谎言。
古老的Oracle神话
有许多古老的Oracle技术在过去都是非常有用的,但是当技术改变的时候,成为了神话。问题的混乱是上千家运行在古老的硬件并且不支持发布的Oracle 软件的Oracle店铺带来的。让我们看一些比较古老的神话。
神话:对象在单区域内执行得更好
Oracle大学在20世纪90年代的早期教授了compress=y 输出选项会到达改善结果表的性能。今天,本地治理的表空间(LMT)让这个建议不再有效。
神话:数据缓冲命中率应该保持在超过90%的概率
这个神话也是Oracle在90年代早期宣传的,当时几乎全部的Oracle数据库的I/O成为了瓶颈,并且SGA的尺寸也被32位的服务器技术所限制了。基于Oracle的产品,例如SAP,也都在他们的手册中指出了数据缓冲命中率应该超过90%。Oracle的作者Robert Freeman 提示到:
很多的情况都证实了要证实任何事情都是很简单的。假设有一个基本的证据,我可以证实缓冲区命中率毫无意义,或者我可以证实它是世界上最重要的事情了。
我知道有一些脚本可以运行在你的数据库上,从而产生任何你想要的数据缓冲命中率。这看上去是不是像一个神话?Oracle看起来并不这么认为,基于比率的建议形成了Oracle 10g自动内存治理工具的基础,还有v$db_cache_advice 的建议。
现在也还是存在一些Oracle神话——让我们看一下。
现在的Oracle神话
现代的Oracle神话在很大程度上都是由于Oracle技术的更换,还有一些Oracle专业人员无法调整以适应改变导致的。
神话:索引和表不需要分开
这个神话的产生根据Oracle在90年代早期提出的建议,当时有关磁盘的争论是一个主要的话题。直到不久之前,数据库中索引和表的分离才被认为是好的办法,并且作为改善性能的方法被接受。
当然,还有一部分原因是因为他们在同一个磁盘上,假如他们不分离的话,会互相冲突。将索引移动到一块独立磁盘上的表空间上,与表相分离,而不仅仅是分隔到独立的表空间上,这通常都会带来性能上的提高。
主要的论据,由对单用户系统的10046个追踪所支持,就是在一个查询中访问表和索引的操作在本质上不是异步的,而是线性的过程。然而,然而,即使是在单用户的系统中,也没有考虑到被请求的头移动和与读取索引以及表有关的磁盘延迟。在多用户的环境中,也没有考虑到以上所有的因素,以及多用户访问协同定位的表和索引产生的影响。
现在,当合理地放置了RAID之后,许多有关协同定位的问题的争论都没有了或者转移了。然而,将表和索引分割到几个表空间中仍然使得维护更加简单了。分隔到离散的表空间中使得追踪I/O速率和特定对象或者对象类型成为可能,并且答应用户使用多块尺寸。
神话:频繁更新的表和索引几乎不需要重新组织
这个神话是由于Oracle的专家发表的声明引起的,他宣称Oracle的索引总是保持平衡的,重新构建并不会给索引带来多大的好处。下面我们看一下这个声明,在某种程度上可以帮助我们理解碎片是如何生成的:
除非你想陷入无休止的组织、再组织、组织、再组织……的循环中去,你最好找一下原因。
在完美的世界中,你只要使用绝对正确的参数构建一次即可,永远都不用再重新构建,我恐怕这种情况永远都不会在现实世界中出现。就像期望只清扫你的房间一次,而这个房间里面装满了吵吵闹闹的10几岁的孩子——这是毫无意义的。
今天,能够理解表和索引具有很高频率的并发插入、更新和删除动作是一件好事情,它可以很快地获得次佳的结构并需要重新组织以便位多块扫描操作减少I/O操作(使用Oracle的dbms_redefinition包,更改索引移动/重新构建,更改索引接合,或者甚至是根据可用性需求更改表移动)。索引平衡的概念是分两个叉的,B树总是高度平衡的,它也可以变得稀疏或者向右旋转的,所以就变得更宽或者负载不平衡。
神话:多个块尺寸不会改善性能
这个神话是不朽的,因为多个块尺寸最初是为了支持可传输的表空间而设计的,同时一些人还不能看到多个块尺寸带来的另一方面很重要的好处。不同的块尺寸带来的最大的好处就是更加有效地利用了受到限制的内存区域(db_cache_size, db_32k_cache_size等)以及能够减少多块扫描读取的逻辑I/O次数的对象智能隔离。
今天,Metalink 提示说多个块尺寸参数是Oracle性能调整中最重要的部分了,并且还说Robin Schumacher 等专家们都证实了Oracle的索引可以在较大的块尺寸中构建更加优化的B树结构。还有,重新组织高DML 索引,或者对随机单行读取(唯一索引访问)小行数据的时候使用小的块尺寸,可以减少db_cache_size 的尺寸,并且会因为更多的块适合了缓冲区的大小而减少PIO。
例如,一些实验试图用小的、人造的单用户实验来证实这个断言,并且提出多个块尺寸并不能给现实世界的数据库带来任何好处。然而,现实生活中的店铺却报告了一个有关多个块尺寸和索引用的32k块尺寸的截然不同的结果:
“我最近比较喜欢关注的问题就是有关32KB索引的问题:我们的客户端(200GB+)从这个简单的变化中看到I/O缩减了20%……”,EMEA的技术服务经理Steve Taylor 说。
所以,在这里我们看到了技术的改变是如何将一项15年前本来有效的方式转换为一个“神话”的,并最终得到了一个有关单用户测试脚本的错误结论,同样,由于技术的改变它们还会继续创建新的现代神话。
Oracle神话正在形成
当Oracle的专业人员观察了不同的数据库行为之后得到了不一致的结论之后,神话还在继续。
我们还可以看到Oracle公司大力推荐了一些提出观点的先进人物,但是他们却针对Oracle的性能公开了误导他人的言论,从而制造了新的神话:
“一致是不可能的,也不会被任何的优化人员的设置所影响。”他们影响了优化人员处理事物的方式;但是他们却没有影响事物真正进行的方式。
当然,改变optimizer_mode, optimizer_index_cost_adj和 optimizer_index_caching 的值可以改变优化人员对于是否应该做一个完全的扫描或者索引访问执行计划的判定,这也会对所有查询的一致性数量产生直接的影响。
目前Oracle的专业人员分成两个截然不同的群体,每个群体都会Oracle的性能调整有着完全不同的看法,每个群体都认为对方是造成持续不断的Oracle神话的罪魁祸首。
“经验法则”神话——许多Oracle专业人员都相信“经验法则”(ROT)是非常危险的,并且都了解假如经验法则可以被证实是错误的,即使是在单个的人为的测试中,经验法则在科学上来说都不再是正确的,因此也就是毫无用处了。
“脚本小子”神话——这个神话说的是运行单用户的SQL*Plus 脚本来“证实”的Oracle的运行方式,在多用户的数据库中几乎总是错误的。
结论
这是我的由两部分组成的文章中的第一部分,陈述了理解Oracle神话的基础,并展示了我们如何知晓Oracle神话随着时间改变。在我的下一个部分,我们将会具体讨论Oracle技术的相差巨大的多种方式,并看看它们是如何制造混乱的。
——————————————————————————————————————————————————
背景资料:Oracle公司的发展史
1977 年 拉里·艾利森 (Larry Ellison)、Bob Miner 和 Ed Oates 共同创建了软件开发实验室 (Software Development Laboratories)。1970 年 IBM 的一名研究人员写了一篇名为《大型共享数据库的关系数据模型》的研究论文,他们三人受到这篇文章的启发,决定构建一种新型数据库,称为关系数据库系统 (relational database system) 。
他们所接手的第一个项目是为美国政府做的,他们将之命名为 Oracle。他们认为 Oracle 意思是“聪明之源”,用来作为这个项目的名称十分恰当,也会得到 CIA 的认可。
1978 年 软件开发实验室 从原来的圣克拉克迁至位于硅谷心脏的 Menlo Park 的 Sand Hill 大街上。
为了让人们了解公司的主要业务范围,他们将软件开发实验室更名为关系软件公司 (Relationa Software Inc. (RSI))。
1979 年 RSI 开发出第一款商用 SQL 数据库 — V2(V1 根本就未推出过)。
1982 年 RSI 更名为 Oracle 系统公司 (Oracle System Corporation),Oracle 公司。用产品名称为公司命名,帮助公司赢得了业界的认同。
1983 年 Oracle 决定开发便携式 RDBMS。Oracle 开发出 V3,这是第一款在 PC 机、小型机及大型机上运行的便携式数据库。
1984 年 年收入达到 1,270 万美元
Oracle 迁至贝尔蒙特市戴维斯 20 号一栋 84,000 平方英尺的办公楼内。
推出 Portable Toolset。
这一年设立了:
Oracle 加拿大公司
Oracle 荷兰公司
Oracle 英国有限公司
1985 年 年收入达到 2,300 万美元
这一年设立了:
Oracle 奥地利公司
Oracle 德国公司
Oracle 日本公司
Oracle 瑞典公司
Oracle 瑞士公司
1986 年 年收入达到 5,500 万美元
1986 年 3 月 12 日推出 IPO(首次公开募股)。当日公司股票以 15 美元开盘,20.75 美元收盘。推出第一个客户端/服务器数据库。
这一年设立了:
Oracle 澳大利亚公司
Oracle 芬兰公司
Oracle 法国公司
Oracle 系统香港有限公司
Oracle 挪威公司
Oracle 西班牙公司
1987 年 年收入达到 1.31 亿美元
Oracle 正式成为世界上最大的 DBMS 软件公司。
Oracle 组建了由七个员工和两种产品组成的应用产品部,这标志着它开始进入企业应用产品市场。
Oracle 开始开展咨询与支持业务,旨在帮助客户更好地使用他们的软件。
现在,Oracle 咨询部已成为世界上第四大咨询部门。
推出集成的 Case 和 4GL Toolset。
这一年设立了:
Oracle 墨西哥公司
1988 年 年收入达到 2.82 亿美元
Oracle 成为世界上第四大软件公司。
Oracle 推出 V6 数据库。
Oracle 推出 Unix 关系财务应用产品 (Unix Relational Financial Applications)。
这一年设立了:
Oracle 巴西公司
Oracle 中国公司
Oracle 塞浦路斯公司
Oracle 马来西亚公司
Oracle 新西兰公司
1989 年 年收入达到 5.71 亿美元
Oracle 将其总部迁至红木城海湾。现在那儿已建起了六座摩天大楼,四周有无数的建筑,营造出一种园区气氛。
Oracle 在 IBM 大型机、DEC 和 UNIX 小型机以及 OS/2 PC 机上,创下了事务处理业绩的最佳记录。
推出 OLTP 支持服务。
这一年设立了:
Oracle 智利公司
Oracle 希腊公司
Oracle 韩国公司
Oracle 葡萄牙公司
Oracle 土耳其公司
Oracle 委内瑞拉公司
Oracle 台湾公司
Oracle进入中国市场
Oracle 现在的产品销售范围覆盖全世界 86 个国家和地区。
1990 年 年收入达到 9.16 亿美元
这一年设立了:
Oracle 比利时公司
Oracle 阿根廷公司
Oracle 哥伦比亚公司
Oracle 哥斯达黎加公司
Oracle 菲律宾公司
1991 年 年收入达到 10.28 亿美元
任命 Jeff Henley 为首席财务官 (CFO)
Oracle中国公司正式在中国注册为“北京甲骨文软件系统有限公司
1992 年 年收入达到 11.79 亿美元
任命 Raymond Lane 为首席运营官 (COO)。
Oracle7 数据库发布。
1993 年 年收入达到 15.03 亿美元
推出 Cross GUI Toolset。
1994 年 年收入达到 20.01 亿美元
Multi-media Server Database 发布。
1995 年 年收入达到 29.67 亿美元
拉里·艾利森发布网络计算机的概念:网络计算机是一种带有本地内存的互联网应用设备,一种不含硬盘驱动器的快速微处理器。
Oracle 公司对外公布了其查询和分析工具套件 — Discoverer/2000,它可帮助最终用户访问和分析自己公司的数据(如公司数据仓库中的数据)。Discoverer/2000 将数据以一种易于理解、非常直观的形式展现出来,全公司的任一最终用户都可利用这些数据,而不受个人技术专长级别的限制。
1996 年 年收入达到 42.23 亿美元
Oracle 组建了一个新的子公司 — 网络计算机公司(Network Computer Inc.)推销网络计算机。发布 Oracle7.3 — Universal Server
1997 年 年收入达到 56.84 亿美元
Oracle 公布了 Oracle Designer/2000 2.1 版本和 Oracle Developer/2000 2.1 版本,它极大地提高了数据库应用程序开发人员的生产力。
Oracle 推出其下一代网络计算的数据库 — Oracle8,这就大大降低了企业的计算成本,推动了一个信息获取低成本、个性化的新时代的到来。
Oracle Applications R10.7 将 Oracle 的应用产品同 Web 紧密联系起来:有了用于 Web 的 Oracle Applications,企业内外的用户使用熟悉的、简单易用的 Web 浏览器界面不但可以进行要害性的事务处理,还可以获取公司信息,并按照所了解的公司信息安排自己的活动。
1998 年 年收入达到 71.44 亿美元
Oracle 推出 Oracle Applications Release 11。客户机/服务器版本被彻底舍弃了。Release 11 是唯一的互联网产品,并且对生产制造与供给链、财务、人力资源和客户关系治理等系列产品作了若干新的改进。
Oracle 还推出了与 Oracle Applications Release 11 配套的商务智能系统 (Business Intelligence System)。商务智能系统是一种易于使用的企业内部网应用产品,可从 Oracle Applications 中找到信息并将信息发送给业务经理和主管人员,帮助他们解决所面临的棘手问题。
1999 年 年收入达到 88.27 亿美元
Oracle 的 Oracle8i 交付使用:这是世界上第一个互联网数据库,同时也是 Oracle 的互联网平台商务革新的核心部分。这个新的数据库为 Oracle 的低成本基础架构上的互联网应用产品带来了巨大的规模效益。
2000 年 年收入达到 101.30 亿美元
Oracle 电子商务套件 (E-Business Suite),这是业界第一款完整的且全面集成的电子商务应用产品套件。Oracle 使用自己的电子商务套件,仅一年时间就节省了 10 亿美元,换言之,营业毛利提高了十个百分点。