一直以来都很想写一篇自己的成长,可每每替自己找各种理由,静不下心来去完成这件事。之所以今天下午可坐下来写以下的文字,完全是因为这段时间杭州的天气忽冷忽热的,晚上踢被子,有点小感冒,不能跟伙伴们出去踢球。好了,不啰嗦了,开始直奔主题.
  2005年12月那几天,广州特别的冷,晚上我在一同学在广州租的房子里一起住,由于床太窄,再说寄人篱下,我就睡地上了,可自己来广州带的被子就只有一条,而且也不怎么厚,第一天晚上被冻醒,之后再也睡不着了...
  第二天一大早,就去暨南大学校本部计算机中心上网发一封简历,是投给网易的,具体投的什么职位现在也记不清了,总之在那个时候,我对自己还没有清淅的职业规划,不知道自己喜欢做什么?
  到了晚上就是网易在中山大学的宣讲会,我和暨大几个同学一起去的。在路上,碰到一个暨大的研究生,他已经拿到华为的offer,但他今晚也想去网易的宣讲会晃晃,看看是不是有更好的钱景?来到宣讲会会场,网易的招聘人员发给我一个袋子,里面装有一个印有网易网游人物的笔记本,一张网易的网游光盘,还有一支圆珠笔.从这里基本上也可以大体上猜到网易今年主要招什么人呢?因为我对网络游戏不太感兴趣,所以在接下来的宣讲会上基本上都在打磕睡,呵呵:)
  第二天下午2点是阿里巴巴在华南理工大学的校园宣讲会,跟我一起住的小阚因为要到深圳一家公司参加复试,所以不能兼顾,只好舍弃了,这也成了他后来的一个遗憾,因为他在深圳的复试失败了。人生有许许多的可能,有些时候,除了实力之外,也要靠点运气.
  在宣讲会发的手册上,我看到了一个职位 ORACLE DBA,不知怎的,心里立刻对它产生好感,有些人把找工作比作谈恋爱,这句话说得还真有点道理。但看了一下这个职位的要求,心里七上八下了好一阵。对一个即将走出大学校园的我,我不能满足这个岗位要求的任何专业技能。宣讲会结束后,马上就是阿里巴巴的笔试,所有岗位的笔试题都是一样的,考题也有点高考大综合的味道,什么样的题都有。不过考完过后,我敢肯定我能进入面试环节.
  当天晚上,首先接到网易第二天9点的笔试通知,看来我通过海选了,这点又增强了我的自信心,尽管网易今年招的岗位我没有一个喜欢的,我还是决定去参加笔试。接着又收到阿里的面试通知,好在我的面试时间安排在第二天中午一点。那天晚上,小阚在深圳继续参加他的复试,所以我可以睡床了,呵呵。不过,那晚由于太兴奋,还是没有睡着。
  网易的笔试要考两个小时,但我只做了一个小时就出来了,然后匆匆赶回暨大本部换西装,那天天气真冷,由于没有时间吃中饭,体会到了人生第一次饥寒交迫,那种感觉至今记忆尤新。赶到的阿里的面试酒店的时候,还差半小时到我面试。利用那段时间,填写了一份对我来说非常重要的表格,在应聘的职位那栏,我勇敢的写下了ORACLE DBA。
  阿里巴巴要进行两轮面试,但每轮面试都像马拉松一样漫长,面试官是一个一个问题不断的问着,我认真回答着他的每一个问题,每每有闪光点,他总会迅速的在纸上记下。第一轮面试后,我已经说得口干舌燥,他叫我在外面休息一下,我知道我已经闯过第一轮了。
  在休息的时候,我认识了帮阿里招聘的华南理工的同学:叶,我们谈得很开心,完全忘记了我还有第二轮面试。我们俩的性格实在是很接近,所以很容易可以找到很多共同的话题。叶,很有才华,特别是文采,高考他报考的是北大,后来差几分来到华工。我,因为受了家人的影响,临时改变报考的中山大学,改为报考中国政法大学法律系,结果处在分数线上的我被刷掉了,然后我被调剂到暨南大学计算机科学与技术专业。我的大学不是我选的,我的专业也不是我选的。也许因为我们有着相似的过去,我们俩成了现代版的俞伯牙与钟子期,有种相见恨晚的感觉。我们的欢声笑语引来了阿里巴巴人力资源部**的注意,她们不断的过来提醒我,你还有第二轮面试,你准备一下吧。我总是说,不用准备了,呵呵...接着她们与我们一起打成了一片...
  尽管我刚才的不用准备了显得有点狂妄,但我还是顺利的通过第二轮面试,拿到了阿里巴巴的offer,我终于跨进了DBA的门槛。
  2006年3月3日,我与另外一个同学(JAVA工程师)一起来到阿里实习。报到的时候,我们被告知要签定一份保密协议,而公司名称却是淘宝(中国)软件有限公司,尽管当时心里有点不高兴,但仍然在上面签上了我们的小名.当天晚上,我们住进了公司安排的招待所里。
  接下来的两天是周末,我们在住的附近到处逛,也徒步从我们住的地方走去西湖,并围着西湖走了半圈,接着又走回来。也许是因为第一次来到人间天堂-杭州,我们对她的一切都比较好奇,所以很有耐心与毅力去了解她的点点滴滴。杭州的空气很清新,特别下雨后,猛吸一口,那种感觉有点甘甜。这里超市很少,要走很远才能到大超市,除此之外,就是非常小的便利店了。这里自行车很多,而且车速很快,常常从我的身边嗖的一声就过去了。
