Oracle DBA手记 3:数据库性能优化与内部原理解析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

Part1 DBA之路

人生就是如此

——冯春培感悟之路

biti_rainy(冯春培)

新年将至,我家冯一心快3个月了,老婆和我都因女儿的到来而有了很大的改变。最近在twitter上有人说我有了孩子以来似乎不那么淡定了。其实跟孩子无关,本来一直以来我尽量用平和的心态去对待人和事,但有人提醒不应这么快进入悟道的阶段,而应该再多些历练,毕竟人生路还长,在一个快速发展的公司中,又处于产业变革的时期,我也尝试一些改变,所谓淡定或者不淡定,皆在一念之间。

此刻2011年1月31日9∶30,同事们大多回家过年了,我也安静下来想些事情。回首过往,愈是多想,愈发觉得人生就是一种体验,本无所谓终极的意义或者目标,我们所需要做的,就是享受这个过程,或精彩,或幸福,或失落,或痛苦。唯一能让我们不会后悔的,恐怕就是我们曾经努力过、追求过。

随着时间流逝,我不断地在激情和平静之间来回游走。每个人的经历都是独特的,甚至是不可复制的。虽然偶尔我也将自己的感悟写下来,但却总是不愿去整理自己的人生路径,因常反思这意义何在?我自己的体验自己知道就罢了。不过,想着自己人生路径中的一些事,记录下来,权作为一段回忆吧。

童年

时常跟几个朋友聊起童年,似乎大家的童年生活都很窘迫,但其实当时是没这些感悟的。童年的乐趣与家庭经济环境没有必然联系,唯一困扰我的就是经常挨打,所以我最大的愿望就是赶紧长大,离开家,不挨打。

小时候其实从来不懂什么叫努力学习,也不懂如何努力,只记得几次因没做作业被惩罚的琐事。小学一年级,人生第一次参加正规期末考试,语文100,数学99,因班里有一个同学是双百分,回家我被罚跪。我无法知道当时母亲是基于什么样的考虑这么做,也无法理解,直到我大学毕业问起母亲这件事情,依然没有答案。但我想说的是,这件事情其实对我并没有什么人生重大影响和意义,小时候依然是凭点小聪明上学,在背着一大背篼红薯藤走在路上的时候手里也捧着金庸、梁羽生的小说。小学三年级语文老师介绍过《雪山飞狐》,从此我就迷上了武侠小说。甚至为了能比村子里排队等候的另一个人早点看一本武侠书,给别人打了两小时麦子。那时候凡是文字的东西,都让我充满了无穷的乐趣,每每躺在床上,武侠小说情节和人物就开始在头脑中如电影一样不断地回顾,几年下来近百本小说我都如数家珍,想想现在看完一本书两星期过后连主角名字都忘记了,不禁慨叹。

因为有点小聪明,学习成绩一直都还在班里能保持头名,但看小说、打牌赌钱这类习性却也是伴随着小学生活就开始的。但因为成绩当先,除了母亲之外,也就没太多人来计较。当然,小孩子背地里的那些动作,无论怎么检讨,都是徒劳的。家里没电视,全村也就几部,晚上大家都是8点左右正式去几户有电视的人家里报到,小孩子们通常都是周六晚上才能被批准去看电视。于是我就常常等母亲出门后再去另外一家,还要偷偷避开主人的视线,因为主人不愿意担纵容别人家小孩子在非周六的日子来看电视这个罪名。在电视剧结束那一刻,立即摸黑飞奔回家躺到床上。

童年的快乐,相当一部分还来自家乡的那条河,鱼虾螃蟹们是我们快乐的源泉。直到有一天,当我知道自己考上了县城里的重点中学初中部,我才意识到,这条河的乐趣,兴许就从此离我远去了,不免有些伤感。

中学

