Oracle内核技术揭密. 导读

Preface前  言

美国有一句著名的谚语:如果上帝关闭了一扇门,他会为你打开一扇窗。美国还有一个有名的关于Oracle的笑话:上帝和埃里森的区别就是,上帝不认为自己是埃里森。

无论上帝怎么想,埃里森肯定认为自己是上帝,至少,是数据库界的上帝。这位数据库界的上帝所开创的著名的Oracle数据库软件是闭源的,对于想研究Oracle的DBA来说,相当于关上了一扇门。但同时Oracle中提供大量的DUMP命令,这又相当于为DBA打开了一扇窗。但现在,这扇窗正在慢慢关闭。

很早之前,有很多从Oracle公司流向外界的“内部资料”,对这些内部资料的研究甚至成为学习Oracle的一个专门分支:Oracle Internal。当时很多DBA都会在简历中加上一行:“精通Oracle Internal”。当然,笔者也不例外。但是,近五六年来,不知是因为Oracle公司加强控制,还是因为众DBA研究热情下降,或者二者兼而有之,市面上所见的“内部资料”越来越少,特别是近两三年,基本已经绝迹。

从笔者来看,造成这种情况是“二者兼而有之”。“Oracle有意控制”论并非空穴来风,伴随着Oracle数据库应用得越来越广泛,第三方维护市场的发展也是如火如荼。如果有了疑难问题只能找Oracle原厂的售后团队解决,那么第三方维护公司将很难与Oracle竞争,这是控制这块市场的最好方法。实现这一目标的捷径,当然就是控制非原厂DBA对Oracle数据库的了解程度。但是另一方面,Oracle对Oracle技术社区的支持还是有些力度的。所以个人感觉是二者兼而有之,但愿我是“以小人之心,度君子之腹”。无论Oracle是否有意控制,现在Internal爱好者越来越少已是不争的事实,这与Oracle的闭源策略有很大关系。

笔者早年也是“Oracle Internal”研究的爱好者,个人认为,对Internal的研究分为以下3个阶段:

好奇。

学以致用。

麻木。

好奇之心,人皆有之。对IT技术有兴趣的DBA,在接触Oracle不久后,总会对Oracle内部算法产生强烈的好奇心:它是如何计算HASH值的?它是如何搜索HASH 链表的?检查点到底完成了什么操作?如果你有这种好奇心,并且有强烈的探索欲望,恭喜你,你将有望成为高级DBA。跟着你的好奇心去探索吧,在网上查找资料,再加上自己动手做测试,很快你就会对各种Internal有朦胧的了解。当出现一些等待事件、一些性能问题或故障时,你就可以从你所了解的原理出发,去分析问题了。这就是第二阶段—“学以致用”,到这一步,“高级DBA”这个头衔就在向你招手了。

但是很快,你会发现,看不到Oracle的源代码,仅从各种DUMP结果中分析算法,无异于“隔靴搔痒”,有个最恰当的成语描述这种情况:雾里看花。你会发现,我们雾中看出来的“花”,在解决实际问题时,作用极为有限。一些疑难问题,还是无法理清头绪。这样的事情经历多了,就进入了“麻木”阶段。自然也会得出结论,对Internal的研究,现实意义有限,主要是满足好奇心。然后,有可能还会语重心长地告诫初学者,Internal意义不大,浅尝辄止即可,不必浪费太多精力。当这样的情况越来越多后,人们的“研究”欲望自然会越来越低。所以,现在基本上已经很少有人再去研究Internal了。

反观开源领域,虽然源代码的改动并不是“想改你就改”那么简单,因为有各种各样的管理委员会控制,如果不能成为委员,改一个Bug都难,但由于可以看到源代码,只要下工夫钻研代码,想做到“明明白白我的心”并不难。这样一来,在遇到一些奇怪问题时,进行诊断、分析将更有依据。这其实是开源数据库在国内流行的主要原因之一。国内的Committer并不多,就算能读懂源码也不能修改,在这种情况下,开源除了“便宜”、成本低之外,还有什么优势呢?优势就是“用得明白”、“用得清楚”。闭源的Oracle虽然Bug更少、更稳定,但出了奇怪的问题后就很难解决。开源则不一样了。一边是Oracle的“雾里看花”,你看不到隐藏在暗处的原理;一边是开源领域的“明明白白我的心”,众多技术人员当然选择“弃暗投明 ”了。

