转自:https://blog.csdn.net/dba_huangzj/article/details/7841441

在专职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、你的水平的确比不上别人,你应该多学习,而不是去埋怨。分享的过程中,你也许会被指出很多不足,这也是你成长的另外一个动力。

DBA应该怎么做:

作为DBA甚至作为一个人,首先你要保证自己不断进步,其实说白了就是不断学习,实践,再学习,再实践。

比较好的方式就是看书,目前我手上有不下50本书,包括电子书和实体书,我也在不断收集一些DBA的书籍,有时候看着这些书名,却有一种不知如何选择的感觉。后来工作需要,挑了一些能快速解决问题的书或者文章来看(当然如果有时间,我还是强烈建议打好基础),发现了绝大部分书籍和资料,其实描述的都是大同小异,只是侧重点不同,甚至有些是标新立异而已。所以,选择一些好的书籍,对入门很有帮助。如何入门?其实我也不好说啥,看个人,但是如果非要说一个方法,那我建议去考证。每个主流DBMS的厂商几乎都有相关的证书,从考证的过程,你可以看到厂商希望专业的使用者应该具有什么水平,从中你可以得到一个大概,然后再深入了解。不要因为证书而读书,那个只是你的一个指引,后面的路还长着。

在不断学习的过程中,要反复测试和验证,陆游的【冬夜读书示子聿】上的一句名言:纸上得来终觉浅,绝知此事要躬行。书上往往都是别人的经验,会有意无意略掉一些细节,只有实践了,你才会发现,知识也才会扎根你的大脑。而且书上的知识往往都是最后化了,很少出现问题,但是实际运用中,往往问题百出。

最后,要有好的心态,个人觉得,DBA最重要的不是技术,而是冷静,因为在几乎所有人眼里,数据库的问题你才是专家,你才能解决,你是别人的依靠。此时,一旦问题突然出现,你要先冷静,没有冷静的大脑,很多简单的问题却会复杂化。结果往往事倍功半甚至失败。有了冷静的性格,还要谦虚,无论是任何职业,总有你的前辈在,为此,要不耻下问。当你成为大牛了。你就明白为什么了。

本来有很多话说,但是万言文往往效果不佳,所以我以一图结束我的文章,在往后的文章里面,我会穿插阐述DBA的观点,当然,纯属个人经验:

其实本文没怎么经过深思熟虑,只是一时兴起就写了。所以有不足之后多多保函,并建议指出。谢谢。

最新文章

  1. Oracle 环境变量NLS_LANG
  2. Apache+PHP+MySQL
  3. 有感于三个50岁的美国程序员的生活状态与IT职业杂想
  4. CEF3开发者系列之JS与C++交互之一
  5. 一件关于数据库日志log的无聊事情
  6. android---APN切换
  7. Bag of Words(BOW)模型
  8. NotificationManager 发送通知
  9. CSS用法简介
  10. Minimum Sum LCM(uva10791+和最小的LCM+推理)
  11. C++库研究笔记——函数名的宏定义
  12. javascript学习笔记-2:jQuery中$("xx")返回值探究
  13. Codeforces 1027F Session in BSU - 并查集
  14. Win10系列:C#应用控件基础19
  15. lua脚本在游戏中的应用
  16. s21day04 python笔记
  17. ab参数详解 – 压力测试
  18. JVM内存模型二
  19. go chapter 10 函数 方法 struct的方法
  20. 可能引起「We Were Unable to Load Disqus」错误的一种情况分析

热门文章

  1. winform 打印条码
  2. ubuntu下SVN使用
  3. 在Linux系统上查看Apache服务器的错误日志
  4. centos7.4 update git
  5. 解决 Visual Studio For Mac 还原包失败问题
  6. HTML 中框架、层的运用
  7. ASP.NET中JSON对时间进行序列化和反序列化
  8. ORM框架(对象关系映射)
  9. 【BZOJ】3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)
  10. c#上传大文件方法