前 言
关于本书
这些年我做数据库,深深感到,相对于Oracle数据库而言,DB2技术书籍的匮乏,所以我一直想写一套DB2方面的技术书籍,我也一直感觉到自己有义务和责任去写一些东西来给大家分享,也算是对自己10年DB2学习、运用经验的总结吧!
目前数据库市场上虽然有Oracle、DB2、Informix、Sybase和SQL Server,但是Informix数据库已经被IBM收购,而Sybase数据库在技术和市场上正走向没落,那么剩下的其实就只有Oracle、DB2和SQL Server数据库了。SQL Server数据库非常好,但是很遗憾,它只能在Windows平台使用,所以如果你深入研究SQL Server数据库,那么大多数情况下你只能做到养家糊口,因为坦白地说,用SQL Sever数据库的大型企业通常是不多的。而国内做Oracle数据库的人太多了,如果你想在Oracle领域出人头地,难度极大。DB2数据库反而做的人不太多,物以稀为贵。DB2数据库被广泛应用在银行、电信、制造、零售、保险等行业,所以我强烈建议你学习DB2数据库,做IBM技术成功的概率会大一些。我们的时间和精力是有限的,所以必须选择好方向,然后去努力。
但是过去一直没有时间,直到2008年奥运保障期间,有了一些时间,我才写了这套书。在这套书中,我把应用开发和系统管理剥离开,分成两条线来讲解,包括循序渐进DB2、高级进阶DB2、DB2性能调整和优化这几大块。本书侧重在数据库的性能调优,而性能调优是一个系统工程,全面监控分析操作系统、I/O性能、内存、应用及数据库才能快速找到问题根源,深刻理解DB2的锁及并发机制、索引原理、数据库参数、优化器原理、SQL语句调优等内部机理才能有针对性地快速提出解决问题的方法,快照、db2pd、db2expln及事件监控器等等则是必须熟练掌握的工具。本书正是覆盖了性能调优所需要的全部领域,并提供了大量的性能调优的实际案例。本书系统性地总结了DB2数据库性能调整的方法、流程、思路以及保持系统良好性能的注意要点。最后与读者分享我10年来积累的DB2性能调优案例和经验总结。本书所讲内容适用于DB2 V7、V8、V9.5、V9.7的所有平台。
本书第1版的出版已有3年时间,这期间收到了很多宝贵的意见反馈,第1版的成书也稍显匆忙,回过头来看确实发现有些细节是值得修改的。
另外,IBM DB2 LUW这一数据库产品在这几年也发生了很大的变化。从版本上:DB2 V9.7成为主流版本,DB2 V10.1也已经于今年上半年发布,并且最新的FixPack已经发布到了版本2。技术上更是一日千里:监控技术、压缩技术、分区技术、并发控制、性能提升等等各个方面无一不是变化显著。尤其是purescale等创新型技术的出现,大大改变了原有的技术架构。当然这对DBA提出了更多新的要求。
同时在性能和调优方面DB2也有了不小改进和提升,并且增加了一些新的功能,在本次修订中也务求在这些方面有所体现。
本书的本次修订涉及的内容较多,合并了原有的第2和第3章为新的一章“操作系统及存储的性能调优”,对其他所有的章节也都做了大量的修改,有些章节的修改幅度很大,希望本次修订能给各位读者提供一些新的知识和经验。
关于数据库学习
“不经一番寒彻骨,安得梅花扑鼻香”,这样的道理人人都懂,可是能够真正实施的人并不多。在现在的很多年轻人身上,我以为恰恰缺少的就是这样的忘我与痴迷。在我熟悉的数据库技术领域,很多年轻人越来越早就将注意力集中在薪水和职位上,开始变得浮躁,而我想说的是,往往是那些将诸如高薪与职位忘怀的人反而能更快地抵达。
在这里,我想讲讲我的技术学习之路,主要是想给大家一些参考,尤其是对在校学生而言,我希望我的学习之路能给你以启迪。
我在1999年刚刚开始念硕士时就给自己确定了以后的发展方向,当时定了两个:网络和数据库技术。因为2000年时,网络特别火,能拥有CCNP、CCIE就特别牛,所以自己也考了CCNP证书,但是到后来我发现网络牵涉很多硬件层面的东西,对厂商的依赖特别强,而且面特别窄。所以慢慢就把这个方向放弃了。而我喜欢钻研,所以我就选择了数据库技术。在确认好数据库这个方向后,我深入系统地学习了数据库理论方方面面的知识,我还记得人大王珊教授的那本《数据库系统原理教程》,我读了几十遍,受益匪浅。在对数据库理论学习的同时,我也开始了对DB2和Oracle的深入学习。我是从1999年开始使用DB2 V5.2的,那时因为我导师做一个课题需要用到DB2数据库。那时市场上关于DB2方面的技术书籍几乎没有,互联网还不像现在这么发达,自己只能依靠查看DB2随机文档来学习。那时,我用自己兼职帮别人做一些小软件和课题赚的钱去考OCP认证和DB2认证。其实我认为考认证是一个很好的外界动力来促使自己学习,因为考试需要很大一笔花费,所以不想浪费钱的话就只能拼命地看书。那时读研究生有的是时间,所以在2000年我就通过了OCP 8i的认证,后来又陆续通过了DB2 V5.2的认证,通过这些认证大大增强了自己的自信。同时,我帮导师做应用程序的开发工作,那时用的是PB、Delphi等编程工具,在开发中我有意识地增强自己对SQL的学习,这对我后来的性能调优非常有帮助。因为很多时候在客户现场看到同样的一个操作,本来在数据库中利用函数或其他高级SQL也可以实现的,开发人员却频繁地在数据库和应用程序之间来回切换,殊不知,在过程层(程序)和数据库层反复上下文切换交互会显著影响应用效率。所以,我们首先要有清晰的方向和规划,然后有意识地朝这个方向去努力。做好一个时期的人生规划非常重要,它是你努力的方向,因为积极的学习比被动的学习效率要高太多。
机遇偏爱有准备的人,我记得2001年年初的时候,我在网上看到一个帖子说要找一个有DB2认证的人去安装DB2数据库,差旅报销,每天500元,我喜出望外,我有DB2系统管理、应用开发的认证,所以很快就通过了。但去了客户现场以后才发现不是安装,而是去给客户讲课,当时我就傻眼了,因为讲课远比安装配置难得多,而我之前没有讲过课。没办法了,只能前一天夜里看教材备课到凌晨5点,睡两个小时,8点半去讲课,就这样4天讲课,我每天都是休息3小时左右。还好自己毕竟使用过DB2,而且也通过了DB2认证,还是有基础的,这次讲课虽然不太成功,但是毕竟通过了,勉强可以打60分吧,没想到这次培训竟是我以后几年培训生涯的开始。经过这次讲课后,我也看到了自己的差距,知道仅仅拥有认证是不行的,因为客户问的很多问题书本上是没有的,还需要自己进一步钻研,因为平常看书时有些概念不太懂也不会去深入研究,但是讲课时你就必须把这些原理概念弄清楚,所以这需要对数据库更深入地进行学习。后来经过一些其他的渠道,IBM培训部知道我能讲DB2并且有相关证书,就找我讲DB2系列课程。所以从2001年开始我就经常作为IBM官方讲师讲DB2系列的所有课程,其中我感觉到讲课是个很好的学习过程,因为要讲清楚一些内容,就必须自己先精通,这对提升自己有很大的帮助,我把课堂上学员问的实际操作中的问题深入地进行研究,希望学员在我这里听讲3个小时要远远胜过自己看3个小时的书,要想给学生一杯水,那么老师至少应该准备一桶水。艰辛可想而知。所以,我在讲课准备过程中,精心准备实例,课堂下深入和学员交流。争取把一些难懂的概念用浅显易懂的例子来阐述,所以这在客观上促进了自己的学习。
随着培训的增多,也有一些客户找我去做一些实际的调优工作,我记得我第一次去客户现场调优是2001年去大连大通证券,当时主要解决锁等待问题。客户环境用到了AIX和CICS环境。当时虽然问题解决了,但自己心中还是感觉到比较虚,因为对AIX和CICS不了解,万一是这两个方面有问题,自己就没办法搞定了;同时认识到复杂系统的调整往往不是单方面的,需要具备全面的知识。所以经过这次事情后,我就在网上买了一个140的IBM工作站小机,自己安装AIX,开始学习AIX,在这个时期我一边学习,一边把AIX的认证全部过掉,我记得非常清楚,为了做HA的实验着实费了很大的功夫,因为那时无法搞到7133阵列,那时小型机不像今天这么普及。后来自己又学习了CICS、WebSphere、MQ和存储,所以我认为有目的的学习、有压力和有动力的学习效率是非常高的。就这样在我培训的过程中,我发现自己哪个方面薄弱并且这个方向有前途我就开始学习,不过那个时候我的技术主要以IBM为主。由于自己对培训比较用心以及客户的好评,找我做培训的国内培训机构开始多起来。感觉到这个时期自己的技术水平增长很快。
2002年11月,我参加首届“IBM DeveloperWorksLive! China 2002”大会并获得IBM首次在国内评选的“杰出软件技术专家”奖,在6名获奖者中名列第2。获得这个认证后客观上对我有了很大的帮助,因为认识我的人更多了,所以在2002至2003年是我技术提升最快的两年,在这两年我又陆续学习了HP-UX、WebSphere和MQ并通过了认证。其实我有时感觉到如果你把一门技术研究得非常深、非常透之后,这时你再去学习另一门技术就会非常轻松了,因为技术是相通的。我在学习完AIX后再去学习HP-UX就感觉非常轻松,同样在学习Oracle和DB2后再去学习Informix感觉到很容易。通过这种纵向的深入和横向的比较,你会思考它们的区别,你反而比较容易发现每一个产品的尺之所长和寸之所短。就拿DB2来说,它每次版本更新后的新特性我基本上在新版本没有出来之前就猜得差不多了,因为一是我是贴近真实用户的,了解他们的真实需求;二是自己一直在用,自己不断地在总结思考;三是别的数据库有,而DB2没有,那么在下个版本中它肯定会增加。所以相对来说,对新版本中新特性的学习就非常轻松了。就DB2而言,我想我应该是国内拥有DB2认证最多的人,我拥有DB2 V5.2、V7.1、V8.1和DB2 V9的全部认证。我应该是国内第一个把DB2 V8认证全部通过的人,当然这也是巧合,因为2003年3月非典原因我被困在深圳,在网上看到DB2 V8认证从4月1日开始考,就在前一天报名注册,第二天把DB2 V8所有认证(新特性、高级DBA、应用开发、BI等)通过。
2004至2005年是我最忙碌的两年,那个时候找我讲课的培训机构以及性能调优的客户非常多,一年我基本上天天在天上飞(当然学校导师那边我是有办法搞定的),培训机构找我讲课常常需要提前一个月的时间预约,那时除了过年在家待上几天,其他时间都是在做培训和诊断调优等,足迹踏遍国内主要城市,只要时间不冲突,那时我基本上是国内6大行开发中心和数据中心培训的指定老师,并为北京银信科技、山东农信、广东农信,交行大集中IBP等项目做数据库技术顾问。那时年轻很有精力,我记得有一次是2004年9月白天上午9点,我为上海移动IT部门做AIX动态逻辑分区(DLPAR)的培训;17点,打车前往扬州,20点,到达扬州供电局协助他们进行电力负荷控制系统项目上线,彻夜奋战到第二天凌晨3点半;然后连夜打的赶往上海,凌晨6点,到达酒店;休息两小时,8点出发,准时出现在上海移动培训现场。那时我对报酬不太在意,我想的是积累技术和客户资源。就这样不断地对技术进行学习、钻研、思考、提高,以及不断地向上成长和孜孜不倦的探索过程。我一步步成长起来,在很长一段时间内,我不断奔波于国内的各个城市,不计较出差、也不计较报酬,在我看来能够不断通过实践让自己成长才是第一要义。而且去的客户现场越多,处理的问题越多,就越发现自己的不足,然后再拼命地学习,不断地积累、总结和思考,这样就进入了一个良性循环,至今我仍然怀念那充实、紧张和充满激情的黄金年代。2004年和2005年,我分别在上海、北京注册了公司。一方面因为以独立咨询顾问的个人身份无法出具发票;另一方面,随着项目越做越大,尤其是很多银行的数据库架构和维护项目涉及合同金额也越来越大,需要签订合同,以公司的身份来签合同更加合适。当然这些年并非所有都是一帆风顺,也犯过一些重大错误。例如,我曾经在2002年5月1日把某机场的数据库调死,导致机场航班信息管理系统瘫痪。在早期也曾经把某证券系统因为调整而宕机,这些都对客户造成了重大影响,同时也让我思考总结自己的不足。也许这是成长必须要走的路,所以经过这两次事情之后,我之后的调优基本上没有犯过错误。
所以,结合我的学习经验与感悟,有16个字送给即将进入这一领域的读者:去除浮躁,认真学习,不断积累,寻找机遇。
古之成大事者,不唯有超世之才,亦唯有坚忍不拔之志也!
——最后用这句话与大家共勉
