日期:2014-05-16  浏览次数:20465 次

博客专栏第一篇文章——我眼里的DBA

在专职DBA工作一年过一个月以后,开通了CSDN的博客专栏,在第一篇文章中,我谈谈一年DBA生涯的感想,虽然我是SQL Server的DBA,但是我觉得本文适合所有DBA,顺便把这篇文章作为个人真正DBA的开端和指引:

为什么要有DBA:

         对于大量小公司,是请不起DBA,而且也不是非常必须的。那么DBA这个职业是如何产生的?我也不懂,个人的猜测是,当你的应用系统和数据库到达一定程度,就会面临很多问题,专业术语称之为:瓶颈。

         面对瓶颈,很多有经验的开发人员或者其他岗位的人,可以应付,但不能保证都能应付,或者很好地解决,往往都只是治标不治本。因此,需要一个专职人员负责这部分工作。类似于系统管理员。试想你的公司有100台服务器,上面有若干个操作系统(虚拟机可能会导致更多数量)。一个开发人员面对无休止的开发进度,就算有心,也无力。

         对于具有一定规模的企业,拥有一定数量的DBA和系统管理员是非常必要的。这能保证你的企业正常运作的前提下,达到各方面的最优化。

何为DBA:

         毕业4年,做了3年开发,1年DBA,萌生成为DBA是在第二年末,看到DBA的前景比较好(有些地方把DBA描述成中医,年纪越大越值钱,其实很有道理,经验的确需要时间和经历去积累),工资也相对高很多,并且在公司的地位也相对比开发人员高。加上个人开发水平不高,所以最终决定转型为DBA,当时何为DBA?如何成为DBA?这些都还没弄懂。

         后来,经过自己的坚持,终于当上了一个专职的DBA,从此开始自己的职业生涯。成为了DBA,面对的第一个问题就是:什么是DBA?其实就是说,要做些什么,才算一个DBA。

         DBA,中文:数据库管理员,如其名,管理数据库的人,但是仅仅这样分析是不全面的,因为数据库作为信息系统的核心,有着无法比拟的重要性。我的上司说过,DBA和系统管理员才是公司的核心,程序没了,上传一份就可以了,服务器挂了,重装系统甚至买过硬件,也可以解决,但是数据库没了(其实就是数据没了),对产品提供商或者客户,都是毁灭性的打击。不是每类数据都能重现或者重建。

所以,作为DBA

首先,要有过硬的数据库知识,包括管理、设计、开发等等。

其次,要懂得足够多的或者说最起码的服务器管理知识,操作系统知识,因为你的数据库管理系统是运行在操作系统上的。

再者,由于绝大部分数据库系统都配有前端应用程序,所以必要的程序语言要达到最起码的了解级别。

还有,无论是外网还是内网系统,只要预算不会非常缺,一般数据库服务器不应该存放任何其他应用。这种情况下,往往都是通过网络传输来实现整个系统的应用和管理,所以网络知识也是必要的。

最后,DBA不仅仅要和硬件、代码打交道,也要和人打交道,试想如果你不懂得如何告诉开发人员某些功能存在问题,或者你不懂得如何向领导汇报,那么你的工作就会事倍功半。甚至有反效果。

能满足上面五点要求,你可以称自己为“初级DBA”。至于中级、高级,那些的要求就很苛刻了。在此先不谈。

         在我个人的工作经验看来,DBA的工作粗略分为两种:【管理】和【优化】。当然,这两部分相辅相成又互相制约,不应该独立看待。    

         对于【管理】:

首先,当然要让服务器稳定、安全地运行。并且保证各方面的配置都能达到局部最优化。这里之所以说局部,是因为根据我的经验,没有一成不变的教条,也没有所谓的绝对最优,只有最合适的方案。所以不要对一个执行几乎不花时间的查询花大力气的优化,除非你发现这个查询具有重大隐患。光是稳定和安全就已经有非常多的学问,将在后续穿插讲解,另外,这两点你要尽可能地向系统管理员学习。不求你有他们的等级,但是要尽可能接近,毕竟他们只需要关系服务器和操作系统,你除了这些之外还要关心数据库。

然后,要充分利用好现有资源,除了政府和银行这些企业之外,一般的企业就算再大,预算也是有限的,而且对于不懂计算机的人来说,可能觉得服务器、软件等等都只是支出而不是收入,所以往往都看的比较轻。绝大部分DBA都必须面临有限的资源。但是往往这就是你发挥的地方。很多开发人员不重视性能,总是写一些“能用”的功能,最后往往因为资源不足而运行失败。作为DBA,要把这些程序优化,使其达到一个【少】字,这部分放到优化说。

最后,要做好应急措施,往往问题就在你以为不会发生的时候发生。所以DBA首要任务是做好数据库的备份(包括系统数据库)。然后就是做高可用,使得数据库能尽可能地保持不停机运作。然后就是做好一些自动化操作,比如自动、定期重建索引、清理备份文件等等。如果要细化DBA的工作事项,恐怕一万字都远远不够。所以这里仅仅是带过一下,后续也会穿插阐述。

         对于【优化】:这是一个大课堂,足以写好几本书,而且也是基于【管理】部分。数据库管理不好,你代码质量再好,也是白搭。所以以下提到的是必须做到的:

         首先,要有良好的编程规范,比如命名、注释,这些必须强制实行,曾经看过一篇文章,说维护人员经常要花70%的时间都去读一些没有注释的代码。剩下的时间才去做优化,试想作为企业,这些成本是不可忽视的。

         其次,结合【管理】部分,做好日常的维护及性能数据收集,任何一本好的优化书籍都会叫你先定好性能基线,一般就是正常运行的系统一些硬件数据。比如CPU、内存和I/O值。有了这些,你才有理据去告诉别人,你优化了。让数据说话更有说服力。

         然后,做好技术储备,前面提到的,要有扎实的编程基础,在这里就能体现,一个不会SQL编程的人或者不懂存储过程是什么的人,如何去优化?毕竟优化大部分情况下是改写写法和调整索引、表结构等等。

         再有,优化要有一定的原则,大拇指定律指出,80%的性能问题是由于20%的程序引起的,所以要针对这20%的程序做优化,并且优化的时候不要做到极端,却要做到极致,一个查询从2分钟降到1秒钟,其实你优化的空间已经不大了,基本上可以提交结果了。

         最后,要经常总结,把经验分享给开发人员,知识在你大脑里面,谁都抢不走,不应该害怕被别人替代,因为如果有天你面临这个处境,只能说明两种情况:1、领导故意找接班人,这样的公司你不留也罢。2、你的水平的确比不上别人,你应该多学习,而不是去埋怨。分享的过程中,你也许会被指出很多不足,这也是你成长的另外一个动力。