Oracle DBA手记3:数据库性能优化与内部原理解析

13164110_201110241537271.jpg

Oracle DBA手记3:数据库性能优化与内部原理解析 

盖国强 杨廷琨 等编著

ISBN 978-7-121-14479-0  

20119月出版

定价:49.80

16

300

宣传语:Oracle逻辑读写深入分析

        面向程序员的数据库访问性能优化法则

        OracleLatch优化深入解析

        隐含参数与Library CacheShared 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这一年多来的努力付出。

感谢为本书供稿的朋友们,也感谢恩墨科技的仇实、谭龙、盖国相等几位同学,他们在书稿整理、排版等方面对我提供了大量帮助。由于编者能力有限,书中难免存在不足和疏漏之处,敬请读者朋友们指正。

网络以及通过网络来到现实的朋友,永远是我无比珍视的巨大财富。

盖国强(Eygle2011-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,第17 章创作者)

墨科技联合创始人,客户支持经理。在国内著名数据库

论坛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

OCP2000 年左右活跃于网易Oracle 社区并时任版主

idjl_long),后转战** 数据库管理版版主(id

stonemoya),虽然间接性迷茫但从未放弃。在国内航空

业数据库领域积累了较丰富的管理经验并制定了一系

列服务规范,目前就职于甲骨文(中国)软件系统有限

公司,任高级咨询顾问。

个人网站:http://www.stonemoya.com

3 面向程序员的数据库访问性能优化法则 075

数据库访问优化法则简介

Oracle 数据库的两个基本概念

数据库访问优化法则详解

叶正盛(第3 章创作者) 现任职于阿里巴巴DBA

团队,数据库技术专家,专注于数据库应用与开发研究

工作,国家认证系统分析师、高级项目经理、数据库系

统工程师,CSDN 软件工程专家,博客专家,十余年信

息化系统设计开发与研发团队管理工作经验。

个人博客:http://blog.csdn.net/yzsind

4 Linux 大内存页Oracle 数据库优化 097

案例的引入

操作系统中的CPU 使用分析

使用大内存页来解决问题

小结

熊军(网名老熊,第4612 章创作者) Oracle

ACEACOUG 成员。从2003 年底接触Oracle 数据库

并对其产生了浓厚的兴趣。现从事Oracle 第三方技术支

持工作,为客户提供专业化的技术服务。擅长Oracle

据库故障诊断处理和性能优化,Oracle 恢复软件ODU

的作者。

个人网站:http://www.laoxiong.net

Part3 SQL SQL 优化

5 SQL 执行计划解读与案例分析 109

得到SQL 的真实执行计划

执行计划的执行顺序

10g/11g 里执行计划的一些增强

绑定变量对执行计划的影响

10053 事件分析执行计划一例

看似正常的执行计划导致严重性能问

题的案例

监听连接时间过长案例外一则

崔华(网名dbsnake,第5 章创作者) Oracle ACE,

ACOUG 成员,中航信资深Oracle 数据库工程师,恩墨

科技特邀专家顾问。对Oracle 数据库技术具有狂热的爱

好,深入理解Oracle 的体系结构、内存结构、物理存储

(各种块格式)、锁机制、优化机制等。深入了解Oracle

的备份恢复机制,熟悉Oracle 的各种备份方法,能够

处理各种情况下的数据恢复,包括没有数据备份时的

恢复。

个人网站:http://www.dbsnake.com

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 中如何构建索引

黄玮(第8911 章创作者) 1999 年开始从事

DBA 工作,具有多年的水利、军工、电信及航运行业

大型数据库开发、设计和维护经验。

2005 年创建个人网站HelloDBA.com,并致力于数

据库方面的基础性技术研究。开发了多个数据恢复、性

能监控、内核跟踪等免费、实用的工具,并整理和发布

了大量关于数据库系统的内层机制、存储结构、性能调

优以及基础算法的文章。

目前供职于某世界著名物流公司,负责电子物流系

统的数据库开发、设计和维护工作。

个人网站:http://www.HelloDBA.com

9 事务队列等待(TX Enqueue)深入分析 196

记录锁

ITL 争用

索引争用

唯一性约束

位图索引维护

外键约束

其他争用

10 Oracle Latch 优化深入解析 216

Latch 相关的视图

Latch Free(闩锁释放)

Shared Pool Latch 的研究

row cache objects

Latchrow 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 CacheShared Pool Latch

原理—— 一次由隐含参数引起性能问题的处理

277

案例之问题现象

问题分析

问题的解决

问题的验证

问题总结

fj.png180 Oracle DBA手记3:数据库性能优化与内部原理解析.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13164110/viewspace-709596/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13164110/viewspace-709596/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值