前 言
在介绍本书前,我先讲讲我的数据库学习之路。我在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可以实现的,而开发人员却频繁地在数据库和应用程序之间进行切换,殊不知,在过程层(程序)和数据库层反复上下文切换交互会显著影响应用效率。我认为自己应该是国内写SQL水平比较高的人,呵呵。所以,首先要有一个清晰的方向和规划,然后有意识地去往这个方向努力。做好一个时期的人生规划非常重要,它是你努力的方向,因为积极的学习比被动的学习效率要高太多。
机遇偏爱于有准备的人。记得2001年初的时候我在网上看到一个帖子说要找一个人去安装DB2数据库,差旅报销,每天500元。那时我就喜出望外,因为需要有DB2认证才能去,而我那时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和V9的全部认证。我是国内第一个把DB2 V8认证全部通过的人,当然这也是巧合,因为2003年3月非典我被困在深圳,在网上看到DB2 V8认证从4月1日开始考,就在前一天报名注册,第二天把DB2 V8(新特性、高级DBA、应用开发、BI等所有认证)全部pass。
2004~2005年基本上是我最忙碌的两年。那个时候找我讲课的培训机构以及性能调优的客户非常多,一年我基本上天天在天上飞(当然学校导师那边我是有办法搞定的),培训机构找我讲课常常需要提前一个月预约时间。那时除了过年在家几天,其他时间都是在做培训和诊断调优等,足迹踏遍国内主要城市。那时我基本上是国内六大行开发中心和数据中心培训的指定老师,只要时间不冲突,还为北京银信科技、山东农信、广东农信、交行大集中IBP等项目做数据库技术顾问。那时年轻很有精力,我记得有一次是2004年9月,我白天上午9点为上海移动IT部门做AIX动态逻辑分区(DLPAR)的培训;17点打车前往扬州,20点到达扬州供电局协助他们进行电力负荷控制系统项目上线,彻夜奋战到凌晨3点半;然后连夜打的赶往上海,凌晨6点到达酒店;休息两小时,8点出发,准时出现在上海移动培训现场。那时我对报酬不太在意,我想的是拼命积累技术和客户资源,不断对技术学习、钻研、思考、提高,以及不断向上成长和孜孜不倦的探索,我就是这样在不断的学习、积累以及实践中成长起来的。
在很长一段时间内,我不断奔波于国内的各个城市,不计较出差、报酬,在我看来能够不断通过实践让自己成长是第一要义。而且去的客户现场越多、处理的问题越多,就越发现自己的不足,然后就拼命地学习,不断地积累、总结和思考,这样就进入了一个良性循环。至今我仍然怀念那种充实、紧张和激情的黄金年代。2004年和2005年,我分别在上海、北京注册了公司。一方面因为以独立咨询顾问的个人身份无法出具发票;另一方面,随着项目越做越大,尤其是很多银行的数据库架构和维护项目涉及合同金额也越来越大,需要签订合同,以公司的身份来签合同更加合适。当然这些年并非所有都是一帆风顺,也犯过一些重大错误。例如,我曾经在2002年5月1日把某机场的数据库调死,导致机场航班信息管理系统瘫痪;早期也曾经把证券系统因为调整而宕机。这些都对客户造成了重大影响,同时也让我思考总结自己的不足。也许这是成长必须要走的路。所以,经过这两次事件之后,我之后的调优基本上没有犯过错误。
2006年8月我获得“2006年中国首届杰出数据库工程师”称号,也算是对我这么多年学习数据库的一个总结吧。2007年开始,我专注于做一些大客户的运维,相应就减少了培训的次数。2008年我被建设银行以217万年薪聘请为资深技术专家来维护Oracle和Informix数据库。做技术而言,以一己之力能挣到年薪百万这常常是我感到自豪的地方,也是让我感觉到技术的魅力和自己这么多年对技术钻研的认可。
致学友
其实我讲我的技术之路,主要给大家一些参考,尤其对在校学生,我希望我的学习之路大家能够模仿(毕竟大师级的路是很难模仿的)。而且,这么多年,能取得这么一点小成绩,勤奋、努力和坚持一直是我看重的。因为有了这些,不至于机遇惠顾你时,你怅然若失。
在现在的很多年轻人身上,我以为恰恰缺少的就是这样的忘我与痴迷。在我熟悉的数据库技术领域,很多年轻人越来越早地将注意力集中在薪水和职位上,开始变得浮躁,而我想说的是,往往是那些将诸如高薪与职位忘怀的人反而能更快地提升。不经一番寒彻骨,安得梅花扑鼻香。这样的道理人人都懂,可是能够真正实施的人并不多。
所以,结合我的学习经验与感悟,有16个字送给进入这一领域的读者:去除浮躁,认真学习,不断积累,寻找机遇。
这些年我做数据库,相对于Oracle数据库而言,我深深感到DB2技术书籍的匮乏,所以我一直想写一套DB2方面的技术书籍。坦白地说,写书是我挣钱性价比最低的一种方式,但是我一直感觉到自己有义务和责任去写一些东西来给大家分享,也算是对自己10年DB2学习经验的一个总结吧!但是过去一直没有时间,直到今年奥运保障期间,有了一些时间,我才写了这套书。在这套书中,我把应用开发和系统管理剥离开,分成两条线来讲解:《DB2应用开发实战指导》、《循序渐进DB2》、《深入解析DB2》,《DB2数据库性能调整与优化》。其实关于DB2方面的技术还有很多我没有涉及,例如高可用性、数据库分区、HDAR、高级安全等,但是限于篇幅和时间,我无法做到全方位的解析。
关于本书
本书侧重在数据库的性能调优。而性能调优是一个系统工程:全面监控分析操作系统、I/O性能、内存、应用及数据库才能快速找到问题根源;深刻理解DB2的锁及并发机制、索引原理、数据库参数、优化器原理、SQL语句调优等内部机理才能有针对性地快速提出解决问题的方法;快照、db2pd、db2expln及事件监控器等等则是必须要熟练掌握的工具。本书正是覆盖了性能调优所需要的全部领域,并提供了大量的性能调优的实际案例。
本书系统性地总结了DB2数据库的性能调整的方法、流程、思路和保持系统良好性能的注意要点。最后,与读者分享了我10年积累的DB2性能调优案例和经验总结。本书所讲内容适用于DB2 V7、V8和V9.5的所有平台。
数据库学习之路
这里我对数据库学习做个总结:目前市场上虽然有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技术一般相对来说挣大钱的概率会大些。我们的时间精力是有限的,所以必须选择好方向然后努力为之。
古之成大事者,不唯有超世之才,亦唯有坚忍不拔之志也!最后用这句话与大家共勉。
致谢
本书在出版的过程中得到了清华大学出版社王军编辑的大力支持!这套DB2书籍从选题、审稿到出版无不得到他的热心帮助,在此致以深深的谢意!感谢我的好兄弟骆洪青和袁春光,他们审核了书中的大部分章节。同时也感谢中信银行的胡瑞娟、苏兰芳和我的师弟林春,他们审核了部分章节并从用户的角度给我提出了很多宝贵的建议!最后,谨以此书献给我心爱的妻子,遇到她是我人生最大的成就!
新庄
于2009年新年
DB2数据库性能调整和优化