1991年8月30日,去县城报名上学前的一天,我在一户人家里玩拱猪,母亲来找几张报纸替我包东西,发现了我,狠狠给了我几个耳光,我默默地随母亲回了家。第二天,母亲挑着东西,我背着个背篼,上面放着家里最新的一件家具—— 一个大箱子,由于去县城方向的学生太多,我们只能望着每一趟塞满人的车而兴叹。沿着公路走了快10里地,没办法,我们上了一辆返空的车,才折回来去了县城,为此多花了5块钱。到了县城我没有了母亲的约束,但已没有什么兴趣再去找武侠小说看,也没有找人打牌赌博去。大家的中学生活都类似,简单而单纯,老师说什么我们就信什么。初三那年父亲减刑释放,到学校来找我,我没有太多特别的感觉,很陌生,匆匆别过。1994年上了本校高中,村子里的人说,我是一只脚踏进了大学。但高中阶段,对我来说《体坛周报》远比教科书重要,1996年为了看凌晨的亚洲杯足球(中国对沙特)比赛,我们几个人凑了20块钱去外面找了个宾馆呆了一晚,那份对足球和体育的狂热劲占据了我的高中生活。高中我永远是班上前4名,从未得过第一,第一的宝座都是别人轮流坐。老师们其实对我很好,但我却肆意挥洒、消耗自己的青春。家里人对我在外上学,应该说直接关注得极少,临近高考前一个月,不管家境如何,同学们的父母几乎都来学校看望自己的孩子,唯有我依然是一个人。至于填报志愿、未来如何选择,只有靠自己了,虽然我也不懂,但家里人更不懂。我们整个村子里的人都搞不清本科和专科是啥意思,因为新中国成立以来村子里只出过一个大学生,毕业做了老师,后来意外离世。村里人对读书唯一的目标就是改变自己“泥腿子”的命运。

高考前一个月我给家里写了封信,告诉家里我的饭菜票只能支持到7月初,希望他们再想想办法。1997年7月7日那天早上,村子里一个人来学校给我送来了50块钱,我怀揣着这些钱走进了考场。7月10日,看着同学们的家人来寝室帮忙收拾东西,我一个人感觉很凄凉。在学校要求离校的最后一天——7月14日,我把自己的东西搬了一部分到教学楼里的顶楼藏着,一部分委托司机替我带回街上一个熟人家,然后自己在县城晃悠了两天才回去。回家后我很伤心,母亲说本来要来学校的,但父亲不允许。回想到这些我眼角已经湿润,母亲对我是很严厉的,但其实还是非常爱我的,上中学的时候我就明白这一点,那时就很怨我父亲。高考成绩下来,比较糟糕,最后去了二本——北京信息工程学院。不过北京的新生活等待着我,我还是很期待。

成年

从小到大,我只离开过邻水县两次,一次是高一时候随邻班同学春游,去了大竹县竹海。另一次是高二时参加物理竞赛与物理老师一起去了成都的川大。所以,高考志愿我一所四川境内的学校都没填报,一方面跟小时候想远离家有关系(在家老挨打);另一方面,我也深深地感觉到四川是一个讲究吃喝玩乐的地方,日子过得很舒服安逸,如果现在不出去,将来恐怕再也没有机会走出去了。

在县城与5个同去北京的同学汇合后由一个北航的老校友带领,怀揣着期待和梦想,到了北京。北信很小,甚至比我的中学还小,一度很失落。以前在中学我都是在跟别人讨论问题中学习,基本都是别人来问我,我自己的自我驱动能力很差,而在这里的学习和中学完全不一样,大家都自己管自己,几乎不交流学习问题,上自习也是单独行动。于是我就跟玩游戏的一帮人混在了一起,Quake2伴随我度过了很多日日夜夜。可以说大学四年我的学业方面几乎没什么进展,倒是在生活中经历了一些事,让自己的生活态度(原则)趋于明确:

不以恶意揣测别人,不因别人的行为惩罚自己。

