Oracle DBA手记3:数据库性能优化与内部原理解析
盖国强 杨廷琨 等编著
ISBN 978-7-121-14479-0
2011年9月出版
定价:49.80 元
16开
300页
宣传语:Oracle逻辑读写深入分析
面向程序员的数据库访问性能优化法则
Oracle的Latch优化深入解析
隐含参数与Library Cache、Shared Pool Latch原理
内 容 简 介
本书由多位数据库技术专家合著而成,融合了各行业DBA 的工作经验与思考,包含了精心挑选的数据库性能优化与内部原理解析案例。内容涵盖“DBA 手记”,以手记形式记录了DBA 们的工作点滴、经验分享;“SQL 与SQL 优化”,分别讲解了SQL 的执行计划,SQL Profile 的使用,以及Oracle 中的NULL 值解析;“内部原理与优化”,分别介绍了Oracle 的索引分裂、TX 锁等待、闩锁原理、逻辑读写、隐含参数与Latch 原理等的内部操作。
本书的主要内容以原理分析、内部实践、故障解决为依据,将Oracle 数据库的深层技术层剖缕析、抽丝剥茧地展示给读者。希望能够帮助读者加深对Oracle 技术的认知和理解,并将这些技术应用到实践中去。
主创寄语
我们为什么学习Oracle?也许是兴趣,也许是想解决工作中的问题,也许是认为DBA 职业更稳定,只要精通Oracle就可以拿到不错的薪水,可以一劳永逸。每个人都有不同的Oracle 情节。我是这样开始的:我们以前的数据库性能很差,由系统工程师管理,大部分系统工程师都喜欢通过调整配置参数优化,因此也想方设法去调整Oracle 的参数,最终收效甚微。也许因为我是程序员出身,我喜欢从代码层面去分析问题,最后通过索引与执行计划解决了问题,从此对Oracle 产生了兴趣,因此开始了漫漫Oracle 学习的长路。我并没有想过自己去当一名职业DBA,所以Oracle 的学习总是断断续续,多半为了解决工作中的问题,直到后来想专注数据库方向时,才开始花更多的精力在数据库上面。因为了解自己很懒惰,所以我喜欢给自己一些压力,于是开始报考国家认证数据库工程师资格认证,系统地学习了数据库基础知识,后来又参加了OCA 和OCP考试。系统地学习Oracle 知识,现在专注于数据库设计与开发研究。一路走来,感触良多,有几点体会与建议:
1.你想做什么,就去学什么,时间总是可以挤出来的;
2.你需要了解自己,给自己设立可行的目标,否则会永远在原地踏步;
3.你能短时间掌握的知识往往也不能长久有用,知识的价值也符合市场经济规律;
4.理论与实践需要交互学习,当感觉理论很枯燥时,就去实践,当感觉实践很无助时,去补充理论,每一次变化都会让你有不同的升华。
——叶正盛
要在Oracle 数据库技术领域不断地进步,需要不断地学习,同时借鉴他人的经验,但是我想更重要的是我们需要独立思考,特别是通过独立思考解决性能问题和其他故障,不但会有成就感,而且在技术上的理解和领悟将会更多。希望本书中的文章和案例,能够起着抛砖引玉的作用,让读者朋友们跟随我们的思路,去思考如何解决这些问题,通过思考,形成自己的知识,使自己取得进步。
——熊 军
在学习Oracle 的过程中我个人最大的体会就是“有兴趣才会有真正的动力”。这些年来,多少次我所有的同事都走了,偌大的大厅只剩下我一个人在学习,我想,如果没有强烈的兴趣,我是走不了这么远的。
——崔 华
在繁华浮躁的时代,凡能静心著文者必有别样之情怀,我对这些著文传道者满怀敬意,也愿读者们能从中获益。
——恩墨科技创始人、Oracle ACE 总监盖国强
前 言
在这样一个春暖花香的季节,我完成了本书的编辑工作,希望这本书到达读者手中时,仍有着这个春天的气息。
本书是《Oracle DBA 手记》系列的第三本,也是我的梦想的延续。源于最初的一个念头,结果就是数载的不停不懈,我常常鼓励自己:坚持一下,再坚持一下。也正因为如此,我才能够一步一步地走到今天,也就有了DBA 手记之三。
这本书中收录了我的一篇文章,其中讲述了在2010 年遇到的一个案例,那是我职业生涯中遇到的最为复杂的一个项目,在诊断过程中,我几乎调动了自己所知的所有知识,并进一步地灵活运用,最终帮助客户解决了纠缠多年的性能问题。记得最初在微博上说,这个案例就足够写一本书了,当时周老师紧跟着说,那就交给我出版吧。时过境迁,周老师已经离开博文视点,去开创自己的出版事业,而我在接二连三的项目中,也失去了最初奋笔疾书的热情,所以就零星写成了这篇短文,将这个案例中学到的一些知识与大家分享出来,只是没有更进一步去细化当时的曲折和细节了。生活和技术都是一样的,想到了就要做,否则就可能由当初的熊熊烈火蜕化成星星之火以致泯灭,我在此充当了一次反面教材。我要感谢在这个项目中一起奋斗的朋友们,在一次次猜测、实验和质疑中,我们最终发现了真相。我很怀念那段时光和殚精竭虑的过程。
我要特别感谢冯春培同学,据我所知,当下要他落笔已经是难上加难,再加上其掌上明珠呱呱坠地,期间的欣喜和忙碌足以让他放弃其他一切琐事,而当我相约其稿时,他汇集和整理了自己多年的心路历程,冠以“人生就是如此”的座右之铭,告诫我们,人生远远不止如此。回想当年共处于同一屋檐之下,而今各已儿女绕膝,白驹过隙,沧海桑田,还真是不过如此。
崔华和熊军兄弟两人,虽然与我相识于江湖,但是我们一见如故,其各怀一身绝艺,于数据恢复领域叱咤南北,联手开拓了一片恢复沃土;老熊的ODU 曾经帮助了大量网友无偿地恢复数据挽救业务;崔华不断的技术探秘,使得Oracle 的种种恢复难题迎刃而解。而他们多年对我的无私支持、勤于分享也为广大技术爱好者带来了福音。今年崔华和熊军双双通过了Oracle ACE 的提名,这实在是实至而名归的又一体现。
姜龙与我结识于上海,其接触Oracle之早,出入网路之先,皆让我赞叹,十数年而磨一剑,其精心总结之案例分享皆为我们提供了借鉴与崭新思路。我常说,将合适的技术应用于合适之处,即为优化。姜龙的几个案例,或借助物化视图,或借助TimesTen,或巧用同义词,皆能于平常处见神奇,大幅度优化了系统性能。他所管理的数据库极多也极重要,这些精心调整优化实际上是“字斟句酌”、履险如夷,我记得他的一个系统甚至到了加一发而弗可之地步,所以这样的优化更需要勇气和细致,而这正是一位卓越DBA 的品质要求。
黄玮似乎是一位独行之侠,居于东南之地,自树一帜,而与外界绝少往来,然每发一文必如春笋发于微,惊雷动于世。其于Oracle 内部原理研究之深入、剖析之透彻无不让人拍案叫绝,然黄玮之淡泊与隐忍视一切喧嚣如无物,他很少出入论坛,也极少发布技术之外的言论和探讨,他只是按照自己的步调时不时放出一些让识货者视为珍宝的文章。感谢他的慷慨付我以妙文,才有了这本书中他精彩的分享。
叶正盛是一位经验和履历都极为丰富的数据库架构师,于阿里的思考更让他时常有美文发布,结识他是因为在CSDN 上的一篇文章,虽然以程序员角度出发,但是其思考之深入,涉及之广泛,配图之精妙,皆让我感叹,其角度虽曰程序员,然对所有数据库管理员和性能爱好者,皆能有如悟恍然之处;在繁华浮躁的时代,凡能静心著文者必有别样之情怀。正盛以新华字典配图,瞬间将我打动,儿时灯下伏笔、按图索骥之情景历历回在眼前,我在微博上私信约稿,正盛校订其稿,完而善之,才有书中之别样光彩。
杨廷琨在《Oracle DBA 手记:数据库诊断案例与性能优化实践》(这是本系列图书的第一本)出版之际还只是我的挚友和伙伴,而现在已经是我们的同事和强劲后备。老杨是ITPUB 上的“百科全书”,其知识范围之广,涉猎之深之远,一时无人能出其右。老杨之高产、勤奋也让人自愧不如,要让他从一年数百篇文章中精而选之,实非易事,但是在我再三请求之下,老杨勉为其难,汇珍珠成项串,总结手记若干,实为本书点题之作。
正因为有这么多朋友和专家的无私奉献,热心分享,才有了DBA 手记之一而再,再而三。虽然本书收录的部分文章在网络上可见,虽然已经到了电子书横行的时代,但是我仍然喜欢纸面阅读,一本可以拿在手里的书给我的阅读愉悦是无可替代的。在《Oracle DBA 手记2》出版的一年多来,我经常在出门时放一本在背包里,其中的很多文章我已经反反复复阅读了很多次,有时候我想,我才是这本书的最大受教者。
我希望读者们也能喜欢并从中受益,感谢你们!
根据本书的内容,我将全书分为四篇。
第一篇 DBA 之路
这一篇包括一章内容,由冯春培撰写。冯春培是业内著名专家,其技术与行业思考一直为业内所关注,本章就是他对多年的职业经历与行业观察的总结,真知灼见跃然纸上。
第二篇 DBA 手记
这一篇包括四章内容,以手记形式记录了DBA 们的工作点滴、经验分享。本篇的四章内容分别由杨廷琨、姜龙、叶正盛、熊军撰写,杨廷琨的手记侧重于诊断分析,姜龙的手记侧重于以不同技术手段优化数据库,叶正盛的文章则是以程序员的角度阐析数据库内容,熊军的文章介绍了Linux 下使用大内存页优化Oracle 数据库的实现和原理。
第三篇 SQL 与SQL 优化
这一篇包括三章内容,分别讲解SQL的执行计划解读、SQL Profile 的使用,以及Oracle 中的NULL 值解析。本篇的三章分别由崔华、熊军、杨廷琨撰写。
第四篇 内部原理与优化
这一篇包括五章内容,分别介绍了Oracle 的索引分裂、TX 锁等待、闩锁原理、逻辑读写、隐含参数与Latch 原理等的内部操作。这一篇章的内容较为深入,分别由黄玮、盖国强、熊军撰写,供喜欢探究内部原理的读者参考。
基于技术分享的目的,我和张乐奕(Kamus)在2010 年创建了Oracle 用户组(ACOUG—http://www.acoug.org),并且每个月在北京开展一次面对面的技术交流活动,这些活动让我们结识了更多志同道合的朋友和优秀的技术作者,感谢Kamus这一年多来的努力付出。
感谢为本书供稿的朋友们,也感谢恩墨科技的仇实、谭龙、盖国相等几位同学,他们在书稿整理、排版等方面对我提供了大量帮助。由于编者能力有限,书中难免存在不足和疏漏之处,敬请读者朋友们指正。
网络以及通过网络来到现实的朋友,永远是我无比珍视的巨大财富。
盖国强(Eygle)2011-04-26 于北京
目 录
Part1 DBA 之路
0 人生就是如此—冯春培感悟之路 003
冯春培(网名 biti_rainy,第0 章创作者) 支付
宝公司数据与风险管理技术部资深总监。在数据库、主
机、存储等领域有丰富经验,主导了主机性能评估模型、
数据库水平拆分、基于数据库日志解析的数据同步、基
于ISCSI 的廉价存储等项目,目前专注于大规模数据的
并行计算和存储、用户行为研究与风险控制领域。2006
年被评为中国十大杰出数据库工程师,同年获阿里集团
唯一专业人才大奖,2008 年被Oracle 公司授予 ACE
Director 称号,2009 年被评选为杭州市“131”优秀中青
年培养人选。
Part2 DBA 手记
1 杨廷琨的DBA 手记 013
TRUNCATE 语句时间过长的诊断
隐式转换影响物化视图查询重写
批量修改数据后应收集统计信息
如何监测一个PL/SQL 过程的运行情况
一次RAC 环境性能诊断过程
数据泵功能灵活运用案例
杨廷琨(网名Yangtingkun,第1、7 章创作者) 恩
墨科技联合创始人,客户支持经理。在国内著名数据库
论坛ITPUB 出任Oracle 数据库管理版版主,2004 年曾
参与编写了《Oracle 数据库性能优化》一书,2007 年被
Oracle 公司授予ACE 称号,2010 和Eygle 共同主编出
版了《Oracle DBA 手记》一书,2010 年被评选为ITPUB
年度最佳版主。喜欢研究Oracle 相关的技术问题,多年
持续在个人BLOG 上发表了2000 多篇Oracle 相关的原
创技术文章。
个人博客:http://yangtingkun.itpub.net
2 姜龙的DBA 工作手记 044
同义词降低逻辑读优化一则
002
11gR2 中物化视图在真实案例中的应用
利用TimesTen 内存数据库大幅提升性能
参考文献
姜龙(第2 章创作者) 热爱Oracle 技术,8i & 10g
OCP。2000 年左右活跃于网易Oracle 社区并时任版主
(id:jl_long),后转战** 数据库管理版版主(id:
stonemoya),虽然间接性迷茫但从未放弃。在国内航空
业数据库领域积累了较丰富的管理经验并制定了一系
列服务规范,目前就职于甲骨文(中国)软件系统有限
公司,任高级咨询顾问。
3 面向程序员的数据库访问性能优化法则 075
数据库访问优化法则简介
Oracle 数据库的两个基本概念
数据库访问优化法则详解
叶正盛(第3 章创作者) 现任职于阿里巴巴DBA
团队,数据库技术专家,专注于数据库应用与开发研究
工作,国家认证系统分析师、高级项目经理、数据库系
统工程师,CSDN 软件工程专家,博客专家,十余年信
息化系统设计开发与研发团队管理工作经验。
个人博客:http://blog.csdn.net/yzsind
4 Linux 大内存页Oracle 数据库优化 097
案例的引入
操作系统中的CPU 使用分析
使用大内存页来解决问题
小结
熊军(网名老熊,第4、6、12 章创作者) Oracle
ACE,ACOUG 成员。从2003 年底接触Oracle 数据库
并对其产生了浓厚的兴趣。现从事Oracle 第三方技术支
持工作,为客户提供专业化的技术服务。擅长Oracle 数
据库故障诊断处理和性能优化,Oracle 恢复软件ODU
的作者。
Part3 SQL 与SQL 优化
5 SQL 执行计划解读与案例分析 109
得到SQL 的真实执行计划
执行计划的执行顺序
10g/11g 里执行计划的一些增强
绑定变量对执行计划的影响
10053 事件分析执行计划一例
看似正常的执行计划导致严重性能问
题的案例
监听连接时间过长案例外一则
崔华(网名dbsnake,第5 章创作者) Oracle ACE,
ACOUG 成员,中航信资深Oracle 数据库工程师,恩墨
科技特邀专家顾问。对Oracle 数据库技术具有狂热的爱
好,深入理解Oracle 的体系结构、内存结构、物理存储
(各种块格式)、锁机制、优化机制等。深入了解Oracle
的备份恢复机制,熟悉Oracle 的各种备份方法,能够
处理各种情况下的数据恢复,包括没有数据备份时的
恢复。
6 使用SQL Profile 改变和稳定SQL 执行计划 137
SQL Profile 与Outline
SQL Profile 是什么
手工创建SQL Profile
使用SQL Profile 稳定SQL 语句的执行
计划
使用SQL Profile 更改SQL 语句的执行
计划
一个使用SQL Profile 的案例
7 Oracle 中的NULL 值解析 157
NULL 的基础概念和由来
NULL 的布尔运算的特点
NULL 的默认数据类型
空字符串‘’与NULL 的关系
NULL 和索引
NULL 的其他方面特点
Part4 内部原理与优化
8 B*Tree 索引中的数据块分裂 175
如何分裂
树的生长
Oracle DBA 手记3——数据库性能优化与内部原理解析 003
存储参数
分裂事务控制
数据块分配
等待事件
附:10g 中如何构建“高”索引
黄玮(第8、9、11 章创作者) 1999 年开始从事
DBA 工作,具有多年的水利、军工、电信及航运行业
大型数据库开发、设计和维护经验。
2005 年创建个人网站HelloDBA.com,并致力于数
据库方面的基础性技术研究。开发了多个数据恢复、性
能监控、内核跟踪等免费、实用的工具,并整理和发布
了大量关于数据库系统的内层机制、存储结构、性能调
优以及基础算法的文章。
目前供职于某世界著名物流公司,负责电子物流系
统的数据库开发、设计和维护工作。
9 事务队列等待(TX Enqueue)深入分析 196
记录锁
ITL 争用
索引争用
唯一性约束
位图索引维护
外键约束
其他争用
10 Oracle 的Latch 优化深入解析 216
Latch 相关的视图
Latch Free(闩锁释放)
Shared Pool Latch 的研究
row cache objects
Latch:row cache objects 案例
也许Bug 曾经来过
Oracle 的spare parameter
cursor: pin S wait on X 事件
为什么硬解析如此昂贵
Oracle 11g 的dc_object_ids
Row Cache 的进一步分析
总结
参考文献
盖国强(网名Eygle,第10 章创作者) 恩墨科
技创始人,Oracle ACE 总监,ITPUB 论坛超级版主,
2006 年度中国十大杰出数据库工程师之一,远程DBA
服务的倡导者和实践者,致力于以技术服务客户。著有
《深入解析Oracle》、《循序渐进Oracle》、《深入浅出
Oracle》等书;从2010 年开始,致力于《Oracle DBA
手记》的撰写与编辑工作,并与张乐奕共同创立了
ACOUG 用户组,在国内推进公益自由的Oracle 技术交
流活动。
个人网站:http://www.eygle.com
11 Oracle 逻辑读写深入分析 257
全表扫描I
全表扫描II
全表扫描III
一致性读
当前模式
排序
索引扫描
12 隐含参数与Library Cache、Shared Pool Latch
原理—— 一次由隐含参数引起性能问题的处理
277
案例之问题现象
问题分析
问题的解决
问题的验证
问题总结
180 Oracle DBA手记3:数据库性能优化与内部原理解析.jpg
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13164110/viewspace-709596/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13164110/viewspace-709596/