我眼里的DBA
2021年1月9日 | by tgcode
在专职DBA工作一年过一个月以后,开通了CSDN的博客专栏,在第一篇文章中,我谈谈一年DBA生涯的感想,虽然我是SQL Server的DBA,但是我觉得本文适合所有DBA,顺便把这篇文章作为个人真正DBA的开端和指引:
为什么要有DBA?
对于大量小公司,是请不起DBA,而且也不是非常必须的。那么DBA这个职业是如何产生的?我也不懂,个人的猜测是,当你的应用系统和数据库到达一定程度,就会面临很多问题,专业术语称之为:瓶颈。
面对瓶颈,很多有经验的开发人员或者其他岗位的人,可以应付,但不能保证都能应付,或者很好地解决,往往都只是治标不治本。因此,需要一个专职人员负责这部分工作。类似于系统管理员。试想你的公司有100台服务器,上面有若干个操作系统(虚拟机可能会导致更多数量)。一个开发人员面对无休止的开发进度,就算有心,也无力。
对于具有一定规模的企业,拥有一定数量的DBA和系统管理员是非常必要的。这能保证你的企业正常运作的前提下,达到各方面的最优化。
何为DtgcodeBA?
毕业4年,做了3年开发,1年DBA,萌生成为DBA是在第二年末,看到DBA的前景比较好(有些地方把DBA描述成中医,年纪越大越值钱,其实很有道理,经验的确需要时间和经历去积累),工资也相对高很多,并且在公司的地位也相对比开发人员高。加上个人开发水平不高,所以最终决定转型为DBA,当时何为DBA?如何成为DBA?这些都还没弄懂。
后来,经过自己的坚持,终于当上了一个专职的DBA,从此开始自己的职业生涯。成为了DBA,面对的第一个问题就是:什么是DBA?其实就是说,要做些什么,才算一个DBA。
DBA,中文:数据库管理员,如其名,管理数据库的人,但是仅仅这样分析是不全面的,因为数据库作为信息系统的核心,有着无法比拟的重要性。我的上司说过,DBA和系统管理员才是公司的核心,程序没了,上传一份就可以了,服务器挂了,重装系统甚至买过硬件,也可以解决,但是数据库没了(其实就是数据没了),对产品提供商或者客户,都是毁灭性的打击。不是每类数据都能重现或者重建。
所以,作为DBA
首先,要有过硬的数据库知识,包括管理、设计、开发等等。
其次,要懂得足够多的或者说最起码的服务器管理知识,操作系统知识,因为你的数据库管理系统是运行在操作系统上的。
再者,由于绝大部分数据库系统都配有前端应用程序,所以必要的程序语言要达到最起码的了解级别。
还有,无论是外网还是内网系统,只要预算不会非常缺,一般数据库服务器不应该存放任何其他应用。这种情况下,往往都是通过网络传输来实现整个系统的应用和管理,所以网络知识也是必要的。
最后,DBA不仅仅要和硬件、代码打交道,也要和人打交道,试想如果你不懂得如何告诉开发人员某些功能存在问题,或者你不懂得如何向领导汇报,那么你的工作就会事倍功半,甚至有反效果。
能满足上面五点要求,你可以称自己为“初级DBA”。至于中级、高级,那些的要求就很苛刻了。在此先不谈。
在我个人的工作经验看来,DBA的工作粗略分为两种:【管理】和【优化】。当然,这两部分相辅相成又互相制约,不应该独立看待。
对于【管理】:
首先,当然要让服务器稳定、安全地运行。并且保证各方面的配置都能达到局部最优化。这里之所以说局部,是因为根据我的经验,没有一成不变的教条,也没有所谓的绝对最优,只有最合适的方案。所以不要对一个执行几乎不花时间的查询花大力气的优化,除非你发现这个查询具有重大隐患。光是稳定和安全就已经有非常多的学问,将在后续穿插讲解,另外,这两点你要尽可能地向系统管理员学习。不求你有他们的等级,但是要尽可能接近,毕竟他们只需要关系服务器和操作系统,你除了这些之外还要关心数据库。
然后,要充分利用好现有资源,除了政府和银行这些企业之外,一般的企业就算再大,预算也是有限的,而且对于不懂计算机的人来说,可能觉得服务器、软件等等都只是支出而不是收入,所以往往都看的比较轻。绝大部分DBA都必须面临有限的资源。但是往往这就是你发挥的地方。很多开发人员不重视性能,总是写一些“能用”的功能,最后往往因为资源不足而运行失败。作为DBA,要把这些程序优化tgcode,使其达到一个【少】字,这部分放到优化说。
最后,要做好应急措施,往往问题就在你以为不会发生的时候发生。所以DBA首要任务是做好数据库的备份(包括系统数据库)。然后就是做高可用,使得数据库能尽可能地保持不停机运作。然后就是做好一些自动化操作,比如自动、定期重建索引、清理备份文件等等。如果要细化DBA的工作事项,恐怕一万字都远远不够。所以这里仅仅是带过一下,后续也会穿插阐述。
对于【优化】:这是一个大课堂,足以写好几本书,而且也是基于【管理】部分。数据库管理不好,你代码质量再好,也是白搭。所以以下提到的是必须做到的:
首先,要有良好的编程规范,比如命名、注释,这些必须强制实行,曾经看过一篇文章,说维护人员经常要花70%的时间都去读一些没有注释的代码。剩下的时间才去做优化,试想作为企业,这些成本是不可忽视的。
其次,结合【管理】部分,做好日常的维护及性能数据收集,任何一本好的优化书籍都会叫你先定好性能基线,一般就是正常运行的系统一些硬件数据。比如CPU、内存和I/O值。有了这些,你才有理据去告诉别人,你优化了。让数据说话更有说服力。
然后,做好技术储备,前面提到的,要有扎实的编程基础,在这里就能体现,一个不会SQL编程的人或者不懂存储过程是什么的人,如何去优化?毕竟优化大部分情况下是改写写法和调整索引、表结构等等。
再有,优化要有一定的原则,大拇指定律指出,80%的性能问题是由于20%的程序引起的,所以要针对这20%的程序做优化,并且优化的时候不要做到极端,却要做到极致,一个查询从2分钟降到1秒钟,其实你优化的空间已经不大了,基本上可以提交结果了。
最后,要经常总结,把经验分享给开发人员,知识在你大脑里面,谁都抢不走,不应该害怕被别人替代,因为如果有天你面临这个处境,只能说明两种情况:1、领导故意找接班人,这样的公司你不留也罢。2、你的水平的确比不上别人,你应该多学习,而不是去埋怨。分享的过程中,你也许会被指出很多不足,这也是你成长的另外一个动力。
DBA应该怎么做tgcode:
作为DBA甚至作为一个人,首先你要保证自己不断进步,其实说白了就是不断学习,实践,再学习,再实践。
比较好的方式就是看书,目前我手上有不下50本书,包括电子书和实体书,我也在不断收集一些DBA的书籍,有时候看着这些书名,却有一种不知如何选择的感觉。后来工作需要,挑了一些能快速解决问题的书或者文章来看(当然如果有时间,我还是强烈建议打好基础),发现了绝大部分书籍和资料,其实描述的都是大同小异,只是侧重点不同,甚至有些是标新立异而已。所以,选择一些好的书籍,对入门很有帮助。如何入门?其实我也不好说啥,看个人,但是如果非要说一个方法,那我建议去考证。每个主流DBMS的厂商几乎都有相关的证书,从考证的过程,你可以看到厂商希望专业的使用者应该具有什么水平,从中你可以得到一个大概,然后再深入了解。不要因为证书而读书,那个只是你的一个指引,后面的路还长着。
在不断学习的过程中,要反复测试和验证,陆游的【冬夜读书示子聿】上的一句名言:纸上得来终觉浅,绝知此事要躬行。书上往往都是别人的经验,会有意无意略掉一些细节,只有实践了,你才会发现,知识也才会扎根你的大脑。而且书上的知识往往都是最后化了,很少出现问题,但是实际运用中,往往问题百出。
最后,要有好的心态,个人觉得,DBA最重要的不是技术,而是冷静,因为在几乎所有人眼里,数据库的问题你才是专家,你才能解决,你是别人的依靠。此时,一旦问题突然出现,你要先冷静,没有冷静的大脑,很多简单的问题却会复杂化。结果往往事倍功半甚至失败。有了冷静的性格,还要谦虚,无论是任何职业,总有你的前辈在,为此,要不耻下问。当你成为大牛了。你就明白为什么了。
本来有很多话说,但是万言文往往效果不佳,所以我以一图结束我的文章,在往后的文章里面,我会穿插阐述DBA的观点,当然,纯属个人经验:
其实本文没怎么经过深思熟虑,只是一时兴起就写了。所以有不足之后多多保函,并建议指出。谢谢。