终于到了星期一,我们俩到淘宝报到。淘宝人力资源部的人立刻对我们进行了入职的简单的培训,也在那时,我们听说了我们在要接下来的三天里学会一样淘宝人的绝技---倒立,因为它的独一无二,我开始对这间公司的文化产生好奇。给我们培训的人叫骆冰,骆冰不是真名,是花名,在淘宝同事之间平时称呼都是用花名的,不用真名。花名这个东西恐怕也只有淘宝才有,这也是淘宝有别于中国其它公司非常有意思的地方。
  在简单的培训完后,骆冰带着我去见了我的主管-七公,以及我们团队的人拖雷,叶开,松溪,其中松溪是公司为我指定的师傅。师傅帮我领来电脑,跟我一起配置,给我讲一些关于公司的情况,还有如何阅读电子文档。接下来的三天便是百年淘宝的培训,这个培训并不是技术培训,主要是讲解公司的组织架构,请各个部门的负责人来介绍一下每个部门的情况,另外最重要的就是破冰,通过一些比较好玩的游戏使相互陌生的心交织在一起,从此我不再孤单。
  三天的愉快生活很快就结束了,我要开始“工作”了。那个时候,我的“工作”就是看书,因为我实在是干不了活,可以说是什么都干不了。对于什么都不懂的我,师傅首先传给我许多关于ORACLE的online documents。在实习的一个半月时间里,几乎每天都在书里度过,我每天看全英文文档都要上百页以上。那段时间,我住在蒋村,是杭州郊区的农民房,那里虽然离公司远一点,但房间条件不错,主要是房租费便宜,每天晚上回到住的地方,我都觉得特别的累,因为那里没有电视机,也没有什么其它的娱乐项目,所以很早就睡了。就这样每天的两点生活,蒋村,公司,公交车把我与这两点紧紧的联系在了一起,我成为了这个城市运动的一部份。
  ORACLE的理论虽然有很多,很细,有些地方也比较难,但工科出生的我,再加上大学做了很多项目,在ACM集训队的历练,在软件理论,数据结构,编译原理方面积累了很多经验,因此理解ORACLE的许多工作原理都还是比较容易的。如鱼得水,那就是我当时的感觉,吸收ORACLE的知识特别快,再加上我对ORACLE的兴趣,每天都看那么多页书都不会觉得烦。
  在这段时间,七公基本每个星期都会主动来找我,问我有什么问题没?但更多的时候,他是来直接问我问题的,而且问我的基本上都是一些实际的应用问题,那些问题是从itpub.net随机选的,不过能够回答上他提的问题,在当时我觉得是很有成就感的事。刚开始时,因为涉猎的知识还不够,常常会对ORACLE实现原理进行猜测,可很多时候都是错的,但我从来都没有放弃过。其实当你对一样东西不懂时,能够勇敢的去猜是对的,但更重要的是,要利用工具去破解这些疑惑,那这样的话就更进一步了,变被动为主动,显得更加积极了。每每我向七公提出我的想法时,他就会上Google,itpub用相关的关键字去搜一下,然后叫我看搜出来的那些文章,看了这些文章后,那些疑惑基本上都解决了。充分利用搜索引擎去获得你想要的资源,那是我以后遇到问题而自己无法解决时首先想到的途径。
  很快45天的实习时间就要结束了,我已经看完5本电子书,心中觉得挺充实的。带着这份充实,我离开了淘宝,坐上了回广州的火车,回到了暨南大学,享受我最后的大学生活。
  2006年7月3日,我来到阿里正式报到,报到的时候,是兴奋的,面对人生的第一份正式职业,我想任何人都会比较激动,不管工作好不好,也不管你是否喜欢这份工作,心中始终无法平静下来。但与此同时,心中又有一份挥之不去的失落感,我的学生生活彻底结束了,再见了,我的大学,再见了,我的伙伴。
  签完劳动合同后,随即离开阿里巴巴所在的创业大厦,来到了淘宝,这里才属于我,我才属于这里。实习结束离开,匆匆已有两个月的时间,但这里的一切还是那样的熟悉,那样的亲切。见到了主管,见到了我的同事,从此,我又可以与你们一起并肩作战。
  离开的这两个月,在学校都没怎么碰ORACLE,好多知识都搞忘了,比如说给一张表添加一个新列的语法都记不住了,讲出去都会被人笑话,还是在这里不要透露太多,呵呵。其实最令我头痛的还是Linux的各种命令,因为我们的服务器基本上都是装的是Linux操作系统,日常管理工作都是通过远程连接,用命令对数据库进行管理的,可我当时连mount命令也不会,刚记下的linux命令,一转眼的功夫又忘了,真令人抓狂!还好当时有师傅的悉心指导,师傅带着我从装Linux操作系统开始,学会分区,向我演示了一些常用的linux命令,这让我一步步的走进另一个操作系统的世界,从视窗界面到命令界面,从刚开始的抵触,到慢慢的接受,这需要一个过程,也需要时间。
  在试用期期间,我也有KPI考核,看着一条条的目标,每个目标都有很详细的达标要求,自此我也感受到了从未有过的压力,这种压力比大学期末考试时的压力还大,那种应试考试,我能确定我能及格,尽管我不能确定能拿高分。既然制定了目标,那么就按照目标做吧。我每天要必须做的两件事:第一,保证两个小时以上的看oracle concept文档时间;第二,上oracle的论坛网站 [url]www.itpub.net[/url],看别人提出的问题,以及别人的回答,如果自己不懂的,也要去提问。另外还有一个项目:做一个从来没有人做过的功能测试数据,这些数据首先根据测试部门的要求,首先把它做出来,满足一定的功能需用求,然后这些数据还要可恢复,就是可重复使用的意思,这样可节约测试工程师造各种测试数据的时间。我也觉得这个项目对于测试组的意义,但项目的难点存在以下的几方面:一是各种功能需求不明确,二是各种功能的描述不准确,三是我对业务不熟悉,四是大家都不知道以怎样的流程来确定这个项目的质量,五是大家对这个项目的重视程度刚开始时也不够高,六是网站的功能业务逻辑会发生变化,七是我的ORACLE知识还很少。从后来项目的进展来看,以上的难点都对项目的顺利进行产生了极大的影响,有些直接导致整个项目重做,从头再来,对我来说,虽不是毁灰性的打击,但痛苦程度也到达了我的极限。尽管如此,我还是坚持了下来,这个项目持续了两个季度,最终坎坷的完成了。
