首页>参考读物>计算机科学与技术>数据库

Oracle内核技术揭密
作者 : 吕海波 著
丛书名 : 数据库技术丛书
出版日期 : 2014-09-23
ISBN : 978-7-111-46931-5
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 366
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

Oracle是目前使用最为广泛的数据库,在金融、证券等等领域扮演重要角色。虽然Oracle是款闭源软件,但它的各种算法经过了千锤百炼,非常值得开源软件学习。本书主要针对Oracle重要的内部原理进行详细的剖析,涉及存储结构、Buffer Cache与I/O、共享池、UNDO、ASM等,此外还介绍了调优排故的方法论以及实践案例,可以为DBA在分析奇怪的性能问题和故障时,提供更为广阔的思路。书中极力避免和网络中已有资料的内容重复,力求为大家分析、挖掘不为人知的Oracle原理或算法,以方便有志之士,将Oracle的优秀理念,移植到其他开原数据库中。

图书特色

Oracle数据库领域传奇人物、前阿里B2B最高级别Oracle DBA吕海波(VAGE)10余年职业生涯的集大成之作
深入分析和挖掘Oracle数据库内核中的精髓与秘密,揭示了大量鲜为人知的原理和算法,并详细阐释了如何建立一套自己的调优排故模型

海波是Oracle DBA领域出道较晚而又能脱颖而出的异类,他在几乎被钻研通透的Oracle数据库技术领域独辟蹊径,找到了一条属于他自己的兴趣盎然之路。深入内核分析数据库的精髓,既需技艺,又需耐心,如无兴趣与毅力则必无数年如一日的决心,海波做到了他人极难做到的坚持,这非常值得钦佩。书中来自实证实验的剖析,将Oracle数据库的原理精烹而细饪,识者请自取之。
—— 盖国强 云和恩墨创始人,Oracle ACE总监

海波,我数据库学习道路上的领路人之一。遥想当年,拿着海波精心准备的各种介绍Oracle功能实现、隐含参数、内核剖析的小册子,边阅读边做实验,受益匪浅。现如今,小册子变成了这本大部头,内容更是增加了作者在最近几年对Oracle新的研究体会,相信读者能从此书中,汲取更多的营养。
—— 何登成 网易杭州研究院 技术专家

吕海波,网名VAGE。曾混迹于杭州多年,圈内同行称之为“瓦鸡”。他是我多年好友,也是我OCM导师,其Oracle水平,一直是我最佩服的三人之一。他待Oracle始终如初恋,安全地度过了七年之痒。VAGE与Oracle长时间的耳鬓厮磨,让Oracle在其面前再无秘密可言。故VAGE在不同场合炫耀其独享大众“情人”之后的回味,着实令我等羡慕不已。在闲暇之余,我经常以各种借口向其讨教“调教”之法,然始终未得其真传,只可远观而不可亵玩。今日,VAGE耗时2年,终于将其“调教大法”公布于众,对广大DBA来说,幸矣!
—— 周亮 Oracle ACE、《Oracle DBA实战攻略》作者、美创科技技术部经理


Oracle数据库虽然在国内有广泛的应用,但很多深入的原理、算法都是国外的DBA在研究挖掘,因此在国内Oracle DBA界曾有说法,想学好Oracle,必先学好英语。本书是首本国内作者深入分析Oracle原理的书籍,填补了国内在这一领域的空白,可以使广大Oracle技术爱好者,以原汁原味的母语了解到许多Oracle不为人知的原理和算法。

作者简介
网名VAGE,现任eBay Principle DBA,曾任阿里巴巴高级数据库专家,京东T5级技术专家,ITPUB管理版版主。醉心技术,坚持百尺竿头、更进一步,开创“调试Oracle”领域,精通DTrace、gdb/mdb调试Oracle,是国内唯一有能力阅读Oracle反汇编代码的DBA。凭一己之力,突破了Oracle技术封锁,在网络中分享了多篇深入解析Oracle的技术文章,被誉为Oracle传奇技术大师。学历不高,中专文凭,持有会计员证书和珠算能手六级证书。18年来一直在技术道路上不懈追求。曾经是电机厂工人,电脑城装机小弟,饭店帮厨,糕点店学徒,精品店老板,计算机培训学校合伙人、校长,2004起任DBA至今。一路坎坷,今著此书,欲与大家共享众多Oracle优秀理念与算法。
内容简介