这个思考,最早要追溯到初中发生的一件事。某天,我在外婆家(与舅舅家相邻)打算下午返回,计划路过姨妈家留宿一晚。舅舅非要留我住一晚(那时舅舅和姨妈家有些别扭)。而我不想留下来,磨到天色渐暗,舅舅很生气,就说,那好吧,既然你实在要走,那就给你个火把照着走路好回家(舅舅家在山上,姨妈家在山脚,我家在坝下,来往都是几十里地步行)。我当时心里有些不大痛快:明明我可以去姨妈家,为何非说要带火把,还不是因你们两家的矛盾把我夹在中间嘛。下了山,到了姨妈家,我就把这事给说了。当时表姐(姨妈的女儿)就随口说了一句:“也许舅舅只是希望你留下来,并没有别的意思吧。”兴许这只是她很随意的一句话,但在我听来却有很大的震动。这样想,是截然不同的感受。正好是从姨妈家的人口中说出来,对我很有触动。从此我就暗下决心不再以恶意去揣度别人。都快二十年过去了,表姐恐怕早忘记当初这句话了,但我却记忆犹新,这句话带来的感悟让我在成长的过程中受益颇多,不但因此和人少了很多误会,更是让自己的心胸开阔起来,宽容别人,也让自己对很多事看得开了。同样,不因别人的行为惩罚自己,也是善待自己的一个好办法。经常,我们可能因朋友或不相干的人的一些错误做法或言论而懊恼,让自己很不开心,甚至耿耿于怀。但对方却浑然不觉,甚至即使觉察到了也不以为然,这还没算那些刻意而为的人。如此情景下让自己不开心,除了伤害自己外,一点意义都没有。所以呢,看开些,不要苛求别人都和自己保持一致,更不要奢望别人能懂得欣赏自己。一个人,多些自立,不是因了别人的看法而活着,这样才活得精彩。

学习与工作

一如石康一部小说名一样,晃晃悠悠的,我就到了毕业关口。这时候,为了生计的缘故,搞了些Power Builder Oracle数据库的开发,做做兼职,也为自己找工作储备点技能。后来工作落到了邮电数据网络中心,很快该中心更名为中国电信系统集成有限公司,是一家具有国企性质的企业。我被分配到软件开发部门,这里北邮和工大的人占了主流。因为开发中使用到了Pro*c和Oracle,我也由此和Oracle结下了缘分。在一位同事的推荐下我上了ITPUB论坛,正是这个论坛,帮助我走进了DBA这个圈子。那时候大家都不太懂数据库,于是我就多学习了一些SQL优化的技能来解决工作中的实际问题,同时也更多地投入精力到研究数据库优化中。那时每天除了早上从住处到公司路上这20 分钟可见天日之外,几乎都是在工作或者泡在论坛上。因为论坛让我找回了中学阶段那种讨论学习的氛围,我也很愿意帮助别人解决问题,我不再孤独。

2001年,互联网蓬勃发展,我们也在论坛里的学习交流中成长。经过一年多的时间,我越来越感觉到现有工作环境能提供的空间非常有限,想到了离职。一生出这个念头,我愈发觉得在公司待着浑身不自在,于是就提出了离职。部门负责人希望我留下来,我问了一句话:你觉得我在这里未来两年内有多少机会可以向上走?他想了一小会儿,告诉我,没有。因为机会基本都被北邮和工大的人拿去了。于是他也没再继续挽留,很快我也就离开了。这时我想物色一个专门的DBA的工作,因为越来越觉得Oracle数据库博大精深,需要我投入更多精力去研究。但我只有一年多的工作经验,且无专职经验,很难深入钻研。一个偶然的机会,我去了Lecco,一家香港公司。主要是技术负责人在网上看见了我对他们产品的评论,然后有过几次E-mail沟通,在北京面谈之后约了2002年底去珠海,Lecco将在那里成立一个小研发中心。

谈好后8月份我就回家待了一个月,9月份到深圳一个同学处住着,每天都上论坛,学习、指导别人解决问题。其实我没有什么测试和练习环境,就是通过指导别人来辅助完成自己的技术判断和操作演练,在不到两年的时间里技术板块我发帖、回帖总数达到15000。也就是这个原因,那时浏览过所有技术相关的帖子,对大家遇到的各种问题都有印象。11月份到了珠海,工作几乎都是与DB优化相关的内容,感谢Lecco给了我很多自由的时间去探索技术问题。那时对于技术的痴迷到了什么程度呢,每天只要一有空我脑子里想的几乎都是技术问题。记得有次在网上看到一个人的疑问,到了家躺在床上我还在想,快零点了我终于想通了,这时有一种需要与人分享的冲动,于是我跑到外面的网吧畅快淋漓地将思路写了下来并发在论坛上,然后心满意足地回去睡觉了。当然,这段时间也因为生活的单调,使得我必须找自己感兴趣且使自己能成长的事情去做。学习技术同时满足了这两个需求。