在学习ORACLE理论知识的道路上,我也继续前行。当时,我基本上一个星期看一本书,每看一本书,我都会做大量的笔记和实验。其余时间,都在ITPUB上看网友的问题和一些牛人的回答,这种集思广义的学习方法也为自己在ORACLE的迅速成长提供了不小的帮助。一个多月后,oracle concept档已看得差不多了,我开始对oracle internal的东西产生浓厚的兴趣,这些知识itpub上也有许多网友经常问。这时七公发给了我许多关于这方面的文档,看完一篇,对ORACLE的理解又更进一步,有时不明白的,跟七公讨论一下,顿时觉得豁然开朗,那时已经有点面的感觉了。oracle internal的东西跟数据结构很有关系,如果想了解这方面的朋友,那得先好好学一下这门课。其次还需要有系统的思维,oracle的很多东西不是独立的,首先在oracle内部就不独立,就像一个参数的变化,也会影响到ORACLE其它一些东西,其次ORACLE紧紧的跟操作系统绑在了一起,他们是一体的,不是分散的,像兄弟一样亲密。
  光有理论还不行,还需要通过实实在在的工作去应用理论。通过管理开发库与测试库,处理涉及开发库与测试库的各种事务,对数据库的日常操作,对操作系统的日常管理慢慢都熟悉起来。每遇到一个问题,都是一次成长的机会,通过请教同事,或者通过搜索引擎去查找解决问题的方法,解决完问题后,并把这次事故用文档的方式记录下来。刚开始时,我并不太想写文档的,但在piner强大的压力之下,开个玩笑,其实是piner的文档写得太好,心有不甘,没有理由比他差的,我也可以写得很好。正是在piner的鼓励下,我不断的完善着开发库的文档,到现在,文档已经非常全了。
  后来遇到了数据迁移的项目,我有机会接触到光纤交换机,CX-300,CX-500,在piner的培训下,这些东西很快就会了,通过整个项目的实施,对SAN架构有了更加清晰的认识。其实这些东西并不是那么难的,每种东西就那么一两个关键点,你把那点搞懂了,对这个产品也就明白了。
  不多久又遇到了我们的生产库磁盘柜备份变慢的问题,写速度超级慢,读勉强还可以,我接到了诊断此问题的任务。由于大家在这方面都没有什么经验,只能不断的猜测与尝试,刚开始时我们怀疑是RAID卡的插槽的问题,因为那几个插槽是共享的I/O总线,以为通过更换RAID卡插槽可以提高性能,把服务器搬上搬下,当时只有我一个人,连续几个回合,我就吃不消了,手割伤了都不知道,最终这些努力都失败了,因为这不是问题的真正原因。后来联系了DELL的工程师,他们也搞不清原因,来抱着试试的态度,升级了RAID卡的BIOS,并改了一下参数,问题马上就神奇般的解决了。但我问他们原因,他们也讲不清楚,为什么?通过此事,我明白一个道理,不要对硬件厂商的售后服务能力期望太高,但也不能太低,有时他们也可以解决问题的,尽管他们不知道为什么?呵呵。但没过一个星期,问题又再次出现,这次,我没有让问题的真正原因溜走,进入raid卡的配置界面,发现一些参数自动发生了变化,我很快意识到是硬件的变化导致相应的管理软件的参数发生变化,联系厂家,更换了硬件,问题解决。至于DELL的工程师为什么那次改了一下参数后,性能又好了,那应该是因为RAID卡还没有坏彻底吧,还能够勉强正常工作!
  总之,问题是不断的出现,通过自己的努力,不断的去解决,自己解决问题的能力也在不断的提高。由于自己的出色表现,再加上工作上需要,我开始进入项目。
  2007年即将结束,总得写一篇文章给自己一个交待.打开blog的编辑页面,却又不知道从何写起.这一年发生的事情太多,但还是以我的成长为主线,来回顾2007年.
  2007年的第二个季度,我开始独立承担CTU重构项目.原来的CTU系统一直存在着或多或少的问题,使数据库一直处于不太稳定的状态,机器负载很容易升得很高.当接手这个项目的时候,首先把statpack报表sql部份非常仔细认真的看了好几遍,把主要的问题都一一列举出来,并在项目评审设计阶段,反馈给开发工程师,大家一同商量对策!其实在最初的重构设计方案中,许多数据库性能问题仍然没有解决,经过与设计人员的反复沟通,优化重构设计方案,主要是相关的表结构设计,这些改进,优化了程序实现的方式,大大提高了程序性能,并解决了数据库的性能与可靠性问题.所有这一切在2007-6-14项目发布后,得到了验证.逻辑读,物理读,机器负载都大大下降.从发布到现在,CTU的数据库一直健康稳定的运行着,再也没有出现过性能问题,这都得益于设计,以及后来的可能存在数据量隐患的SQL的改写.这个项目也成功当选淘宝2007年第三季度优秀项目奖。
  跟CTU项目同时进行的,还有淘宝新机房的建设.在piner的帮助下,完成小型机,DMX-3,光纤交换机,网络等所有基础设施的搭建工作.接下来,就是ORACLE数据库软件的安装,OS参数调整,对于生产库的安装以及参数调整,一定要格外的认真仔细,任何的不小心,都很有可能给将来的正式运行留下安全隐患。在这些准备工作做完之后,需要对搭建起来的系统进行测试,让数据库跑起来,并使用loadrunner进行压力测试。在进行压力测试的过程中,AIX操作系统hung住了,piner也在他的blog里面记录了这件事。这是一件比较麻烦的事,而且如果不能解决,找不到原因,根本就不敢把生产系统移到上面来。IBM厂商的工程师也把dump文件拿回去分析,我们自己也在到处找资料。IBM的工程师迟迟找不到原因,我们也继续在internet上google.piner发现了一AIX上的调优文档发给了大家看,当天晚上,我在这本电子文档里发现了一个很有意义的公式,也有我的blog里面的这篇文章《管理AIX操作系统的虚拟内存》,这个公式:SGA < 物理内存 * (maxpin% - 10);其实后来一系列的实践证明,此公式是正确的(偏移10%可能幅度还不够,可以15%到20%)。这个偏移量的存在,源于操作系统也需要pin住很多内存,但具体这些pin住的内存作什么用,我到现在也不是很清楚,可能是OS一些非常核心的东西,比如说放一些管理结构与控制结构等等。但从此,我们有了理论的指导,正确的设置maxpin%参数,与合理的SGA大小,操作系统再也没有hung住。新机房也如期投入生产运营。
  2007年的第三季度,我的工作由开发DBA转为产品DBA,全面负责产品库的基础设施搭建工作,比如说小型机硬件升级,OS升级,存储重构,ORACLE安装,数据库备份,监控系统的完善等等工作。在这个季度里,基本上每周都要去机房,而且经常一呆就是连续好几天,耳旁伴着的是嘈杂的小型机与HDS存储巨大的声音,在那些日子里,我的睡眠质量是特别的好,倒床三分钟内,基本上就能睡着。呆了几天后,从机房回到公司,看着明亮而安静的办公场地,心里感到格外的舒畅。在这个季度里,高质量的完成产品库的各项建设工作,自己对主机,OS,高端存储也有了进一步的认识与提高,谢谢piner在这段时间内的耐心指导。
  淘宝开发团队的日益壮大,再加产品库的建设工作也搞得七七八八了,因为工作的需要,在2007年第四个季度里,我从产品DBA转向开发技术支持的角色,开始负责两个团队的日常需求与项目的技术支持,以及淘宝的新东西推荐引擎的相关工作,还要负责一些产品库的建设工作,其中一项是HA建设。在淘宝,为了保证产品的质量,我们制定了很多的流程,与我们DBA相关的就有好几个,这些流程,我开始也不熟悉;在经过短暂的交流后,就开始匆匆的做各种日常需求,在实践中熟悉各种流程后,并通过邮件,当面交流等各种形式向广大开发,PM介绍与DBA相关的流程,在做了这些之后,整个流程的处理速度明显加快,大家也熟悉并且接受了这种按流程做事的方式,不用进行大量的反复的不必要的沟通工作。在淘宝,技术支持的工作主要包括以下一些方面,参与项目设计,sql审核,在开发环境与生产环境创建相关的表结构与索引等等。经过一个季度的锻炼,对各种应用系统都有相当程度的了解,对业务的理解也更加的深入。在ORACLE的技术成长道路上,sql performance tunning也有了很大的提高,这其中最关键的莫过于对统计数据的掌握的深度上,并应用这些知识,解决了一系列生产库上SQL语句的性能问题以执行计划变更问题。
  在第四季度,随着对业务理解的深度上的进一步提高,对网站一些重要基础架构提出了自己的设计与解决方案.这些就不透露了!
  在 淘宝这样高速发展的公司里,每一天都是一个挑战。我们都不得不去面对一些新的问题,我们唯有不断去提高自己,提供一些新的解决方案,to handle these problems 。