而且近些年,由于前面说的两点原因,Oracle这场雾更浓了,已经变成“雾霾”了。以前著名的内部资料DSI也止步于Oracle 9i,鲜见Oracle 10g版本的,更别说Oracle 11g的了。外界DBA由于缺乏对原理的了解,很多基本操作都要依赖原厂工程师。比如Exadata,如果没有原厂工程师协助,连安装都很难完成,更别谈运维了。Oracle的大门从来就没有敞开过,现在,连“窗”也在逐渐关闭。

变革正在到来。在“门”、“窗”都没有的大环境下,或许可以选择把墙给凿了。凿穿墙壁,一样能看到Internal。不过,工欲善其事,必先利其器。如果没有适当的工具,想要打开Oracle这样庞然大物般的软件无疑是以卵击石。幸运的是,现在凿墙利器已经有了,那就是“动态性能跟踪”语言,比如,Linux下的System Tap,Solaris下的DTrace,等等。经过笔者试用比较,Solaris下的DTrace更适合用来研究Oracle原理。虽然我们只能在Solaris平台使用,但Oracle的原理在所有OS下是一样的(除了在Windows下略有不同)。在Solaris下研究出的原理,一样可以用于其他平台,可方便大家进行性能调优、故障诊断。笔者书中大多数Oracle内部原理的结论,都是使用DTrace加MDB分析而得出的。

但由于笔者精力有限,而且部分结论还要对Oracle的核心代码反汇编才能得出,这将耗费更多精力,因此难免个别结论分析有误,如果各位读者朋友在阅读时发现有误之处,敬请告知,笔者不胜感谢。笔者的BLOG地址为:www.mythdata.com,有问题大家可以到该博客留言探讨。

DTrace跟踪,再加上调试工具MDB,笔者称为DBA中新的领域:“调试Oracle”。调试技术的引入,加上我们对Oracle的理解,可以让我们把Oracle原理看得更加清晰,可以达到与阅读开源代码同样的效果。这如同吹散“雾霾”的北风,让我们不再“雾里看花”。对原理把握得更加清晰,也使得调优、故障诊断更加精准。“Change”,是这两年最流行的词汇。“我们一直身处变革之中而不自知”。变革正在悄然进入DBA领域,传统的Oracle运维日渐式微,这已然是不争事实。众多处于“麻木”阶段的DBA纷纷转行。“调试Oracle”领域的出现,将是一条新的发展之路。希望本书能给大家提供一种新的思路。

 

第1章 存储结构 1

1.1 区:表空间中的基本单位 1

1.1.1 统一区大小表空间和区的使用规则 2

1.1.2 系统管理区大小 4

1.1.3 碎片:少到可以忽略的问题 7

1.2 段中块的使用 7

1.2.1 块中空间的使用 8

1.2.2 典型问题:堆表是有序的吗 9

1.2.3 ASSM与L3、L2、L1块的意义 10

1.2.4 值得注意的案例:ASSM真的能提高插入并发量吗 12

1.2.5 段头与Extent Map 21

1.2.6 索引范围扫描的操作流程 24

第2章 调优排故方法论 27

2.1 调优排故的一般步骤 28

2.1.1 常见DUMP和Trace文件介绍 28

2.1.2 等待事件 29

2.1.3 各种资料视图介绍 37

2.1.4 等待事件的注意事项 42

2.2 AWR概览 44

2.2.1 AWR报告的注意事项 44

2.2.2 AWR类视图 46

时间: 2024-10-29 10:07:21

Oracle内核技术揭密. 导读的相关文章

Oracle内核技术揭密

数据库技术丛书 Oracle内核技术揭密 吕海波 著 图书在版编目(CIP)数据 Oracle内核技术揭密/吕海波著. -北京:机械工业出版社,2014.7 (数据库技术丛书) ISBN 978-7-111-46931-5 I.O- II.吕- III. 关系数据库系统 IV. TP311.138 中国版本图书馆CIP数据核字(2014)第115943号 本书是首本国内作者深入剖析Oracle原理的技术书籍.虽以内部原理为主线,但又不乏很多实际的应用案例,希望读者可以将学到的原理与实际应用相结合