有朋友问我一个人在珠海是否感觉孤苦伶仃,实际倒没这么糟糕。因为从中学在外念书开始,我都是独立解决自己的事情。母亲不是一个能很好地表达关爱的人,也不善于沟通,所以我的思想变化基本都来自自己身处的朋友圈子以及自己的思考。虽然父亲1993年就回家了,但在家庭经济方面并未承担其应有的责任,所以我上大学几年是有负债的。后来有段时间,周末去广州做一些Oracle方面的技术培训,那段时间每周五下班坐车去广州,上课完毕坐车赶回珠海时一般都是周日晚上10点,很疲惫。在终于将家里债务解决掉的那个月,我心里的一块石头算是落了地。后来因为公司产品的市场方向与香港同事的理念之间不一致,他们不懂大陆的环境,我们想一起开发大陆市场得不到支持,渐渐地彼此都觉得合作下去没盼头,于是我在2003年底离开珠海回了北京。

在北京的几个月,是我技术成长的黄金时期,那时我跟盖国强(Eygle)和叶梁(Coolyl)合租在一起,共同的技术爱好让我们彼此加速成长。我平日里也靠着做一些技术培训和替别人现场解决问题谋生,日子倒也过得逍遥自在。当时曾经想招人一起成立公司做技术服务,可惜其他人工作环境太优越不愿意出来,也就作罢。其实看看Eygle的恩墨科技的2010年,做得有模有样;当时我若能坚持下来或许是另一番光景。记得是在2004年3月,突然接到鲁国良的电话,让我去杭州阿里巴巴看看。我与他也是网上认识,在杭州见过一面,技术上是惺惺相惜。盛情难却,就到了杭州。因为以前在国企呆过,这一行的经历让我印象深刻——阿里有着完全不一样的风格,于是我决定离开北京到杭州。不久之后的3月16号,我就到阿里巴巴报到了。

从来没有专职做过DBA,却以圈内知名DBA的身份进入了这家公司,我的运气很好。这几年借着公司业务的不断发展,我们的设备从PC Server到高端小型机、存储,再回归PC Server,数据库从Oracle到MySQL,公司技术架构也不断演进,我本人对数据库、操作系统、主机、存储都有涉猎。有段时间我跟陈吉平(piner)合租在一起,我们俩探讨技术问题非常狂热。那个时期,包括和鲁国良、汪海等人,我们碰到一起必然是持续的技术争论。还记得有次在上海和诸超、陈智生等人吃饭,谈技术足足谈了5个小时,直到老板关门,有些在座的其他朋友估计都郁闷坏了。这几年里我的知识和技能飞速增长,同时也赢得了公司的认可。随着阿里巴巴集团的DBA数量从2004年的几个人到2009年底的70多人,我的角色从开发DBA到数据架构师,从产品DBA到系统架构师一路演变。

2010年我的职业生涯有一个变化,就是切入到数据仓库领域,对分布式存储和计算有了研究。同时还带了安全产品相关的团队。接手到两支团队,这对我来说也是一个考验。因为过去带数据库团队的时候是我自己一手从头做起的,人和事都按计划走得稳健,团队里成长了一批优秀的技术骨干(像张瑞、简朝阳、童家旺、陈栋、罗春等),根本不用我操太多心,每年只要想想几件要做的重要事情就可以了。但现在情况不一样了,大家的风格差异比较大,团队也不那么稳定(核心骨干手里有几家薪资翻倍的Offer),技术和业务目标都有待梳理。但好在大家对我也有期望,希望能一起真正做成些事情。这一年走下来,团队规模翻番,这带来了管理的压力,于是火线提拔一些骨干,经过磨合,到了年底,整体状态不错。虽然面对2011年我们想要做的事情,团队能力还有欠缺,但是我已经可以比较放心地按照计划一步步达成目标了。

一路走来,越来越感觉到心态对于一个人的重要性:我们是否有开放的心态去接纳其他人以及他们的意见,我们是否能包容其他人,是决定我们个人能走到什么高度的重要因素。

除了我们自身外,我们还需要去把握技术大趋势、公司发展的大趋势,适时地做好准备,迎接变化。因为我们自身的提高最终是需要在公司体现出具体价值的,这样公司才能给予我们相应的回报。有些技术人员很偏执,事情越做越偏离公司的需要,这是很危险的。也许当初自己做的事情是公司的核心优势,后来却成了公司的核心障碍。所以如何顺应变迁,如何将小我融于外界的大我,是一个自我认识和蜕变的过程。伴随这个过程,需要我们影响到更多的人,集结众人的力量,才能解决更大的问题,体现更大的价值,一个人的力量毕竟有限。