本书是首本国内作者深入剖析Oracle原理的技术书籍。虽以内部原理为主线,但又不乏实际的应用案例,希望读者可以将学到的原理与实际应用相结合,提高对Oracle的运维能力。本书第1章主要讲述Oracle的空间存储管理的内部原理,以及应用其原理进行调优、排故的案例。第2章是调优、排故的方法论。第3章深入且全面地剖析了Buffer Cache内存池的原理,在该章中,你不但可以了解到检查点、LRU等Oracle最重要的概念,还可以学习到如何设计测试用例,去验证这些原理。当然,最重要的是这些知识对我们实际工作的影响。任何原理的学习,都要以最终能够应用到调优、排故为目的,这是本书始终如一的方针,也是作者研究Oracle的一贯思想。第4章为大家解析Shared Pool的原理和调优、排故。第5章为大家展现Redo相关的原理、调优和排故。在第3~5章中,有大量本书唯一的Oracle原理资料,这些原理是作者使用“调试Oracle”技术分析得出的,网络中搜索不到任何相关信息。作者也从未将相关信息发布到网上,这保证了本书的价值。第6章为大家介绍了UNDO相关知识。第7章介绍了Oracle ASM文件原理,以及AU大小、条带大小、条带宽度等在ASM下的意义。通过对这些信息的学习,你还能了解到条带在存储中的原理与影响。最后附录章节是对HASH算法的一个简述。由于原理性知识居多,因此本书的学习过程并不轻松,但相信通过系统地学习本书,对提高Oracle运维能力会有极大的帮助。对于非DBA技术人员,通过阅读本书,也可以了解到最优秀的数据库Oracle的原理,这对于研究MySQL、PostgreSQL也会有很大的帮助。

图书前言

美国有一句著名的谚语:如果上帝关闭了一扇门,他会为你打开一扇窗。美国还有一个有名的关于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”领域的出现,将是一条新的发展之路。希望本书能给大家提供一种新的思路。

上架指导

计算机\数据库

封底文字

赞誉
海波是Oracle DBA领域出道较晚而又能脱颖而出的异类,他在几乎被钻研通透的Oracle数据库技术领域独辟蹊径,找到了一条属于他自己的兴趣盎然之路。深入内核分析数据库的精髓,即需技艺,又需耐心,如无兴趣与毅力则必无数年如一日的决心,海波做到了他人极难做到的坚持,这非常值得钦佩。书中来自实证实验的剖析,将Oracle数据库的原理精烹而细饪,识者请自取之。
——盖国强 云和恩墨创始人,Oracle ACE总监。

海波,我数据库学习道路上的领路人之一。遥想当年,拿着海波精心准备的各种介绍Oracle功能实现、隐含参数、内核剖析的小册子,边阅读边做实验,受益匪浅。现如今,小册子变成了这本大部头,内容更是增加了作者在最近几年对Oracle新的研究体会,相信读者能从此书中,汲取更多的营养。
——何登成 网易杭州研究院 技术专家

吕海波,网名vage。曾混迹于杭州多年,圈内同行称之为“瓦鸡”。他是我多年好友,也是我OCM导师,其Oracle水平,一直是我最佩服的三人之一。他待Oracle始终如初恋,安全地度过了七年之痒。vage与Oracle长时间的耳鬓厮磨,让Oracle在其面前再无秘密可言。故vage在不同场合炫耀其独享大众“情人”之后的回味,着实令我等羡慕不已。在闲暇之余,我经常以各种借口向其讨教“调教”之法,然始终未得其真传,只可远观而不可亵玩。今日,vage耗时2年,终于将其“调教大法”公布于众,让我等屌丝也能有机会近距离接近女神,幸已!
——周亮 Oracle ACE、《Oracle DBA实战攻略》作者、美创科技技术部经理

作者简介

吕海波 著:暂无简介

图书目录

