首先dba是我的职业。dba是database administration的简称,中文常常称作数据库管理员。有时候朋友问:你具体是做什么的?一句话还真难把这个职业描述清楚,也很难把自己的日常工作讲明白,所谓说来话长、一言难尽。这里就以我从业以来的所做作为和我的dba同事们平日所做所为为例,总结一下dba到底是干什么的。
1. dba日常工作之DDL
作为一个dba,会参与各种各样的项目,接需求,做DDL。如写建表、调整索引、增减字段的脚本,在适当的时间到测试环境和线上环境实施变更。脚本通常是自己一个字符一个字符输入的。当然如果只是写写ddl脚本,生活会很单调无趣。每个DDL,都要考虑对相关系统的影响。比如建索引,并不是说别人告诉你要在什么字段上建索引就怎么建,而是要评估业务需求,该优化的语句优化掉,该砍的需求砍,要考虑到索引对DML效率的影响。调整一个老的索引,要评估好这个调整是否会对老的业务有负面影响,影响有多大?哪些字段要放在索引了,字段的顺序应该怎么排,都是有原因的。再如增删字段,要考虑这个变更是否会影响到其它关联的系统,也要考虑一个变更对数据库意味着什么。如mysql和oracle就不太一样。目前版本(5.1)的mysql加字段时要对整个表的数据做一次copy,同时会锁表。假设一个表1秒钟有一次dml,一个数据库可以支持3000个连接,一个ddl操作要锁表1个小时,是不是这个ddl还没有完成的时候,系统所有的连接数都会被用光了?应用是否会挂掉,数据库是否会挂掉,这都是需要考虑的问题。Oracle对在线DDL的支持比较好,但是不是就没有风险了呢,所否所有类型的ddl都是很快的呢?
2. dba日常工作之数据处理
假设中国有10%的人上taobao,那么taobao就有上亿的用户,假设有10%的taobao用户每天都要购物,那么一天就有上千万的交易,假设每次交易产生8k数据,每天就会有接近100G的数据,每个月会有3T数据,每年会有42T数据。这么大的数据量,可能会导致一个索引的调整24个小时都无法完成,从而导致无法应对业务需求的变更,而这绝对是无法接受的。海量的数据如何处理?假设每个人每次交易之前都会货比三家,浏览10次,那么每天就会有上亿次查询,一个数据库能一天能支撑多少次查询,如何应对业务量的快速增长?这都是很现实的问题,问题不会自己解决自己,问题由人造成,也要有人去解决。
3. dba日常工作之环境搭建和维护
从硬件的采购、硬件能力模型的评估、操作系统和数据库软件环境的按装、相关参数调整,我们需要评估、测试、再测试,线上系统,也不是一成不变的,或许软件有bug要打补丁,或许软件版本要更新,或许硬件能力达到瓶颈需要扩容,或许设备老化需要更换,这些都是dba日常工作的一部分。这也包括容灾系统的设计和实施,出现故障了怎么处理,机房断电了怎么办,硬盘坏了数据怎么找回来,都是dba需要面对的问题。
4. dba日常工作之系统监控
系统的运行是否正常,半夜出故障了是否能及时处理,成千上万的服务器如何维护,如何在第一时间发现问题并解决问题。光靠人力已经无法满足这个基本的需求了,我们需要全面、强大、稳定的监控系统,很难想象,要是没有这样一个监控系统,我们晚上是否能睡得安稳。
5. dba日志工作之故障
在做了所有该做的努力之后,系统还是会以你意想不到的方式出现问题,或许异常,或许抽风,或许宕机,一切皆有可能。各方面的压力随时到来,每个人多多少少迟早会面临这样的问题。这是永远都避免不了的风险和压力,这未必会给你带来高回报,关键是如何应对。db宕了,如何面对父老乡亲,这个问题需要好好考虑。
6. 你不是一个人在战斗
没有一个人可以应对所有的问题,如果有,他就是神,他不是一个人。我们是一个团队在工作,一个人搞不定的问题,大家群策群力,共同面对。我们每个人都要有backup,一个人不在,另外一个人随时可以顶上。我们可以半个月不上班,好好出去休息放松一下,要是没有一个强大的组织在背后支持,这是很难想象的。我们每个人都要给团队成员这样一个保证和信心,有我在,你放心。
7. dba发展方向
下至底层网络、存储环境搭建和主机硬件组成,中至数据库内部运行原理,上至业务系统架构和实现方法,再上至业务数据提炼分析,dba可以按自己的能力和意愿学习、了解、参与甚至主导某些方面的工作,可以说发展的空间是没有上限的,一切皆有可能。
至于lazy,中文称作懒惰,并不是说我是一个懒惰的dba,也不是说我不求上进、整天庸庸碌碌、做一天和尚撞一天钟。懒惰是我希望可以达到的一个境界。现在的我,可以说是为了可以懒惰而努力工作。为了懒惰,我们需要开发各种各样的工具,让计算机做更多的事情,我们不能为了懒惰而把工作推给别人。每天晚上,想着自己应该做的的已经做了,自己无法搞定的问题也都有组织在跟进,就可以安心睡个好觉,下班或周末,可以好好陪陪家人,做自己想做的事情。