其实从2007年开始,我已经深感自己成长的瓶颈,一方面要寻求自己的突破,另一方面也在加紧培养接班人。在公司内部协助推行了几件事情:水平分库解决方案,Oracle redo log解析的同步方案,廉价存储的搭建方案。其实这些成不成是一回事,重要的是我们去挑战了自己的天花板,做了一些自己以前不敢做的事情。也很高兴看到一些团队成员的变化:简朝阳是2006年的本科毕业生,3年时间就赢得了信任,还出版了一本受读者欢迎的数据库好书;张瑞2005年年初来公司的时候底子很弱,到2009年已经发生了质的变化,他的技术博客也日益有看头;陈栋也挑起了带团队的大梁。正因为这些骨干成员的成长,2009年7月我离开B2B到支付宝的时候,只是在周五晚上跟大家吃饭时宣布了这个决定,周一就到了支付宝,没有任何工作的交接,团队就平稳过渡了。与团队骨干成员水乳交融的这种工作状态,让我日子过得很舒适,但我是一个害怕沉溺于舒适区的人,一直在想自己是不是就这么进入平稳期了?这也是我离开B2B的根本原因。换个新的环境或者领域,多一些尝试,人生就是要多体验。

到了支付宝的新环境,带着陌生的队伍,更需要调整好心态,不能拿过去的人来对比现在的人。因为,无论团队有着什么样的问题,现在都是我的问题。我必须去帮助骨干成员成长,而骨干成员能去影响团队的其他成员。除了解决业务的问题,我还需要关注大家的技术目标——数据仓库从Oracle RAC到greenplum,再到hadoop hive,以及自行研发细分领域的分布式存储和计算以解决特定的问题。既要解决公司的问题,也要解决团队成员的技能提高问题。

体验与感悟

其实不论做什么,大家的心路历程都有很相似的地方。但只看别人讲,没这个经历,却只能是似乎明白道理而无法执行,这也是“纸上得来终觉浅”的原因。我也试图整理一些体验或者感悟出来,与大家分享,希望能找到共鸣。

个人能力成长三阶段

(1)学习,学以致用。

(2)勇气与责任,突破自我。

(3)眼光和判断,影响他人突破自我。

学习,学以致用,不断反复,量变带来的质变会让自己感受到不断的提高。虽然这个时期也有平台期,但在这个时期坚持就是胜利。到了某一个阶段,尤其在一个平台期待久了之后,受现实及自我的惯性约束,自己可能给自己装了一个天花板,很难突破这个顶了。这个时候再采用原来的方法,发现可能长达三年五年(这个时间因人而异)自己都没有因量而发生质的变化,于是接受现实。这个时期如果有勇气承担责任,挑战自我,会突破自己以为的天花板,给予自己信心。当你有所突破,赢得信心,相信自己之后,要继续向上,发现你必须带动其他人与你一起前进,否则一个人无法做那么多事。但其他人也有瓶颈和平台,他们如果长久地停留在平台期,你也就无法达到更高的目标。于是得在正确判断当前团队的能力基础上,找准方向和目标,影响其他人勇于承担责任,突破自我。由此进入不断反复的良性循环,直到公司所处行业发展到成熟期,那就是整个公司需要突破了。

胸怀、包容,是自我成长过程中能影响和带动他人的最根本因素,宽广的胸怀既能接纳他人,也能成就自己。学会包容本质上是一种小我到大我的过程。

宽容

宽容是家人、亲戚朋友、同事、陌生人之间相处愉快的基础。其实离我们越近的人,我们对其要求往往越低;但因为太近而放大了某些局部,让我们反而更苛求。我对宽容有这样几个理解。

(1)不理解不宽容。

现实中有太多这样的例子,出镜率最高的婆媳矛盾就是最简单的不理解不宽容产生的后果。

(2)理解而宽容。

夫妻之间要和谐相处,保持家庭愉快,最重要的是理解和宽容。

(3)不理解也宽容。

于朋友之间,我们通常发现,只要是朋友,就算不认同,但也比较宽容。