前 言
第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
第3章 Buffer Cache内部原理与I/O 51
3.1 HASH链表 51
3.1.1 HASH链表与逻辑读 52
3.1.2 Cache Buffers Chain Latch与Buffer Pin锁 54
3.1.3 Cache Buffers Chain Latch的竞争 61
3.2 检查点队列链表 77
3.2.1 检查点队列 77
3.2.2 检查点队列与实例恢复 82
3.2.3 DBWR如何写脏块 89
3.2.4 如何提高DBWR的写效率 97
3.3 LRU队列 100
3.3.1 主LRU、辅助LRU链表 100
3.3.2 脏链表LRUW 115
3.3.3 Free Buffer Waits 132
3.3.4 谁“扣动”了DBWR的“扳机” 134
3.3.5 日志切换与写脏块 141
3.4 I/O总结 146
3.4.1 逻辑读资料分析 146
3.4.2 减少逻辑读—行的读取 148
3.4.3 物理I/O 161
3.4.4 存储物理I/O能力评估 162
第4章 共享池揭密 166
4.1 共享池内存结构 167
4.1.1 堆、区、Chunk与子堆 167
4.1.2 Chunk类型(x$ksmsp视图) 170
4.1.3 freeabl、recr与LRU链表 171
4.1.4 Free List链表 173
4.1.5 保留池 177
4.1.6 SQL的内存结构:父游标、子游标 178
4.1.7 SQL的内存结构:父游标句柄 181
4.1.8 SQL的Chunk:父游标堆0和DS 183
4.1.9 SQL的Chunk:子游标句柄 186
4.1.10 SQL的Chunk:子游标堆0与堆6 187
4.1.11 SQL所占共享池内存 189
4.1.12 LRU链表:我的共享池大了还是小了 191
4.1.13 ORA-4031的吊诡:错误的报错信息 195
4.1.14 解决ORA-4031之道:如何正确释放内存 201
4.1.15 Session Cached Cursor与内存占用 205
4.2 语句解析和执行 209
4.2.1 SQL执行流程 209
4.2.2 内存锁原理 211
4.2.3 Library Cache Lock/Pin 218
4.2.4 Library Cache Lock/Pin与硬解析 219
4.2.5 Library Cache Lock/Pin与软解析、软软解析 226
4.2.6 NULL模式Library Cache Lock与依赖链 229
4.2.7 存储过程与Library Cache Lock/Pin 229
4.2.8 断开依赖链 235
4.2.9 低级内存锁:Latch 237
4.2.10 Shared Pool Latch 239
4.3 Mutex 242
4.3.1 Mutex基本形式 242
4.3.2 Mutex获取过程:原子指令测试并交换 245
4.3.3 Mutex获取过程:竞争与Gets资料的更新 249
4.3.4 Mutex获取过程:共享Mutex与独占Mutex 250
4.3.5 独占Mutex的获取和释放过程 252
4.3.6 Mutex获取过程:Sleeps与CPU 254
4.4 Mutex与解析 261
4.4.1 Mutex类型 262
4.4.2 HASH Bucket与HASH链 262
4.4.3 Handle(句柄)与Library Cache Lock 262
4.4.4 HASH Table型Mutex 263
4.4.5 执行计划与Cursor Pin 264
4.5 通过Mutex判断解析问题 265
4.5.1  硬解析时的竞争 265
4.5.2 软解析和软软解析 266
4.5.3 解决解析阶段的竞争 267
4.5.4 过度软软解析竞争的解决 268
4.5.5 Select与执行 271
第5章 Redo调优与备份恢复原理 277
5.1 非IMU与IMU Redo格式的不同 277
5.2 解析Redo数据流 282
5.3 IMU与非IMU相关的Redo Latch 287
5.4 Redo Allocation Latch 288
5.5 Log Buffer空间的使用 290
5.6 LGWR与Log File Sync和Log File Parallel Write 297
5.7 IMU什么情况下被使用 300
第6章 UNDO 302
6.1 事务基本信息 302
6.2 回滚段空间重用规则 307
6.2.1 UNDO块的SEQ值 308
6.2.2 UNDO段的Extend 310
6.2.3 Steal Undo Extent:诡异的UNDO空间不足问题 311
6.2.4 回滚空间重用机制:UNDO块重用规则 313
第7章 ASM 317
7.1 ASM文件格式 317
7.1.1 ASM文件 317
7.1.2 使用kfed挖掘ASM文件格式 319
7.2 AU与条带 328
7.2.1 粗粒度不可调条带 329
7.2.2 细粒度可调条带 329
7.2.3 AU与条带的作用 331
7.2.4 DG中盘数量对性能的影响 332
7.2.5 最大I/O与最小I/O 333
7.2.6 数据分布对性能的影响 334
7.2.7 案例精选:奇怪的IO问题 335
7.2.8 大AU和小AU性能对比 340
7.2.9  AU与条带总结 341
7.2.10 OLTP与大条带 342
附录 HASH算法简单介绍 344

教学资源推荐
作者: 徐洁磐 操凤萍 编著
作者: (加)Jiawei Han, Micheline Kamber
作者: (美) Pang-Ning Tan , Michael Steinbach , Vipin Kumar  著
参考读物推荐
作者: William G.Page.Jr
作者: Steve Bobrowski
作者: (美)Ben Forta 著