Oracle内核技术揭密. 1.1 区:表空间中的基本单位

1.1 区:表空间中的基本单位 区,Extent,逻辑上连续的空间.它是表空间中空间分配的基本单位.如果在某表空间中创建一个表,哪怕只插入一行,这个表至少也会占一个区. 具体来讲,在Oracle 10g中,如果创建一个新表,初始至少为这个表分配一个区.而在Oracle 11.2.0.3以上版本中,创建新表时默认一个区都不会分配,也就是说,这个表此时不占存储空间.只有在向表中插入第一行数据时,才会默认为表分配第一个区. 无论是Oracle 10g还是Oracle 11GR2,如果表原有区中的空间用

Oracle内核技术揭密. 1.2 段中块的使用

1.2 段中块的使用 在讲解本节主题前,我们先来理清一个概念,什么是段.在Oracle中,表和段是两个截然不同的概念.表从逻辑上说明表的形式,比如表有几列,每列的类型.长度,这些信息都属于表.而段只代表存储空间,比如,上节中提到的区,就是属于段.一个段中至少要包含一个区. Oracle中,每个对象都有一个ID值,表有表的ID,段有段的ID.在DBA_OBJECTS数据字典视图中,object_id列是表ID,data_object_id列是段ID,下面查看了某个表的表ID和段ID: SQL> c

Oracle Flashback 技术大解密

Oracle Flashback 技术大解密                                                                                                          作者:吴伟龙   Flashback 技术是以Undo segment中的内容为基础的,因此受限于UNDO_RETENTON参数.要使用flashback的特性,必须启用自动撤销管理表空间.   在Oracle 10g中, Flash back

Linux 下 Oracle 内核参数优化

    数据库的性能优化涉及到整个数据库运行环境的方方面面,诸如操作系统,Oracle自身,存储,网络等等几个大块.而操作系统则是Oracle稳定运行与最大化性能的基石.本文主要描述基于Linux系统下 Oracle 内核参数的配置.     校验下面的列表中显示的内核参数的值被设置为大于或等于下面所显示的最小值.     如果你的系统中下面的任意参数的当前值已经大于或高于下面列出的值,请不要做任何修改.   下面的步骤给出了如何去校验并设置这些参数的值.     通过执行下面的命令进行校验  

Oracle数据库技术(38)_oracle

正在看的ORACLE教程是:Oracle数据库技术(38). 作者:未知 更新人:Finishing 来源:不详 更新时间:2004.07.06 投稿信箱: jc@ddvip.net   <

Oracle分区技术-- interval parition实验及总结

Oracle分区技术-- interval parition实验及总结 分区写法: 几大点: 1.分区表 2.分区的区exp和imp 3.自动给分区表添加索引 自动分配表空间 http://space.itpub.net/17203031/viewspace-706173 alter table table_name drop partition partition_name; interval分区 实验环境: SQL> create tablespace part datafile '/u01

【OUTLINE】使用Oracle Outline技术暂时锁定SQL的执行计划

  Oracle的Outline技术可以在特殊情况下保证执行计划的稳定性.在极端情况下可以使用此项技术实现暂时锁定执行计划的目的.  主要使用场景如下:  ①短时间内无法完成SQL的优化任务,此时可以使用outline暂时锁定SQL执行计划:  ②在CBO优化模式下,当统计信息出现问题时,会导致执行计划出现异常变化,此时可以使用outline暂时调整SQL执行计划:  ③由于数据库的bug导致SQL的执行计划出现异常,使用outline锁定执行计划.   记录一下关于outline的使用方法,供

区块链技术指南导读

前言 为什么要写这本书 1900年9月8日,一场4级强度的飓风横扫德克萨斯州的加尔维斯顿.这个位于墨西哥湾的岛城,靠近德克萨斯海岸,在灾难来临前拥有37?000人口和光明的经济前景.飓风猛烈攻击了这个毫无防备的低海拔城市,给该市带来了巨大的毁坏.飓风风速为每小时225千米,毁掉了3600座建筑,使占整个城市3/4的12个街区彻底消失,死亡人数为8000-10?000人.是迄今为止,美国历史上死亡人数最多的自然灾害. 而2016年8月2日在中国华南沿海登录的"妮妲"台风,风力14级,最高