(4)当宽容则宽容。

同事之间、上下级之间,当宽容的时候要宽容,不该宽容的时候则该严厉,奖惩分明,进退有度。宽容最重要的是能调整自己的心情,又要警惕这可能是对别人的放纵。若能在生活中的任何场合做到当宽容则宽容,那是一种境界。

团队的成长是管理者最大的成功

团队只有不断地在专业领域的深度和广度拓展,才能在规模不断扩展的情况下让大家拥有激情、充满希望。团队的脊梁,必须承担着团队发展的责任,不断地提高自己的同时教会别人,否则就无形中抑制了后来者的空间,人才梯队发展受阻。团队成长空间,实质上是公司发展空间的反映,或超前或滞后,但长期来看是协调的。团队能与公司共发展,个人能与团队共进步实在是幸事。保持思考,尝试新东西,能带来团队技术氛围的活跃。要通过努力,拿到阶段性的结果,给自己及团队增强信心。主管应保持鼓励员工承担风险、尝试创新并提供相应的支持。

持续地保持不断尝试和进取的心态,团队的专业序列才能健康成长,否则高层级专业人才无法往上走,无形中阻碍了后来者前进的道路,久而久之团队会失去活力。

周期性地审视自己及团队,是否一直在重复过去的工作并且效率无明显改进,是否没有新的内容纳入。若没有变化可拥抱,要创造变化去拥抱。

管理者的成长是团队最大的幸运

前面我们主要讲管理者如何带动团队成长,但是随着团队能力的提高,管理者可能成为瓶颈,这个时候就麻烦了。要么大家都很憋屈、逐渐失去动力,要么就是有瓶颈的人得离开了。其实像上海某游戏公司就有这样的问题。管理者自身的问题,使得团队成长没有体系、难以形成合力,做事情不容易。试图解决问题的方法都是拿钱去砸,但是砸进来又留不住人,因为做事情难啊。所以他们往往用翻番的薪水才能挖走我们这边不太得志的同学,而这些同学去了也难以做成事情。因为我们这边最强的是团队整体能力,而不是某个人。要培养某个角色的人也不是困难的事情,所以人走了对我们也不是致命的伤害。这种能力的形成,是一个长期积累的过程。所以团队负责人能保持进取的心态并不断往前走,是团队的幸运。

做事方法

现在我也有一些自己做事的方法和标准,尽量理清个人、团队、公司的利益关系,使得我们做的事情在这三个方向上都是正向贡献的,这样才可持续。判断事情的标准则很简单,问三个问题:客户是谁?问题是什么?价值是什么?很多时候我们的人做很多事情,很辛苦很累,做完却没有人认可,关键就是我们没找准客户。也有很多技术人员天生只为解决问题存在,却忽略了解决问题给公司带来的价值是什么。

在做事情的时候,我们必须关注过程、关注人,没有良好的过程和人的成长,结果是不可持续的。有的人只强调结果,也许可以在短期呈现出一个漂亮的结果,然后晋升甚至调走,接手的人就痛苦了,这也是我们常见的现象。但若大家想要在一个方向干成大事,就不能这样做。要干成大事,必须长短目标结合。短期目标给公司带来直观的业绩,也给团队带来成就感,可以持续地做下去。但短期目标要符合长期方向,这样我们积累几年才有成果。同时在短期目标中,也需要有所抉择,对于客户最痛的事情,我们集中兵力快速解决,这样在价值感上才能有所增加。当然若我们常年在解决客户最痛的问题,只能说明我们缺乏规划,与魏文王问扁鹊三兄弟谁医术高明的情况一样。但是把握这种平衡是一件困难的事情,做事情最难的就是平衡,如果目标方向单一,再难,做起来也会比较顺利。

工作了这些年,我其实也没想好自己40岁时的归属在哪里,到底做什么。但我也会尽量总结自己的一些方法,因为要带人做事,必须有一个简单可传递的方法。这可能是做事方式,可能是思维方式。让我们厘清价值,有效协作,能思辨地执行,这才是能自我完善的有战斗力的团队。所谓文化、价值观,不就是融合在这些事情之中吗?

(冯春培是Oracle的第100位ACE,图为2007年Oracle OpenWorld大会上,其接受颁奖。)