DB2设计与性能优化:原理、方法与实践
王飞鹏 陈辉 张广舟 成孜论 编著
ISBN 978-7-121-13094-6
2011年4月出版
定价:89.00元(含光盘1张)
16开
416 页
购买链接:http://product.china-pub.com/198011
王飞鹏 陈辉 张广舟 成孜论 编著
ISBN 978-7-121-13094-6
2011年4月出版
定价:89.00元(含光盘1张)
16开
416 页
购买链接:http://product.china-pub.com/198011
宣传语
舞动DB2系列
本书是国内第一本IBM原厂设计与性能优化专著!
首次提出PAT性能优化方法学,诠释了DB2最新设计技术。
电信金融等行业经典实战案例。
IBM信息管理开发部总经理吉燕勇推荐序
IBM DB2开发部资深经理干毅民推荐序
IBM信息管理首席架构师陈奇博士任技术顾问
内 容 简 介
本书原汁原味地展示了DB2设计和优化技术,深入剖析了DB2的工作原理。全书分为4部分,共11章。
第一部分解析数据库性能的本质问题。第二部分从设计高性能数据库的角度,详细介绍如何使用DB2数据库设计高质量的应用系统,内容包括DB2数据库逻辑设计、DB2数据库物理设计、DB2 pureXML数据库设计及DB2工作负载设计。第三部分介绍如何优化DB2数据库,内容包括性能监控及参数调整、SQL语句优化策略、锁和日志优化等。第四部分阐述DB2高级性能加速技术,主要包括DB2 pureScale集群和solidDB高速缓存加速。
附录部分列出了常用监控命令用法和缩略语释义,还特别提供了PAT树的放大图,供读者进行数据库性能优化时使用。
本书适合DB2数据库设计人员、DBA、数据库性能分析人员、数据库开发人员、运维人员及应用开发工程师阅读和参考,也可用做高校相关专业或培训班的教材。
推荐序一
两千多年前的战国时代,信息记录在竹简上。从此信息文明更新换代。而最近30年发生的信息爆炸,使世界发展步伐加快,社会变化日新月异。在刚过去的经济危机中,IBM逆势取得了骄人成绩,继续保持了优势地位,并紧紧把握了中国信息发展的时代脉搏。而信息管理(IM),作为IBM最重要的软件品牌之一,已成为IBM近年来投入最大的领域。在过去5年间,IBM在这一领域仅在收购最新技术上的花费金额就超过120亿美元。
2010年10月在拉斯维加斯举行的“2010 IBM IOD全球大会”上,信息随需应变(IOD)的创新理念及丰富的“智慧”产品吸引了超过9000名来自世界各地、各行各业的代表参加。与往年相比,这次峰会众多来自中国的面孔增加了很多。在随后举行的客户座谈和用户研讨会上,我们更希望听到来自中国客户的声音。可喜的是,IBM在中国的热情投入换来了中国客户的倾情赞誉和坚定支持;可忧的是,中国信息管理的声音不如期待中的那样响亮,这与中国近年来飞速发展的信息技术产业和市场规模是极不相称的。究其原因,中国的信息管理领域起步晚、经验还需积累是一方面,但最重要的因素就是中国本土缺乏优秀的技术人才储备,这导致在这一领域的高端人才十分匮乏,这必会成为中国信息产业走向辉煌的巨大障碍。
IBM中国开发中心经过十年的积累和沉淀,已经培养建立起了一支具有精湛技术、熟悉中国市场和融合全球信息技术的优秀团队。这支团队通过坚持不懈、热情执着的努力,已成功伴随中国的客户应对信息社会的巨大挑战,并获得了飞跃式的发展。我们有能力,也深感有必要把先进的信息管理技术和理念进一步传播给中国广大的技术人员。这本由DB2资深工程师撰写的书,是信息管理领域的一朵奇葩,专注于数据库设计与性能优化方面,内容非常全面,定位非常准确,方法非常实用,相信她能帮助中国的高端信息管理技术人才更上一层楼。
IBM中国开发中心 信息管理产品开发部
总经理 吉燕勇
2010年11月25日
推荐序二
自从埃德加•考特(Edgar F. Codd)在1970年发明关系数据库以来,IBM在数据库技术的研究和开发方面一直处于世界领先地位。DB2数据库是IBM公司数据管理产品线上最知名也是最成功的产品,除了可以运行于大型主机环境外,也适用于多种开放式平台。近年来,IBM加大了DB2研发在中国开发中心的投资,目前已培养了一大批参与DB2产品核心开发、客户技术支持和服务的优秀工程师。
DB2数据库在中国取得了非常广泛的应用,在金融、电信、政府、制造和零售等行业都有很多成功的客户。然而我们发现的一个问题是:在国内的广大用户中,对DB2精通的人还比较少,影响了DB2产品的使用。DB2生态系统的繁荣依赖于用户、合作伙伴和IBM的共同努力,如果没有广大DB2用户技术水平的提升,DB2生态系统的繁荣就很难实现。因此我们的一个重要任务就是要通过各种方式和途径来推广DB2产品技术。
随着企业信息应用系统越来越复杂,用户量和数据量正变得日益巨大,这对设计人员设计高质量的数据库及DBA优化数据库提出了严峻的挑战。本书就是为了解决这个问题而诞生的。在这本书中,不仅包括了DB2经典设计和优化方法,还涵盖了DB2最新设计和优化技术,例如表分区、工作负载设计、pureXML设计、pureScale集群、solidDB高速缓存等。特别是为了帮助读者掌握性能优化技术,还提出了一套基于PAT树的性能优化方法系统。
本书由来自DB2的资深工程师编写,原汁原味地展示了DB2设计和优化技术,深入剖析了DB2内部工作原理。在为全国各地的IBM合作伙伴培训DB2数据库期间,作者更深入地了解到DB2用户在学习中遇到的困难。另外,作者具有为政府、电信、金融等行业客户做数据库迁移方面的咨询和实施经验,充分了解生产环境中客户遇到的实际问题。
上面的一切使得本书能想读者之所想,写读者之所需。
IBM中国开发中心DB2开发
资深经理 干毅民
2010年12月6日
推荐序三
心有多大,舞台就有多大。当我看到这本书的初稿时,立刻被书名所吸引。“舞动DB2”几个字,尽管还未经过美工处理,我已经意识到作者心怀天下,志存高远。而当我接连读完第1章和第2章,我又发现作者不但目标长远,下的功夫也极深。第1章总述数据库设计与性能优化,高屋建瓴般地提出了颠覆性的PAT方法学。第2章相对于传统性能分析方法,以电信行业的经营分析系统为例,全面展现了性能问题分析定位体系,其高度的实用性着实令人叹服。而案例分析部分环环紧扣,步步精彩。贯穿整本书的线索使我迫不及待地追逐一个又一个的疑问,一直读过数百页。我不得不惊叹,这本书本身就是一个完整的理论体系,扩能长龙飞舞,缩能稳如泰山。
我也不得不说起当今的一些数据库图书,更像在写教材,寻章摘句,呆板无趣。普遍浮躁的学术氛围造就了一批苍白无力的技术书籍,这样的平庸之作导致读者从一开始就迷惑,进而迷失,读到最后是一片迷茫。
在本书中,我们始终能读出作者清晰的思路,作者在这方面确实投入了巨大的精力。春节刚过,王飞鹏在为书制定目录时,严谨的学术风格就展现了出来——他邀请了多位技术专家进行评审,为其严格把关,为读者负责。从选题结构上就高人一筹,完全切中了当今DB2应用过程中设计与性能优化问题的要害。之后,他组织陈辉、张广舟、成孜论各显身手,充分展现团队威力。事实证明,他们把各自多年的积累与优势淋漓尽致地发挥出来,为读者带来一场数据库设计与性能优化的盛宴。在他们完成初稿后,我与其他两位数据库资深顾问逐字斟酌了内容,提出了建议。他们非常谦虚地接受了建议,仔细修改。当第二稿、第三稿、第四稿陆续发给我们时,我们所有人都为他们坚持不懈的努力和出众的才华赞叹不已。
几位作者经过数月的奋斗,终于完成了这部巨著,这个过程真正的辛苦只有他们自己最清楚,但我相信他们的意志力一定经受住了极大的考验。这本真材实料的技术专著,也一定会为广大读者带去最真切的帮助,并创造出新的奇迹。
IBM信息管理产品首席架构师
美国加州大学
陈奇 博士
2010年11月30日
推荐序四 用之道
许多DBA对一则定律都深有感触:
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
这句话被称作“墨菲定律”,是由毕业于西点军校的空气动力专家Edward A. Murphy发现的。无独有偶,早在五百年前,冯梦龙就写道:屋漏偏逢连夜雨,船迟又遇打头风。两位学者身处年代不同,所受文化熏陶迥异,却对事件所反映出来的结果有着相同的描述:在某个时刻,问题会集中爆发,原本丰富的资源在那个时刻突然枯竭,原本充沛的体力在那个时刻立刻透支。在数据库领域,有人把这句话解释为:如果存在隐患,哪怕只是一点点,它一定会在某个时刻爆发,并且后果严重。责骂、混乱、恐慌、歇斯底里,在那个时刻会统统地冒出来。这对于DBA来讲,绝对是个恶梦。太多的教训应验了无论是什么数据库,一旦“墨菲定律”发作,会让DBA们痛彻心扉。
我想起郎咸平先生这几年一直非常火爆的一本书《我们的日子为什么这么难》。书的视角开阔而又着眼于民生,社会生活的方方面面都涵盖于其中。尽管郎先生的观点众说纷纭,但确实说出了老百姓的无奈和难处。而DBA的无奈和难处,又由谁来代表大家倾诉?又由谁来帮助大家解决?我看完本书后找到了答案,而这要从作者说起。
IBM是一家令人尊敬的公司。在西方世界,IBM是“阿波罗登月计划”的英雄,被Bill Gates称为世界上最大的对手;在东方国度,IBM“蓝色巨人”是前沿科技的代名词。本书的作者均来自IBM中国研发中心,他们有着年轻人特有的激情和活力,在自己的工作岗位中表现出众,王飞鹏就是其中一位。
飞鹏生长于三晋大地,毕业后,他进入IBM成为一名研发工程师,大家都称呼他William。2008年端午节,我与William在成都不期而遇,那时正值震后救援与震后重建的交替期,特殊时期的救灾经历让我们的友谊迅速升温。再见已是一年以后的西湖边上了,那天William作诗一首,时过境迁,我仍不时念诵:
西子水光竟涟漪, 南屏山色叠峦峰。
栖霞烟霞入云霄, 苏堤白堤成双龙。
意气勃发思将飞, 壮怀九天欲乘风。
雷锋塔前青衫湿, 愿为此地田舍翁。
今年我们见面的次数少了,William整日飞来飞去,忙于各种数据库项目的咨询、实施和讲座。有一次我们碰巧都在杭州,我去听了一次他给浙江电信做的数据库性能优化培训。来的人很多,位子不够,最后面也站了一排人(后来才知道,一些数据库爱好者也慕名而来)。整个培训期间,William文采飞扬,激情澎湃,与他私下里稍偏内向的性格截然不同。他的演讲诙谐轻松,简练易懂,时而高屋建瓴犹水瀑,时而烟枝细雨落风樯。我想William对数据库技术的精湛理解和讲授,跟他丰富的经历是分不开的。William曾为中央级政府机关、电信企业、金融机构、高铁系统等制定数据库优化方案,指导项目实施以及解决性能问题。这些高强度的工作使他本人的组织能力、协调能力和项目控制能力达到了新的高度。此外,他对事物不同寻常的分析和领悟能力,还有坚毅执着的信念,在他所获得的多项专利中也都有深刻的体现。
今年夏天,William本人亲自来上海郑重邀请我作序。原来,他正在准备写一本有关DB2数据库设计和性能优化方面的书。他讲这本书的目的不是头痛医头,脚痛医脚,而是从数据库设计阶段就开始考虑性能问题,从系统整体层面优化数据库,一劳永逸地解决本质问题。更为重要的是,他打算在这本书里面提供一套经过验证、简单实用的PAT方法学,让数据库技术人员思路清晰、有条不紊地看清问题、解决问题,从而达到终极目标——让庞大的数据库轻盈地舞动起来。这本书另外的几位作者分别是:陈辉,DB2技术知名专家,拥有DB2内核开发的丰富经验;张广舟,号称“DB2诊断医生”,具有丰富的数据库优化实战经验;成孜论,多年往返于国内外,视角开阔,技术功底深厚,一定会为读者带来别样的惊喜。
秋天到了,窗外瓜果飘香,屋内我品读着他们的硕果。在这辛勤耕耘的几十万字中,我读出了DB2的力量,读出了中国数据库工作者的希望。书里既有惊心动魄的危机处理纪实,又有摸爬滚打积累的实践心得。有时你会享用到最新技术的说明资料,有时你会感同身受实战技巧,有时你也会对作者独特的分析视角感叹不已。我很欣慰,一部DBA案头必备,可以传世的经典之作诞生了!
本书作者其实代表了一部分热血青年,他们本可以养尊处优、高谈阔论地过着小资的生活,但是却选择了一条荆棘密布、困难重重的长征之途。而这条路途,最终通向的是梦想之乡,通向的是雪山之巅。无论是这条路的开辟者,还是有共同志向的开拓者,都会为中国数据库生态系统的繁荣与昌盛贡献出自己的力量。
IT诸葛网总裁 焦新港
2010年秋 写于上海
前 言 关系论
提到数据库的历史,就不得不说起一位传奇人物:E.F.Codd。作为数据库理论的奠基人,E.F.Codd首次提出了“关系型数据库模型”。这位从牛津走出来的绅士,“二战”期间曾是英国皇家空军的飞行员。后来他来到纽约加入了IBM。1981年,凭借对数据库发展的划时代贡献,Codd荣获被誉为“计算机科学界诺贝尔奖”的“ACM图灵奖”。 这位通透数据关系的先驱,在讲述“关系”时有过这样的描述:
我的家乡在波特兰岛,这个孤独的小岛几百万年来访客不多。这使得岛上的物种与外界有很大差别。这里有翅膀已经退化的海鸥,这里的蟋蟀长得像大型工蚁,既不会跳也不会叫,还有一种我喜爱的叫做黄衣草的植物。的确,波特兰岛是个比较封闭的生物圈,但是植物群与动物群的关系,甚至与人的关系却是如此紧密,这令我非常惊讶,也非常着迷。
在这里人们总是诅咒兔子,以至于“dead rabbit”总是挂在嘴上。原来,住在土洞里的先民,如果发现洞口有兔子出现,经常会有土块从洞顶掉落下来,砸到人的头上。 这种离奇的关联,竟然可以从达尔文的《物种起源》找到缘由。达尔文说:“任何生物之间都有关系,只是往往你察觉不到。” 后来发现岛上的兔子喜爱吃一种荠菜。这种荠菜的根茎被兔子吃光后留出的空间,是兔子良好的休憩场所。进而兔子把洞越挖越深,有的可达十英尺。而人们恰恰钟爱这里荠菜的叶子,配上沙丁鱼是最美味的佳肴。荠菜被种在洞顶的土坡上,那里是最合适的菜地。就这样,害怕人类的兔子为了荠菜,越来越多地涌入人类住的洞顶。当过于拥挤时有的兔子就会游逛到下面的洞口活动。而这个举动证明,洞顶已经被兔子挖得到处是安乐窝了,自然会有土块松动而坠落下来。
Codd博士也许是从家乡关于兔子的传说中找到了“关系型数据库”的灵感吧,当今无论是DB2还是Oracle,都要感谢当年在英吉利海峡辛苦挖洞的兔子。很显然:关系,无所不在。从厄尔尼诺现象到多米诺骨牌效应,从热核武器裂变到蝴蝶效应,事物之间的关系如此丰富,有时引起的后果却又很严重。面对事物关系引发的连锁反应,如果我们未雨绸缪,积极主动地做好防范,准备好应对措施,就可以最大程度地降低风险。这些理论在数据库领域,同样适用。
随着各领域业务的迅速发展,支撑业务发展的大型数据库性能面临的压力与日俱增。我们在数据库设计与性能优化的工作中注意到如下一些不良现象:
1.不重视数据库设计,后期出现大量性能问题,改造和维护代价高昂。
2.DBA往往依靠临时判断处理问题,缺乏一套行之有效的系统化的优化思路和科学可靠的方法来指导。
3.数据库优化存在技术门槛,工具繁多,学习周期长,而时间的压力往往导致进度过于仓促,造成工作混乱。
我们发现,这些问题表面上是工作内容混乱造成的,而实际上是工作方法和工作思路混乱造成的。我们撰写本书的目的正是为了帮助读者梳理流程,提供解决问题的思路和方法。本书列出了数据库设计与性能优化工作中频繁遇到的问题、难以解决的问题、措手不及的问题和容易忽视的关键问题,通过两条线索:缜密的技术阐述和贯穿始终的案例说明,帮助读者更好地吸收和理解。
需要特别指出的是,本书是由来自IBM的资深研发工程师执笔撰写的,他们都具备真实生产环境中大型数据库设计与性能优化的丰富实践经验,这是区别于目前市场上所有同类书籍的显著特点。
本书结构
本书分为四大部分,共11章。
第一部分,解析数据库性能的本质问题。
决定数据库性能的两个阶段:构建数据库之前的设计阶段,数据库上线运行后的优化阶段。第一阶段完成高质量的数据库设计,是高性能系统的基础;第二阶段基于PAT树的方法系统,是掌控数据库性能的秘密所在。我们通过金融、电信等行业经营分析系统的实际案例,来一层层地揭开这个秘密,领略PAT树调整设计和解决性能问题的威力。
第二部分,从设计高性能数据库的角度,详细介绍如何使用DB2数据库设计高质量的应用系统。内容主要包括DB2数据库逻辑设计、DB2数据库物理设计、DB2 pureXML数据库设计及DB2工作负载设计。
第三部分,介绍如何优化DB2数据库。内容主要包括性能监控及参数调整、SQL语句优化策略、锁和日志优化等。
第四部分,阐述DB2高级性能加速技术。本部分内容是对DB2数据库设计和优化基础之上的有益补充,主要包括DB2 pureScale集群和solidDB高速缓存加速。
附录部分列出了常用监控命令用法和缩略语释义,还特别提供了PAT树的放大图,供读者进行数据库性能优化时使用。
本书特点
1.“用”字当先
很多人喜欢读成功人士的自传,慢慢就会按照书中所说去做。但其实,每个人的生活和工作轨迹都不同,一种成功模板不一定适用于所有人。数据库技术系列丛书中,相当一部分书籍都是教科书般地讲解数据库知识,或许中间会穿插一些例子,但缺乏真实案例的有力支撑,也没有形成一套系统化的工作方法。因此我们要引导读者走上更有意义的应用大道,为读者提供自我分析问题的思维方式和实现方法。特别值得一提的是,贯穿本书的PAT方法学,是已被大量实践证明的解决应用性能问题的高效方法学。该方法学立足于实践,对设计人员提高DB2数据库设计水平,对DBA提高性能优化水平有很高的实用价值。
2.“厚”的积累
我很幸运,能够站在蓝色巨人IBM的肩膀上看世界,更幸运的是,我周围聚集着一群极其优秀的专才。这使我的经历和见识都急速提升。本书记录了在移动通信系统优化项目中,我与伙伴们如何排除系统中的“定时炸弹”;在金融系统优化项目中,我的团队如何应对挑战,又如何通力协作;在中央机关数据库优化项目中,我们如何面对棘手状况,又如何有针对性地制定优化方案,最终突出重围取得成功;在各地高校,看到诸多热衷DB2的年轻脸庞,那是让人感动和激动的时刻!这些“厚”的积累,一定能帮助读者增加成功的可能性。
3.“新”的技术
技术变革会带来生产力的飞跃。MRI(核磁共振成像)横空出世后,这种革命性的冲击让医生们对X光、CT技术再也无法产生热情。而在DB2设计和性能优化过程中,如果能合理使用DB2提供的最新技术,你一定会惊呼:事半功倍原来如此简单!本书中所阐述的pureXML设计、工作负载设计、表分区、数据压缩、新监控框架以及游标稳定性隔离级的当前提交特性等都是DB2的最新特性。另外,为了提高应用程序事务处理能力,本书还介绍了DB2 pureScale 和solidDB 高速缓存DB2数据库。
读者对象
如果您学习数据库知识仅一个月,本书可能不是最适合您的。三年前一位来自IBM多伦多实验室的数据库大师曾告诫我:你不要指望一本书可以兼顾入门者和专业者,更不要做这样的事情。我记住了这句话,因而这本书专注的对象是DB2数据库设计人员、DBA、数据库性能分析人员、数据库开发人员、运维人员及应用开发工程师。
还请注意的是,在阅读本书前,读者无须具备性能优化的专业知识,但希望读者接触过DB2数据库并且了解SQL语言。同时,本书还提供了三条学习路径:
第一,从解决问题的角度来看,读者可以在学习了第1章介绍的PAT方法学和第2章介绍的金融电信行业经营分析系统的真实案例后,直接使用PAT方法学并结合后续章节来解决实际工作中遇到的性能问题。
第二,从掌握DB2知识的角度看,读者可以直接从第3章开始学习DB2数据库设计、监控和优化等知识。
第三,从解决问题和学习结合的角度来看,PAT树最重要的特点就是叶子节点给出的优化方法准确对应到本书的相应章节,所以在解决性能问题的同时,可以利用这个特点有针对性地学习DB2数据库相关知识。
另外,考虑到本书可以作为数据库设计以及性能优化的教学用书,所以对数据库相关专业的高校学生以及从事相关课程教学的教师具有良好的参考价值。
本书涵盖哪些版本
本书中绝大多数概念适用于包括DB2 8 for Linux, UNIX and Windows以来的所有版本。但不可避免的是,我们讨论到的某些特性只是针对特定版本的,具体如下。
表分区和MDC特性(第3章):适用于DB2 9及其以后版本。
自动数据库管理、数据压缩和STMM(第4章):适用于 DB2 9及其以后版本。
pureXML数据库设计(第5章):适用于DB2 9及其以后版本。
DB2工作负载设计(第6章):适用于DB2 9.5及其以后版本。
新监控框架(第7章):适用于DB2 9及其以后版本。
当前提交特性(第9章):适用于DB2 9.7及其以后版本。
DB2 pureScale 海量事务处理技术(第10章):适用于DB2 9.8及其以后版本。
solidDB Cache高速缓存技术(第11章):适用于DB2 9.1及其以后版本。
如果没有特别指明某特性只针对某个版本,则默认对所有版本都适用。
在线资源
读者可以从 www.db2ring.net下载本书案例中用到的文件,也可以从该网站上找到本书最新的补遗及勘误。同时也欢迎大家到网站相互交流和学习。
致谢
首先感谢电子工业出版社的高洪霞编辑,她在本书出版过程中给予了我们大力支持和帮助!感谢IBM信息管理产品架构师陈奇博士及Cognos行业解决方案架构师王庆法,他们在本书的选题方面提供了重要帮助。同时,本书在审稿中还得到了IBM软件开发实验室经理刘慎锋的热心帮助,在此表示衷心感谢。此外,感谢赵文峰博士,他审核了本书的PAT方法论及大部分章节并提出了宝贵建议;感谢秦怡,她在繁忙的工作之余审核了所有章节的引言和案例部分,并提供了非常重要的建议;感谢张昱,他审核了书中部分章节并制作了PAT树的插图;感谢刘畅,她审核了本书的前两章并提出了有益的修改意见;感谢所有参与本书审核的同事们,孙岳、李玉明、李睿明、侯占友和陈诗然。
王飞鹏2010年感恩节写于圣淘沙岛
后 记
当我们走近DBA,大家对DBA的第一印象是什么呢?是活力四射,还是默默工作?是锐意创新,还是墨守成规?他们是否看时尚杂志,还是每天手捧厚厚的技术手册一头扎进技术的海洋?其实,我们联想的是一种氛围。说起开源,你能联想到开放的氛围;当使用“苹果”产品,你能感受到时尚的氛围;当听到拥有专利数量世界第一的IBM,你能体会到创新的氛围。那么,DBA的氛围是什么?
Gosling曾写过,“在机房里,就像身处荒漠一样。那里人迹罕至,没有人愿意端着一杯香浓的咖啡在那里聊天。”从窗外眺望,机房外是宽敞而幽静的区域,而机房里只有各种机器、线缆和带电设备,当然也少不了机器发出来的各种噪声。难道DBA的氛围就是精神荒漠吗?我想说的是,DBA的氛围绝不是枯燥和无助的,相反,是轻盈、充满活力的。
对于热爱数据库工作的人来说,投入工作更像是伴着节奏,和着旋律迈出的轻松舞步。这种节奏和旋律,既可以理解为技术人员的文化素养或者职业水准,也可以理解为一种工作思路或一种工作方法。不愿意迈出舞步的数据库工作者永远在犹豫“技术上是否能实现?”而数据库的舞者却在思考“用户需要我们的数据库提供更多更优质的服务。”本书面对的不是满足于让数据库能“跑”起来的DBA技术人员,期望读者是一个对数据库有深刻感知和理解,一个想要在数据库工作中和“舞伴”共同呈现精美绝伦表演的舞者。
其实,数据库是一个庞大的生态系统,对DBA素质要求非常全面。DBA不但要对数据库这一层了如指掌,还要兼顾上层业务应用和下层硬件结构的融会贯通。一上一下,既有广度上的蔓延,也有深度上的延伸,这正是数据库技术人员区别于其他职业的重要特征。他们需要有很强的组织协调能力;需要有准确地诊断数据库和其他层面问题的能力;需要有及时地解决突发问题的能力;需要有条理的培训能力;需要超负荷时,还能有条不紊、全力投入的意志能力;还需要大量其他的能力,包括一点点幽默能力。
通过大量实践证明,最终决定数据库项目能否成功的因素不仅是个人的技术,更多是个人的综合能力。现在,数据库业务覆盖的范围越来越广,对技术人员的能力要求越来越综合,这让我意识到不但要把数据库技术展现给大家,更要把对DBA综合能力的要求说明白。
我从自己经历中挑选了一些艰难的,包括出过事故的项目作为案例写进书中。我之所以把那些看起来更漂亮的项目从文稿中删除,是因为我深知,对错误的反省和总结远比对成功的展示更有意义。在这本书里,你可以看到数据库应用时的真实景象;可以读到在数据库系统中,因为不起眼的失误、疏忽、差错而引起的严重后果,有的是因为不规范的行为,有的是因为不合理的计划,有的是因为不成熟的思路,还有的是因为不过关的技术素质。但究其根本原因,还是对数据库的理解不深入,对数据库的认知不全面。该是我们改变自己认识上的误区,改变对待数据库的印象,改变数据库工作方式的时候了!当你与数据库一同迈出轻盈的舞步,你将拥有主动权,你将会感受到这支舞曲给你带来前所未有的全身心感官体验。
舞姿千变万化,但任何一种舞动,哪怕是世界上最复杂、最炫目的舞蹈,都一定是有基本步法的,在这本书里,我们看到的就是数据库设计与性能优化的基本步法。只要你按照这样的步法加以实践,你就能演绎出完美的舞蹈,舞动你自己的“数据库小宇宙”,这正是智慧与技术的完美结合。读完本书,你会明白,没有方法思路,没有旋律感和步法感,一味追求技术至上的技术人员,面对日新月异的技术变革,会觉得越来越力不从心,最终会发现徒有技术的增长也无法掩饰综合实力的停滞不前甚至倒退。
最后,我赠给读者一句话:如果你把舞动数据库当做自己的梦想,不妨先调整自己的脚步,找到领先的一步,自信的一步,主动的一步,开始迈出轻盈的舞步吧。
王飞鹏2010年圣诞节写于香港西贡
目 录
第一部分 DB2基础
第1章 我看DB2设计与优化 1
1.1 数据库设计与性能优化 2
1.1.1 收集需求 3
1.1.2 设计概念模型 4
1.1.3 设计逻辑结构 5
1.1.4 设计物理结构 6
1.1.5 实施、运行和维护阶段 8
1.2 性能问题 8
1.2.1 什么是性能问题 8
1.2.2 为系统做性能基准测试 9
1.2.3 制订性能优化目标 10
1.2.4 把问题分类 10
1.3 使用PAT方法学解决问题 11
1.3.1 什么是PAT方法学 11
1.3.2 PAT方法学优化策略 11
1.3.3 使用PAT方法学 15
1.3.4 使用PAT方法学的步骤 25
1.3.5 PAT树使用建议 26
1.4 小结 26
第2章 性能优化利器——PAT方法 28
2.1 优化步骤 29
2.2 业务分析 29
2.2.1 经营分析系统的架构 29
2.2.2 性能问题的提出 31
2.3 系统分析 31
2.3.1 硬件和操作系统 32
2.3.2 数据库物理设计 33
2.3.3 分析结果 34
2.4 制订优化计划 35
2.4.1 优化计划安排 35
2.4.2 实践优化策略 35
2.5 使用PAT方法 36
2.5.1 优化“每天下午系统响应慢”问题(Perf_SlowAfterNoon_Sys) 36
2.5.2 优化“大数据转入”问题(Perf_Load_App) 37
2.5.3 优化“客户流失分析”问题(Perf_Customer_App) 38
2.5.4 优化“账户资费”问题(Perf_ACC_App) 39
2.5.5 优化“数据质量管理”问题(Perf_Data_App) 41
2.5.6 优化“系统逐渐变慢”问题(Perf_SlowDown_Sys) 42
2.5.7 优化总结 45
2.6 小结 45
第二部分 DB2数据库设计
第3章 高质量逻辑设计 48
3.1 常规表设计 49
3.1.1 表设计的原则 49
3.1.2 列定义原则 52
3.1.3 数据完整性设计 53
3.1.4 其他考虑因素 54
3.2 索引设计 56
3.2.1 索引的概念 56
3.2.2 深入解析索引原理 60
3.2.3 创建索引 67
3.2.4 索引设计原则 67
3.2.5 索引维护 70
3.3 MDC表设计 71
3.3.1 多维群集(MDC) 71
3.3.2 块索引 72
3.3.3 MDC表的优势 73
3.3.4 MDC表设计原则 74
3.4 表分区设计 76
3.4.1 分区表 76
3.4.2 分区表索引 78
3.4.3 转入转出 80
3.4.4 案例分析 82
3.5 DPF设计 83
3.5.1 数据库分区 83
3.5.2 数据库分区组 87
3.5.3 DPF设计原则 88
3.5.4 MDC、DPF和表分区 90
3.6 MQT表设计 91
3.6.1 MQT表介绍 91
3.6.2 MQT表适用范围 93
3.6.3 MQT表设计原则 93
3.6.4 MQT表设计示例 94
3.7 临时表设计 95
3.7.1 全局临时表(CGTT/DGTT) 95
3.7.2 临时表设计 96
3.7.3 设计示例 97
3.8 小结 98
第4章 高质量物理设计 100
4.1 物理设计 101
4.1.1 确定数据库的物理结构 101
4.1.2 评价物理结构 102
4.2 设置和管理CPU 103
4.2.1 DB2的并行处理SMP 103
4.2.2 DB2的并行处理MPP 104
4.2.3 SMP集群(SMP+MPP) 105
4.3 设置和管理I/O 106
4.3.1 磁盘和存储设计 107
4.3.2 磁盘阵列技术 109
4.3.3 条带化 111
4.3.4 I/O相关配置参数 113
4.3.5 I/O存储设计小结 114
4.3.6 I/O设计范例 116
4.4 表空间设计 116
4.4.1 表空间概念 116
4.4.2 表空间类型 117
4.4.3 表空间设计总结 119
4.4.4 表空间设计范例 127
4.5 设置和管理内存 128
4.5.1 内存 128
4.5.2 缓冲池设计 134
4.5.3 STMM内存自动管理 140
4.6 数据压缩 143
4.6.1 压缩的重要性 143
4.6.2 压缩的种类 144
4.7 小结 146
第5章 pureXML数据库设计 149
5.1 DB2 pureXML 150
5.1.1 pureXML之风采 150
5.1.2 XML存储 151
5.1.3 XQuery与SQL/XML 153
5.1.4 XML Schema 157
5.2 XML索引 159
5.2.1 XML索引类型 159
5.2.2 创建索引 160
5.2.3 XML索引优化 161
5.3 使用pureXML设计高效的数据库 164
5.3.1 动态表单类设计 164
5.3.2 元数据类设计 165
5.3.3 数据交换类设计 166
5.3.4 社交网络类设计 167
5.4 XML数据库的性能优化 168
5.5 小结 170
第6章 工作负载设计 172
6.1 DB2工作负载介绍 173
6.2 工作负载管理器组件 176
6.2.1 工作负载 176
6.2.2 服务类 178
6.2.3 阈值 180
6.2.4 工作类集合和工作操作集合 182
6.2.5 DB2和AIX / Linux WLM 185
6.2.6 小结 186
6.3 WLM监控 187
6.3.1 监控环境 187
6.3.2 工作负载监控示例 189
6.4 设计DB2工作负载 193
6.5 工作负载范例 194
6.6 小结 195
第三部分 DB2数据库性能优化
第7章 DB2配置优化与监控 197
7.1 配置参数优化 198
7.1.1 操作系统参数优化 198
7.1.2 DBM参数优化 199
7.1.3 DB参数优化 201
7.1.4 注册变量优化 207
7.1.5 常见问题总结 207
7.2 性能监控的途径 209
7.2.1 快照监控 209
7.2.2 事件监控 216
7.2.3 db2pd监控 219
7.3 新监控框架 222
7.3.1 表函数 222
7.3.2 管理视图 225
7.4 系统监控的方法 227
7.4.1 CPU监控 227
7.4.2 内存监控 230
7.4.3 I/O监控 233
7.5 DB2高级监控工具 236
7.5.1 db2top 236
7.5.2 Data Studio管理控制台 237
7.5.3 Optim性能管理器 239
7.6 本章小结 239
第8章 SQL语句性能优化实战 241
8.1 SQL语句编写 242
8.1.1 谓词 242
8.1.2 多余的连接 243
8.1.3 子查询 244
8.1.4 外连接 244
8.1.5 UNION ALL的使用 245
8.1.6 Having子句 245
8.1.7 OFNR和FFNR子句 245
8.1.8 使用参数标记 246
8.2 优化器 246
8.2.1 优化级别 248
8.2.2 注册变量 250
8.2.3 内存参数 251
8.2.4 表和索引设计 251
8.2.5 统计信息 251
8.2.6 信息性约束 253
8.3 SQL语句访问计划分析 254
8.3.1 解释工具 254
8.3.2 查询重写 258
8.3.3 访问路径 260
8.3.4 连接方法 265
8.3.5 问题SQL语句分析 268
8.4 其他优化建议 275
8.4.1 特殊的优化方法 275
8.4.2 Design Advisor优化指导 278
8.4.3 语句集中器 278
8.5 存储过程优化 280
8.6 XQuery优化 288
8.6.1 XQuery简介 288
8.6.2 如何使用 289
8.7 数据在线优化 294
8.7.1 REORGCHK 294
8.7.2 REORG 296
8.8 本章小结 298
第9章 锁和日志优化 302
9.1 锁 303
9.1.1 锁等待和超时 303
9.1.2 锁升级 304
9.1.3 死锁 304
9.2 锁的类型与兼容性 306
9.2.1 锁的类型 306
9.2.2 锁兼容 309
9.3 隔离级别与影响并发的因素 310
9.3.1 隔离级别介绍 310
9.3.2 DB2注册变量 311
9.3.3 当前已落实 312
9.4 锁监控和问题解决 313
9.4.1 锁等待监控 314
9.4.2 锁超时监控 318
9.4.3 死锁监控 327
9.5 日志与性能 331
9.5.1 循环日志 332
9.5.2 归档日志 332
9.5.3 日志的使用 333
9.5.4 写日志和写表 333
9.5.5 日志配置参数 334
9.6 日志监控与优化 337
9.6.1 日志监控 337
9.6.2 日志瓶颈与优化 339
9.7 本章小结 340
第四部分 高级优化技术
第10章 pureScale海量事务处理 342
10.1 什么是pureScale 343
10.2 pureScale架构 344
10.3 DB2 pureScale和 Oracle RAC的对比 346
10.4 DB2 pureScale实例 347
10.4.1 实例背景 347
10.4.2 硬件配置 348
10.4.3 软件安装配置 351
10.4.4 客户应用测试 354
10.5 小结 358
第11章 solidDB高速缓存优化 360
11.1 什么是solidDB高速缓存 361
11.2 solidDB高速缓存DB2数据 364
11.3 solidDB高速缓存应用场合 364
11.4 solidDB高速缓存架构 365
11.5 电信行业应用案例 366
11.5.1 应用背景 366
11.5.2 使用solidDB高速缓存加速 367
11.6 小结 375
附录A 常用监控命令用法 377
附录B 缩略语释义 382
后记 389
参考文献 391
舞动DB2系列
本书是国内第一本IBM原厂设计与性能优化专著!
首次提出PAT性能优化方法学,诠释了DB2最新设计技术。
电信金融等行业经典实战案例。
IBM信息管理开发部总经理吉燕勇推荐序
IBM DB2开发部资深经理干毅民推荐序
IBM信息管理首席架构师陈奇博士任技术顾问
内 容 简 介
本书原汁原味地展示了DB2设计和优化技术,深入剖析了DB2的工作原理。全书分为4部分,共11章。
第一部分解析数据库性能的本质问题。第二部分从设计高性能数据库的角度,详细介绍如何使用DB2数据库设计高质量的应用系统,内容包括DB2数据库逻辑设计、DB2数据库物理设计、DB2 pureXML数据库设计及DB2工作负载设计。第三部分介绍如何优化DB2数据库,内容包括性能监控及参数调整、SQL语句优化策略、锁和日志优化等。第四部分阐述DB2高级性能加速技术,主要包括DB2 pureScale集群和solidDB高速缓存加速。
附录部分列出了常用监控命令用法和缩略语释义,还特别提供了PAT树的放大图,供读者进行数据库性能优化时使用。
本书适合DB2数据库设计人员、DBA、数据库性能分析人员、数据库开发人员、运维人员及应用开发工程师阅读和参考,也可用做高校相关专业或培训班的教材。
推荐序一
两千多年前的战国时代,信息记录在竹简上。从此信息文明更新换代。而最近30年发生的信息爆炸,使世界发展步伐加快,社会变化日新月异。在刚过去的经济危机中,IBM逆势取得了骄人成绩,继续保持了优势地位,并紧紧把握了中国信息发展的时代脉搏。而信息管理(IM),作为IBM最重要的软件品牌之一,已成为IBM近年来投入最大的领域。在过去5年间,IBM在这一领域仅在收购最新技术上的花费金额就超过120亿美元。
2010年10月在拉斯维加斯举行的“2010 IBM IOD全球大会”上,信息随需应变(IOD)的创新理念及丰富的“智慧”产品吸引了超过9000名来自世界各地、各行各业的代表参加。与往年相比,这次峰会众多来自中国的面孔增加了很多。在随后举行的客户座谈和用户研讨会上,我们更希望听到来自中国客户的声音。可喜的是,IBM在中国的热情投入换来了中国客户的倾情赞誉和坚定支持;可忧的是,中国信息管理的声音不如期待中的那样响亮,这与中国近年来飞速发展的信息技术产业和市场规模是极不相称的。究其原因,中国的信息管理领域起步晚、经验还需积累是一方面,但最重要的因素就是中国本土缺乏优秀的技术人才储备,这导致在这一领域的高端人才十分匮乏,这必会成为中国信息产业走向辉煌的巨大障碍。
IBM中国开发中心经过十年的积累和沉淀,已经培养建立起了一支具有精湛技术、熟悉中国市场和融合全球信息技术的优秀团队。这支团队通过坚持不懈、热情执着的努力,已成功伴随中国的客户应对信息社会的巨大挑战,并获得了飞跃式的发展。我们有能力,也深感有必要把先进的信息管理技术和理念进一步传播给中国广大的技术人员。这本由DB2资深工程师撰写的书,是信息管理领域的一朵奇葩,专注于数据库设计与性能优化方面,内容非常全面,定位非常准确,方法非常实用,相信她能帮助中国的高端信息管理技术人才更上一层楼。
IBM中国开发中心 信息管理产品开发部
总经理 吉燕勇
2010年11月25日
推荐序二
自从埃德加•考特(Edgar F. Codd)在1970年发明关系数据库以来,IBM在数据库技术的研究和开发方面一直处于世界领先地位。DB2数据库是IBM公司数据管理产品线上最知名也是最成功的产品,除了可以运行于大型主机环境外,也适用于多种开放式平台。近年来,IBM加大了DB2研发在中国开发中心的投资,目前已培养了一大批参与DB2产品核心开发、客户技术支持和服务的优秀工程师。
DB2数据库在中国取得了非常广泛的应用,在金融、电信、政府、制造和零售等行业都有很多成功的客户。然而我们发现的一个问题是:在国内的广大用户中,对DB2精通的人还比较少,影响了DB2产品的使用。DB2生态系统的繁荣依赖于用户、合作伙伴和IBM的共同努力,如果没有广大DB2用户技术水平的提升,DB2生态系统的繁荣就很难实现。因此我们的一个重要任务就是要通过各种方式和途径来推广DB2产品技术。
随着企业信息应用系统越来越复杂,用户量和数据量正变得日益巨大,这对设计人员设计高质量的数据库及DBA优化数据库提出了严峻的挑战。本书就是为了解决这个问题而诞生的。在这本书中,不仅包括了DB2经典设计和优化方法,还涵盖了DB2最新设计和优化技术,例如表分区、工作负载设计、pureXML设计、pureScale集群、solidDB高速缓存等。特别是为了帮助读者掌握性能优化技术,还提出了一套基于PAT树的性能优化方法系统。
本书由来自DB2的资深工程师编写,原汁原味地展示了DB2设计和优化技术,深入剖析了DB2内部工作原理。在为全国各地的IBM合作伙伴培训DB2数据库期间,作者更深入地了解到DB2用户在学习中遇到的困难。另外,作者具有为政府、电信、金融等行业客户做数据库迁移方面的咨询和实施经验,充分了解生产环境中客户遇到的实际问题。
上面的一切使得本书能想读者之所想,写读者之所需。
IBM中国开发中心DB2开发
资深经理 干毅民
2010年12月6日
推荐序三
心有多大,舞台就有多大。当我看到这本书的初稿时,立刻被书名所吸引。“舞动DB2”几个字,尽管还未经过美工处理,我已经意识到作者心怀天下,志存高远。而当我接连读完第1章和第2章,我又发现作者不但目标长远,下的功夫也极深。第1章总述数据库设计与性能优化,高屋建瓴般地提出了颠覆性的PAT方法学。第2章相对于传统性能分析方法,以电信行业的经营分析系统为例,全面展现了性能问题分析定位体系,其高度的实用性着实令人叹服。而案例分析部分环环紧扣,步步精彩。贯穿整本书的线索使我迫不及待地追逐一个又一个的疑问,一直读过数百页。我不得不惊叹,这本书本身就是一个完整的理论体系,扩能长龙飞舞,缩能稳如泰山。
我也不得不说起当今的一些数据库图书,更像在写教材,寻章摘句,呆板无趣。普遍浮躁的学术氛围造就了一批苍白无力的技术书籍,这样的平庸之作导致读者从一开始就迷惑,进而迷失,读到最后是一片迷茫。
在本书中,我们始终能读出作者清晰的思路,作者在这方面确实投入了巨大的精力。春节刚过,王飞鹏在为书制定目录时,严谨的学术风格就展现了出来——他邀请了多位技术专家进行评审,为其严格把关,为读者负责。从选题结构上就高人一筹,完全切中了当今DB2应用过程中设计与性能优化问题的要害。之后,他组织陈辉、张广舟、成孜论各显身手,充分展现团队威力。事实证明,他们把各自多年的积累与优势淋漓尽致地发挥出来,为读者带来一场数据库设计与性能优化的盛宴。在他们完成初稿后,我与其他两位数据库资深顾问逐字斟酌了内容,提出了建议。他们非常谦虚地接受了建议,仔细修改。当第二稿、第三稿、第四稿陆续发给我们时,我们所有人都为他们坚持不懈的努力和出众的才华赞叹不已。
几位作者经过数月的奋斗,终于完成了这部巨著,这个过程真正的辛苦只有他们自己最清楚,但我相信他们的意志力一定经受住了极大的考验。这本真材实料的技术专著,也一定会为广大读者带去最真切的帮助,并创造出新的奇迹。
IBM信息管理产品首席架构师
美国加州大学
陈奇 博士
2010年11月30日
推荐序四 用之道
许多DBA对一则定律都深有感触:
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
这句话被称作“墨菲定律”,是由毕业于西点军校的空气动力专家Edward A. Murphy发现的。无独有偶,早在五百年前,冯梦龙就写道:屋漏偏逢连夜雨,船迟又遇打头风。两位学者身处年代不同,所受文化熏陶迥异,却对事件所反映出来的结果有着相同的描述:在某个时刻,问题会集中爆发,原本丰富的资源在那个时刻突然枯竭,原本充沛的体力在那个时刻立刻透支。在数据库领域,有人把这句话解释为:如果存在隐患,哪怕只是一点点,它一定会在某个时刻爆发,并且后果严重。责骂、混乱、恐慌、歇斯底里,在那个时刻会统统地冒出来。这对于DBA来讲,绝对是个恶梦。太多的教训应验了无论是什么数据库,一旦“墨菲定律”发作,会让DBA们痛彻心扉。
我想起郎咸平先生这几年一直非常火爆的一本书《我们的日子为什么这么难》。书的视角开阔而又着眼于民生,社会生活的方方面面都涵盖于其中。尽管郎先生的观点众说纷纭,但确实说出了老百姓的无奈和难处。而DBA的无奈和难处,又由谁来代表大家倾诉?又由谁来帮助大家解决?我看完本书后找到了答案,而这要从作者说起。
IBM是一家令人尊敬的公司。在西方世界,IBM是“阿波罗登月计划”的英雄,被Bill Gates称为世界上最大的对手;在东方国度,IBM“蓝色巨人”是前沿科技的代名词。本书的作者均来自IBM中国研发中心,他们有着年轻人特有的激情和活力,在自己的工作岗位中表现出众,王飞鹏就是其中一位。
飞鹏生长于三晋大地,毕业后,他进入IBM成为一名研发工程师,大家都称呼他William。2008年端午节,我与William在成都不期而遇,那时正值震后救援与震后重建的交替期,特殊时期的救灾经历让我们的友谊迅速升温。再见已是一年以后的西湖边上了,那天William作诗一首,时过境迁,我仍不时念诵:
西子水光竟涟漪, 南屏山色叠峦峰。
栖霞烟霞入云霄, 苏堤白堤成双龙。
意气勃发思将飞, 壮怀九天欲乘风。
雷锋塔前青衫湿, 愿为此地田舍翁。
今年我们见面的次数少了,William整日飞来飞去,忙于各种数据库项目的咨询、实施和讲座。有一次我们碰巧都在杭州,我去听了一次他给浙江电信做的数据库性能优化培训。来的人很多,位子不够,最后面也站了一排人(后来才知道,一些数据库爱好者也慕名而来)。整个培训期间,William文采飞扬,激情澎湃,与他私下里稍偏内向的性格截然不同。他的演讲诙谐轻松,简练易懂,时而高屋建瓴犹水瀑,时而烟枝细雨落风樯。我想William对数据库技术的精湛理解和讲授,跟他丰富的经历是分不开的。William曾为中央级政府机关、电信企业、金融机构、高铁系统等制定数据库优化方案,指导项目实施以及解决性能问题。这些高强度的工作使他本人的组织能力、协调能力和项目控制能力达到了新的高度。此外,他对事物不同寻常的分析和领悟能力,还有坚毅执着的信念,在他所获得的多项专利中也都有深刻的体现。
今年夏天,William本人亲自来上海郑重邀请我作序。原来,他正在准备写一本有关DB2数据库设计和性能优化方面的书。他讲这本书的目的不是头痛医头,脚痛医脚,而是从数据库设计阶段就开始考虑性能问题,从系统整体层面优化数据库,一劳永逸地解决本质问题。更为重要的是,他打算在这本书里面提供一套经过验证、简单实用的PAT方法学,让数据库技术人员思路清晰、有条不紊地看清问题、解决问题,从而达到终极目标——让庞大的数据库轻盈地舞动起来。这本书另外的几位作者分别是:陈辉,DB2技术知名专家,拥有DB2内核开发的丰富经验;张广舟,号称“DB2诊断医生”,具有丰富的数据库优化实战经验;成孜论,多年往返于国内外,视角开阔,技术功底深厚,一定会为读者带来别样的惊喜。
秋天到了,窗外瓜果飘香,屋内我品读着他们的硕果。在这辛勤耕耘的几十万字中,我读出了DB2的力量,读出了中国数据库工作者的希望。书里既有惊心动魄的危机处理纪实,又有摸爬滚打积累的实践心得。有时你会享用到最新技术的说明资料,有时你会感同身受实战技巧,有时你也会对作者独特的分析视角感叹不已。我很欣慰,一部DBA案头必备,可以传世的经典之作诞生了!
本书作者其实代表了一部分热血青年,他们本可以养尊处优、高谈阔论地过着小资的生活,但是却选择了一条荆棘密布、困难重重的长征之途。而这条路途,最终通向的是梦想之乡,通向的是雪山之巅。无论是这条路的开辟者,还是有共同志向的开拓者,都会为中国数据库生态系统的繁荣与昌盛贡献出自己的力量。
IT诸葛网总裁 焦新港
2010年秋 写于上海
前 言 关系论
提到数据库的历史,就不得不说起一位传奇人物:E.F.Codd。作为数据库理论的奠基人,E.F.Codd首次提出了“关系型数据库模型”。这位从牛津走出来的绅士,“二战”期间曾是英国皇家空军的飞行员。后来他来到纽约加入了IBM。1981年,凭借对数据库发展的划时代贡献,Codd荣获被誉为“计算机科学界诺贝尔奖”的“ACM图灵奖”。 这位通透数据关系的先驱,在讲述“关系”时有过这样的描述:
我的家乡在波特兰岛,这个孤独的小岛几百万年来访客不多。这使得岛上的物种与外界有很大差别。这里有翅膀已经退化的海鸥,这里的蟋蟀长得像大型工蚁,既不会跳也不会叫,还有一种我喜爱的叫做黄衣草的植物。的确,波特兰岛是个比较封闭的生物圈,但是植物群与动物群的关系,甚至与人的关系却是如此紧密,这令我非常惊讶,也非常着迷。
在这里人们总是诅咒兔子,以至于“dead rabbit”总是挂在嘴上。原来,住在土洞里的先民,如果发现洞口有兔子出现,经常会有土块从洞顶掉落下来,砸到人的头上。 这种离奇的关联,竟然可以从达尔文的《物种起源》找到缘由。达尔文说:“任何生物之间都有关系,只是往往你察觉不到。” 后来发现岛上的兔子喜爱吃一种荠菜。这种荠菜的根茎被兔子吃光后留出的空间,是兔子良好的休憩场所。进而兔子把洞越挖越深,有的可达十英尺。而人们恰恰钟爱这里荠菜的叶子,配上沙丁鱼是最美味的佳肴。荠菜被种在洞顶的土坡上,那里是最合适的菜地。就这样,害怕人类的兔子为了荠菜,越来越多地涌入人类住的洞顶。当过于拥挤时有的兔子就会游逛到下面的洞口活动。而这个举动证明,洞顶已经被兔子挖得到处是安乐窝了,自然会有土块松动而坠落下来。
Codd博士也许是从家乡关于兔子的传说中找到了“关系型数据库”的灵感吧,当今无论是DB2还是Oracle,都要感谢当年在英吉利海峡辛苦挖洞的兔子。很显然:关系,无所不在。从厄尔尼诺现象到多米诺骨牌效应,从热核武器裂变到蝴蝶效应,事物之间的关系如此丰富,有时引起的后果却又很严重。面对事物关系引发的连锁反应,如果我们未雨绸缪,积极主动地做好防范,准备好应对措施,就可以最大程度地降低风险。这些理论在数据库领域,同样适用。
随着各领域业务的迅速发展,支撑业务发展的大型数据库性能面临的压力与日俱增。我们在数据库设计与性能优化的工作中注意到如下一些不良现象:
1.不重视数据库设计,后期出现大量性能问题,改造和维护代价高昂。
2.DBA往往依靠临时判断处理问题,缺乏一套行之有效的系统化的优化思路和科学可靠的方法来指导。
3.数据库优化存在技术门槛,工具繁多,学习周期长,而时间的压力往往导致进度过于仓促,造成工作混乱。
我们发现,这些问题表面上是工作内容混乱造成的,而实际上是工作方法和工作思路混乱造成的。我们撰写本书的目的正是为了帮助读者梳理流程,提供解决问题的思路和方法。本书列出了数据库设计与性能优化工作中频繁遇到的问题、难以解决的问题、措手不及的问题和容易忽视的关键问题,通过两条线索:缜密的技术阐述和贯穿始终的案例说明,帮助读者更好地吸收和理解。
需要特别指出的是,本书是由来自IBM的资深研发工程师执笔撰写的,他们都具备真实生产环境中大型数据库设计与性能优化的丰富实践经验,这是区别于目前市场上所有同类书籍的显著特点。
本书结构
本书分为四大部分,共11章。
第一部分,解析数据库性能的本质问题。
决定数据库性能的两个阶段:构建数据库之前的设计阶段,数据库上线运行后的优化阶段。第一阶段完成高质量的数据库设计,是高性能系统的基础;第二阶段基于PAT树的方法系统,是掌控数据库性能的秘密所在。我们通过金融、电信等行业经营分析系统的实际案例,来一层层地揭开这个秘密,领略PAT树调整设计和解决性能问题的威力。
第二部分,从设计高性能数据库的角度,详细介绍如何使用DB2数据库设计高质量的应用系统。内容主要包括DB2数据库逻辑设计、DB2数据库物理设计、DB2 pureXML数据库设计及DB2工作负载设计。
第三部分,介绍如何优化DB2数据库。内容主要包括性能监控及参数调整、SQL语句优化策略、锁和日志优化等。
第四部分,阐述DB2高级性能加速技术。本部分内容是对DB2数据库设计和优化基础之上的有益补充,主要包括DB2 pureScale集群和solidDB高速缓存加速。
附录部分列出了常用监控命令用法和缩略语释义,还特别提供了PAT树的放大图,供读者进行数据库性能优化时使用。
本书特点
1.“用”字当先
很多人喜欢读成功人士的自传,慢慢就会按照书中所说去做。但其实,每个人的生活和工作轨迹都不同,一种成功模板不一定适用于所有人。数据库技术系列丛书中,相当一部分书籍都是教科书般地讲解数据库知识,或许中间会穿插一些例子,但缺乏真实案例的有力支撑,也没有形成一套系统化的工作方法。因此我们要引导读者走上更有意义的应用大道,为读者提供自我分析问题的思维方式和实现方法。特别值得一提的是,贯穿本书的PAT方法学,是已被大量实践证明的解决应用性能问题的高效方法学。该方法学立足于实践,对设计人员提高DB2数据库设计水平,对DBA提高性能优化水平有很高的实用价值。
2.“厚”的积累
我很幸运,能够站在蓝色巨人IBM的肩膀上看世界,更幸运的是,我周围聚集着一群极其优秀的专才。这使我的经历和见识都急速提升。本书记录了在移动通信系统优化项目中,我与伙伴们如何排除系统中的“定时炸弹”;在金融系统优化项目中,我的团队如何应对挑战,又如何通力协作;在中央机关数据库优化项目中,我们如何面对棘手状况,又如何有针对性地制定优化方案,最终突出重围取得成功;在各地高校,看到诸多热衷DB2的年轻脸庞,那是让人感动和激动的时刻!这些“厚”的积累,一定能帮助读者增加成功的可能性。
3.“新”的技术
技术变革会带来生产力的飞跃。MRI(核磁共振成像)横空出世后,这种革命性的冲击让医生们对X光、CT技术再也无法产生热情。而在DB2设计和性能优化过程中,如果能合理使用DB2提供的最新技术,你一定会惊呼:事半功倍原来如此简单!本书中所阐述的pureXML设计、工作负载设计、表分区、数据压缩、新监控框架以及游标稳定性隔离级的当前提交特性等都是DB2的最新特性。另外,为了提高应用程序事务处理能力,本书还介绍了DB2 pureScale 和solidDB 高速缓存DB2数据库。
读者对象
如果您学习数据库知识仅一个月,本书可能不是最适合您的。三年前一位来自IBM多伦多实验室的数据库大师曾告诫我:你不要指望一本书可以兼顾入门者和专业者,更不要做这样的事情。我记住了这句话,因而这本书专注的对象是DB2数据库设计人员、DBA、数据库性能分析人员、数据库开发人员、运维人员及应用开发工程师。
还请注意的是,在阅读本书前,读者无须具备性能优化的专业知识,但希望读者接触过DB2数据库并且了解SQL语言。同时,本书还提供了三条学习路径:
第一,从解决问题的角度来看,读者可以在学习了第1章介绍的PAT方法学和第2章介绍的金融电信行业经营分析系统的真实案例后,直接使用PAT方法学并结合后续章节来解决实际工作中遇到的性能问题。
第二,从掌握DB2知识的角度看,读者可以直接从第3章开始学习DB2数据库设计、监控和优化等知识。
第三,从解决问题和学习结合的角度来看,PAT树最重要的特点就是叶子节点给出的优化方法准确对应到本书的相应章节,所以在解决性能问题的同时,可以利用这个特点有针对性地学习DB2数据库相关知识。
另外,考虑到本书可以作为数据库设计以及性能优化的教学用书,所以对数据库相关专业的高校学生以及从事相关课程教学的教师具有良好的参考价值。
本书涵盖哪些版本
本书中绝大多数概念适用于包括DB2 8 for Linux, UNIX and Windows以来的所有版本。但不可避免的是,我们讨论到的某些特性只是针对特定版本的,具体如下。
表分区和MDC特性(第3章):适用于DB2 9及其以后版本。
自动数据库管理、数据压缩和STMM(第4章):适用于 DB2 9及其以后版本。
pureXML数据库设计(第5章):适用于DB2 9及其以后版本。
DB2工作负载设计(第6章):适用于DB2 9.5及其以后版本。
新监控框架(第7章):适用于DB2 9及其以后版本。
当前提交特性(第9章):适用于DB2 9.7及其以后版本。
DB2 pureScale 海量事务处理技术(第10章):适用于DB2 9.8及其以后版本。
solidDB Cache高速缓存技术(第11章):适用于DB2 9.1及其以后版本。
如果没有特别指明某特性只针对某个版本,则默认对所有版本都适用。
在线资源
读者可以从 www.db2ring.net下载本书案例中用到的文件,也可以从该网站上找到本书最新的补遗及勘误。同时也欢迎大家到网站相互交流和学习。
致谢
首先感谢电子工业出版社的高洪霞编辑,她在本书出版过程中给予了我们大力支持和帮助!感谢IBM信息管理产品架构师陈奇博士及Cognos行业解决方案架构师王庆法,他们在本书的选题方面提供了重要帮助。同时,本书在审稿中还得到了IBM软件开发实验室经理刘慎锋的热心帮助,在此表示衷心感谢。此外,感谢赵文峰博士,他审核了本书的PAT方法论及大部分章节并提出了宝贵建议;感谢秦怡,她在繁忙的工作之余审核了所有章节的引言和案例部分,并提供了非常重要的建议;感谢张昱,他审核了书中部分章节并制作了PAT树的插图;感谢刘畅,她审核了本书的前两章并提出了有益的修改意见;感谢所有参与本书审核的同事们,孙岳、李玉明、李睿明、侯占友和陈诗然。
王飞鹏2010年感恩节写于圣淘沙岛
后 记
当我们走近DBA,大家对DBA的第一印象是什么呢?是活力四射,还是默默工作?是锐意创新,还是墨守成规?他们是否看时尚杂志,还是每天手捧厚厚的技术手册一头扎进技术的海洋?其实,我们联想的是一种氛围。说起开源,你能联想到开放的氛围;当使用“苹果”产品,你能感受到时尚的氛围;当听到拥有专利数量世界第一的IBM,你能体会到创新的氛围。那么,DBA的氛围是什么?
Gosling曾写过,“在机房里,就像身处荒漠一样。那里人迹罕至,没有人愿意端着一杯香浓的咖啡在那里聊天。”从窗外眺望,机房外是宽敞而幽静的区域,而机房里只有各种机器、线缆和带电设备,当然也少不了机器发出来的各种噪声。难道DBA的氛围就是精神荒漠吗?我想说的是,DBA的氛围绝不是枯燥和无助的,相反,是轻盈、充满活力的。
对于热爱数据库工作的人来说,投入工作更像是伴着节奏,和着旋律迈出的轻松舞步。这种节奏和旋律,既可以理解为技术人员的文化素养或者职业水准,也可以理解为一种工作思路或一种工作方法。不愿意迈出舞步的数据库工作者永远在犹豫“技术上是否能实现?”而数据库的舞者却在思考“用户需要我们的数据库提供更多更优质的服务。”本书面对的不是满足于让数据库能“跑”起来的DBA技术人员,期望读者是一个对数据库有深刻感知和理解,一个想要在数据库工作中和“舞伴”共同呈现精美绝伦表演的舞者。
其实,数据库是一个庞大的生态系统,对DBA素质要求非常全面。DBA不但要对数据库这一层了如指掌,还要兼顾上层业务应用和下层硬件结构的融会贯通。一上一下,既有广度上的蔓延,也有深度上的延伸,这正是数据库技术人员区别于其他职业的重要特征。他们需要有很强的组织协调能力;需要有准确地诊断数据库和其他层面问题的能力;需要有及时地解决突发问题的能力;需要有条理的培训能力;需要超负荷时,还能有条不紊、全力投入的意志能力;还需要大量其他的能力,包括一点点幽默能力。
通过大量实践证明,最终决定数据库项目能否成功的因素不仅是个人的技术,更多是个人的综合能力。现在,数据库业务覆盖的范围越来越广,对技术人员的能力要求越来越综合,这让我意识到不但要把数据库技术展现给大家,更要把对DBA综合能力的要求说明白。
我从自己经历中挑选了一些艰难的,包括出过事故的项目作为案例写进书中。我之所以把那些看起来更漂亮的项目从文稿中删除,是因为我深知,对错误的反省和总结远比对成功的展示更有意义。在这本书里,你可以看到数据库应用时的真实景象;可以读到在数据库系统中,因为不起眼的失误、疏忽、差错而引起的严重后果,有的是因为不规范的行为,有的是因为不合理的计划,有的是因为不成熟的思路,还有的是因为不过关的技术素质。但究其根本原因,还是对数据库的理解不深入,对数据库的认知不全面。该是我们改变自己认识上的误区,改变对待数据库的印象,改变数据库工作方式的时候了!当你与数据库一同迈出轻盈的舞步,你将拥有主动权,你将会感受到这支舞曲给你带来前所未有的全身心感官体验。
舞姿千变万化,但任何一种舞动,哪怕是世界上最复杂、最炫目的舞蹈,都一定是有基本步法的,在这本书里,我们看到的就是数据库设计与性能优化的基本步法。只要你按照这样的步法加以实践,你就能演绎出完美的舞蹈,舞动你自己的“数据库小宇宙”,这正是智慧与技术的完美结合。读完本书,你会明白,没有方法思路,没有旋律感和步法感,一味追求技术至上的技术人员,面对日新月异的技术变革,会觉得越来越力不从心,最终会发现徒有技术的增长也无法掩饰综合实力的停滞不前甚至倒退。
最后,我赠给读者一句话:如果你把舞动数据库当做自己的梦想,不妨先调整自己的脚步,找到领先的一步,自信的一步,主动的一步,开始迈出轻盈的舞步吧。
王飞鹏2010年圣诞节写于香港西贡
目 录
第一部分 DB2基础
第1章 我看DB2设计与优化 1
1.1 数据库设计与性能优化 2
1.1.1 收集需求 3
1.1.2 设计概念模型 4
1.1.3 设计逻辑结构 5
1.1.4 设计物理结构 6
1.1.5 实施、运行和维护阶段 8
1.2 性能问题 8
1.2.1 什么是性能问题 8
1.2.2 为系统做性能基准测试 9
1.2.3 制订性能优化目标 10
1.2.4 把问题分类 10
1.3 使用PAT方法学解决问题 11
1.3.1 什么是PAT方法学 11
1.3.2 PAT方法学优化策略 11
1.3.3 使用PAT方法学 15
1.3.4 使用PAT方法学的步骤 25
1.3.5 PAT树使用建议 26
1.4 小结 26
第2章 性能优化利器——PAT方法 28
2.1 优化步骤 29
2.2 业务分析 29
2.2.1 经营分析系统的架构 29
2.2.2 性能问题的提出 31
2.3 系统分析 31
2.3.1 硬件和操作系统 32
2.3.2 数据库物理设计 33
2.3.3 分析结果 34
2.4 制订优化计划 35
2.4.1 优化计划安排 35
2.4.2 实践优化策略 35
2.5 使用PAT方法 36
2.5.1 优化“每天下午系统响应慢”问题(Perf_SlowAfterNoon_Sys) 36
2.5.2 优化“大数据转入”问题(Perf_Load_App) 37
2.5.3 优化“客户流失分析”问题(Perf_Customer_App) 38
2.5.4 优化“账户资费”问题(Perf_ACC_App) 39
2.5.5 优化“数据质量管理”问题(Perf_Data_App) 41
2.5.6 优化“系统逐渐变慢”问题(Perf_SlowDown_Sys) 42
2.5.7 优化总结 45
2.6 小结 45
第二部分 DB2数据库设计
第3章 高质量逻辑设计 48
3.1 常规表设计 49
3.1.1 表设计的原则 49
3.1.2 列定义原则 52
3.1.3 数据完整性设计 53
3.1.4 其他考虑因素 54
3.2 索引设计 56
3.2.1 索引的概念 56
3.2.2 深入解析索引原理 60
3.2.3 创建索引 67
3.2.4 索引设计原则 67
3.2.5 索引维护 70
3.3 MDC表设计 71
3.3.1 多维群集(MDC) 71
3.3.2 块索引 72
3.3.3 MDC表的优势 73
3.3.4 MDC表设计原则 74
3.4 表分区设计 76
3.4.1 分区表 76
3.4.2 分区表索引 78
3.4.3 转入转出 80
3.4.4 案例分析 82
3.5 DPF设计 83
3.5.1 数据库分区 83
3.5.2 数据库分区组 87
3.5.3 DPF设计原则 88
3.5.4 MDC、DPF和表分区 90
3.6 MQT表设计 91
3.6.1 MQT表介绍 91
3.6.2 MQT表适用范围 93
3.6.3 MQT表设计原则 93
3.6.4 MQT表设计示例 94
3.7 临时表设计 95
3.7.1 全局临时表(CGTT/DGTT) 95
3.7.2 临时表设计 96
3.7.3 设计示例 97
3.8 小结 98
第4章 高质量物理设计 100
4.1 物理设计 101
4.1.1 确定数据库的物理结构 101
4.1.2 评价物理结构 102
4.2 设置和管理CPU 103
4.2.1 DB2的并行处理SMP 103
4.2.2 DB2的并行处理MPP 104
4.2.3 SMP集群(SMP+MPP) 105
4.3 设置和管理I/O 106
4.3.1 磁盘和存储设计 107
4.3.2 磁盘阵列技术 109
4.3.3 条带化 111
4.3.4 I/O相关配置参数 113
4.3.5 I/O存储设计小结 114
4.3.6 I/O设计范例 116
4.4 表空间设计 116
4.4.1 表空间概念 116
4.4.2 表空间类型 117
4.4.3 表空间设计总结 119
4.4.4 表空间设计范例 127
4.5 设置和管理内存 128
4.5.1 内存 128
4.5.2 缓冲池设计 134
4.5.3 STMM内存自动管理 140
4.6 数据压缩 143
4.6.1 压缩的重要性 143
4.6.2 压缩的种类 144
4.7 小结 146
第5章 pureXML数据库设计 149
5.1 DB2 pureXML 150
5.1.1 pureXML之风采 150
5.1.2 XML存储 151
5.1.3 XQuery与SQL/XML 153
5.1.4 XML Schema 157
5.2 XML索引 159
5.2.1 XML索引类型 159
5.2.2 创建索引 160
5.2.3 XML索引优化 161
5.3 使用pureXML设计高效的数据库 164
5.3.1 动态表单类设计 164
5.3.2 元数据类设计 165
5.3.3 数据交换类设计 166
5.3.4 社交网络类设计 167
5.4 XML数据库的性能优化 168
5.5 小结 170
第6章 工作负载设计 172
6.1 DB2工作负载介绍 173
6.2 工作负载管理器组件 176
6.2.1 工作负载 176
6.2.2 服务类 178
6.2.3 阈值 180
6.2.4 工作类集合和工作操作集合 182
6.2.5 DB2和AIX / Linux WLM 185
6.2.6 小结 186
6.3 WLM监控 187
6.3.1 监控环境 187
6.3.2 工作负载监控示例 189
6.4 设计DB2工作负载 193
6.5 工作负载范例 194
6.6 小结 195
第三部分 DB2数据库性能优化
第7章 DB2配置优化与监控 197
7.1 配置参数优化 198
7.1.1 操作系统参数优化 198
7.1.2 DBM参数优化 199
7.1.3 DB参数优化 201
7.1.4 注册变量优化 207
7.1.5 常见问题总结 207
7.2 性能监控的途径 209
7.2.1 快照监控 209
7.2.2 事件监控 216
7.2.3 db2pd监控 219
7.3 新监控框架 222
7.3.1 表函数 222
7.3.2 管理视图 225
7.4 系统监控的方法 227
7.4.1 CPU监控 227
7.4.2 内存监控 230
7.4.3 I/O监控 233
7.5 DB2高级监控工具 236
7.5.1 db2top 236
7.5.2 Data Studio管理控制台 237
7.5.3 Optim性能管理器 239
7.6 本章小结 239
第8章 SQL语句性能优化实战 241
8.1 SQL语句编写 242
8.1.1 谓词 242
8.1.2 多余的连接 243
8.1.3 子查询 244
8.1.4 外连接 244
8.1.5 UNION ALL的使用 245
8.1.6 Having子句 245
8.1.7 OFNR和FFNR子句 245
8.1.8 使用参数标记 246
8.2 优化器 246
8.2.1 优化级别 248
8.2.2 注册变量 250
8.2.3 内存参数 251
8.2.4 表和索引设计 251
8.2.5 统计信息 251
8.2.6 信息性约束 253
8.3 SQL语句访问计划分析 254
8.3.1 解释工具 254
8.3.2 查询重写 258
8.3.3 访问路径 260
8.3.4 连接方法 265
8.3.5 问题SQL语句分析 268
8.4 其他优化建议 275
8.4.1 特殊的优化方法 275
8.4.2 Design Advisor优化指导 278
8.4.3 语句集中器 278
8.5 存储过程优化 280
8.6 XQuery优化 288
8.6.1 XQuery简介 288
8.6.2 如何使用 289
8.7 数据在线优化 294
8.7.1 REORGCHK 294
8.7.2 REORG 296
8.8 本章小结 298
第9章 锁和日志优化 302
9.1 锁 303
9.1.1 锁等待和超时 303
9.1.2 锁升级 304
9.1.3 死锁 304
9.2 锁的类型与兼容性 306
9.2.1 锁的类型 306
9.2.2 锁兼容 309
9.3 隔离级别与影响并发的因素 310
9.3.1 隔离级别介绍 310
9.3.2 DB2注册变量 311
9.3.3 当前已落实 312
9.4 锁监控和问题解决 313
9.4.1 锁等待监控 314
9.4.2 锁超时监控 318
9.4.3 死锁监控 327
9.5 日志与性能 331
9.5.1 循环日志 332
9.5.2 归档日志 332
9.5.3 日志的使用 333
9.5.4 写日志和写表 333
9.5.5 日志配置参数 334
9.6 日志监控与优化 337
9.6.1 日志监控 337
9.6.2 日志瓶颈与优化 339
9.7 本章小结 340
第四部分 高级优化技术
第10章 pureScale海量事务处理 342
10.1 什么是pureScale 343
10.2 pureScale架构 344
10.3 DB2 pureScale和 Oracle RAC的对比 346
10.4 DB2 pureScale实例 347
10.4.1 实例背景 347
10.4.2 硬件配置 348
10.4.3 软件安装配置 351
10.4.4 客户应用测试 354
10.5 小结 358
第11章 solidDB高速缓存优化 360
11.1 什么是solidDB高速缓存 361
11.2 solidDB高速缓存DB2数据 364
11.3 solidDB高速缓存应用场合 364
11.4 solidDB高速缓存架构 365
11.5 电信行业应用案例 366
11.5.1 应用背景 366
11.5.2 使用solidDB高速缓存加速 367
11.6 小结 375
附录A 常用监控命令用法 377
附录B 缩略语释义 382
后记 389
参考文献 391
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13164110/viewspace-692422/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13164110/viewspace-692422/