《岗位怎么招》第二期:DBA岗位的人物画像
上一期,我们对DBA这个岗位做了一些非常基础的阐述
这一期,我们补充来说明一下DBA的人物画像。
DBA的段位
真正厉害的DBA,他们犹如定海神针一样的作用。
(普通人眼中:DBA平常好像没啥事情干,浪费钱)
给你们讲一个扁鹊的故事,你们就知道其真正的作用。
春秋战国时,扁鹊曾到魏国替魏文王诊断病情。
优秀的DBA,就像扁鹊大哥一样,让整个系统在没有出现问题之前就把问题给解决了,让你觉得系统一直稳定无故障。
其实公司是否有一个强力DBA,对从事技术研发相关工作的程序员或者架构师非常重要。
DBA的等级,其实没有分得那么严格。
一般可以简单分成3个等级,初级、中级和高级。
初级的DBA一般都是兼职的,他们往往同时是程序员。初级的DBA简历,一般都写得超级棒的,比如参与了各种与数据库相关的工作之类的。
然而,他们实际的工作是:
1、第三方供应商已经安装并配置好数据库,他们只做监控的工作,处理一些简单的小问题,有大事就立马找第三方。
2、他们喜欢使用图形化数据库管理工具,终端式的处理能力不强(类似于,在软件上点一点按钮,就可以完成工作)
中级的DBA,他们涉及的工作就会多很多(其中,中级和高级在技术上差别不大,差距在于其他方面的能力)。
数据库安装、配置、管理
数据库权限及安全管理
监控及性能调优
备份及恢复
解决一般性问题
高级DBA,国内非常少。技术能力上,可能和中级DBA相差不大。主要差别在于技术的广度和经验的多少。
高级DBA,可能会通晓多种大型数据库,且知道不同数据库在不同环境下的优势和劣势,并能够做出最适合的决策。
当然,对于HR来说,这种分类实际上我们是非常难对人才的能力做判断,我们有时候只会通过一些相关的证书来判断。
(告诉你,其实证书有时候并不是特别重要,有些培训都可以获得证书的)
那么,HR应该从哪些角度来判断DBA的段位呢?
其中有一句万金油的问法:如果你招一个DBA,你会从哪些角度或问哪些问题来判断这个人的技术能力。
为了加深各位HR对DBA关键能力的印象,我们接下来一一拆解。
HR可以从以下几个方面判断DBA的段位
1.熟悉至少一种数据库的应用
目前市场上有多种数据库之间的实现是有差异的,相关技巧不一定可以通用。一般DBA都会有一个擅长的数据库类型,例如:Oracle/Mysql/Mongodb等。
无需询问,看简历即可
包括:安装部署、执行计划、主要算法、参数调整、防灾备份、常见错误修复等
2.熟悉至少一种数据库主要算法(重点关注)
以执行计划为例:它实际上是数据库服务器在执行SQL语句时,会准备多套方案,最后选择消耗资源最小的那个方案,整个过程就是执行计划。(作为HR,是不是看不懂?)
通俗点讲,我们打开高德地图,起点设置为体育中心B出口,目的地设为广州南站。这里,高德一般会提示给到你几条导航选择:最短时间,最短距离,躲避拥堵、高速优先等。
这个过程,就类似于数据库操作的执行计划,而获得每一条线路的细节,就相当于查询算法的工作。
执行计划一般有3种:
全表扫描、索引扫描(索引扫描、索引范围扫描、索引快速全扫描、索引跳跃式扫描、索引降序式扫描)、ROWID扫描
作为HR,不用强迫自己去理解这些概念,略有点难度。
建议可以这么问:
1、常用的执行计划有哪些类别?如果他答得上来,说明理论基础还可以,至少他背下来了嘛。
2、不同的执行计划,有什么不一样?可否用通俗的语言来描述一下?
3、在具体的项目中,哪些时候你会使用全表招描、哪些时候你用索引扫描、哪些时候你用ROWID扫描?你的判断依据是什么?(这个问题,一般放在1和2问题的后面,避免候选人通过问题的题干,了解答题逻辑)
3、如何不借用第三方工具,查看sql的执行计划?
4、在具体的执行计划中,你最常用的几种查找算法是什么?他们的区别是什么样的?(有三种,Nested Loops, Merge Joins和Hash Joins)
3.熟悉影响数据库性能的参数 如MySQL中的my.ini中各种参数的含义、影响及调优方法。Oracle中SGA/PGA如何分配调整及调优等等。
如果有兴趣的,可以问这些问题:
1、Mysql的存储引擎有哪些类别,分别有什么区别?(MYISAM读性能好,InnoDB大容量数据处理)至少说明5点不同。
公共参数配置:
2、一般默认的最大连接数是多少?一般建议是多少?(151,80%)
3、默认缓存数是多少?建议是多少?(2M,16M)
MYISAM参数配置:
索引缓存大小设置建议是?(物理内存的30-40%)
读操作缓冲区大小默认是多少,建议是多少(128K,16M或32M)
InnoDB参数配置:
索引缓存设置建议是?(物理内存的60-70%)
缓冲池的实例数一般推荐是多少个?(4或8个)
Oracle的SGA和PGA也是参数配置的作用,只是叫法不同。
SGA:System Global Area是Oracle 实例的基本组成部分,在实例启动时分配
系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区
PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存
不用理解其到底是什么意思,只要知道这些参数设置得好,可以保证整个系统运转是否正常,比如卡机啊之类的,可能跟这块的工作会有关系。
一般的数据是:
对于OLTP系统,SGA占数据库使用总内存的80%,PGA占数据库使用内存的20%
对于OLAP(DSS)系统,对于密集大查询的系统,PGA可以占到数据库使用总内存的70%
这里同样可以问到你的面试者,如何设置基础参数,为什么要这么设置。
关于OLTP和OLAP,之前分享过3次。
以上这种内容一般是死记型的,面试者不一定记得住,也不能体现得出真实能力。
建议通过笔记或者上机测试。
当然如果你实在是要问的话,建议在每一个问题后面加上为什么要做这样的参数设置。
4.熟悉至少一种数据库的SQL调优(重点关注) 因为数据库采用的算法并不一定相同,所以SQL调优的方式也不相同。
SQL调优主要是提高数据库的性能和稳定。简言之,又快又稳。
1、sql调整最关注的是什么?(读性能和IO量)
2、你应该有对sql调优的一些常见方法做总结吧,你自己有哪些原则来提高查询效率?
无论哪种优化,最需要坚持的原则是:避免无计划的全表扫描
5.熟悉常见的防灾备份方法(重点关注)
数据库的防灾备份,是保证系统是否能够稳定使用的重大前提。一般要求都是7*24小时。因此,DBA能够完成这部分工作,也是技术的一个重要评估标准。
建议可以这么问:
1、Mysql的复制原理及流程(可以给一张纸,让面试者画出来,并用一个生活例子来类比出来)
2、备份有几种方式,说明不同的备份方法的异同?(热、温、冷,二进制日志备份,四种。一般用前三者多,业务影响从低到高排列,备份恢复成本从高到低排列、一致性1为组织后一致,前2和3者为完全一致)
3、分布式数据的优缺点?(抗灾,高并发,受网络影响,总体成本高,扩展性强)
6.熟悉数据库设计范式 范式不是万能的,但不懂是不行的。虽然生产中不可能完全采用范式设计,但是要知道不符合哪种范式会带来什么问题,这样才能在制造数据冗余的同时保证数据的一致性。
基本都会,无需询问。
7.熟悉数据库设计基本原则(重点关注) 为了提高效能,数据库设计中有一些常用的优化原则,需要了解其利弊,在设计中考虑正反两方面的影响,权衡利弊,设计优化的数据库模式。
基本都会,不需询问。
之前做过3次分享,可以回听我的分享。
1.熟悉Linux/Unix操作系统的管理。 目前市场上绝大部分的数据库服务器是跑在Linux系统下的。对于DBA来说,熟悉Linux都是必备的。Solaris/FreeBSD等Unix系列的系统也有不少市场,尤其是Solaris被Oracle收购之后,更可能得到重视。
这个部分是必备技能,高级DBA就没有必要问到这部分了。
如果你要招初级的DBA,建议可以这么问:
1、你使用Linux系统管理的操作频率最高的操作有哪些?
2、怎么查看系统进程?
3、如何发现进程死锁,需要关掉进程,有哪些方法?(kill pid /-9 kill pid)
仅限初级DBA使用,如果有需要,回头我再整理一份技术的清单。但个人认为对于HR来说,这种问题基本上交给笔试就好了,高级DBA基本上搞得定这些的。
2.了解网络模型和配置(重点关注)。 当DBA完全不懂网络,分布式、集群没有网络是跑不起来的,碰上大型应用,基本上就准备宕机了。这里主要和负载均衡有关,主流的负载均衡器有LVS/HAProxy/Nginx。
建议可以这么问:
1、你们公司服务器是否一主多从的结构?
2、你们多从使用的负载均衡器是什么类型的?
3、你还接触过哪些负载均衡器,这几种均衡器有什么区别?应用领域有什么不同吗?
注意要按顺序来问,同时建议让面试者以通俗的例子来向HR解释。
4.了解硬件体系结构。 数据库的问题并不一定是软件问题,也可能是硬件和网络的问题,了解硬件的体系结构,不仅可能帮助排错,也能正确的估算数据库的承受能力和硬件需求。
4.了解硬件体系结构。 数据库的问题并不一定是软件问题,也可能是硬件和网络的问题,了解硬件的体系结构,不仅可能帮助排错,也能正确的估算数据库的承受能力和硬件需求。
5.熟悉至少一种Linux脚本语言。 包括Perl/Shell/Python等,运维过程中少不了一些重复的操作,这些操作如果有脚本的帮助,将大大提高DBA的工作效率。
Shell是必备的,Perl或Python可以二选一。
如果你使用的是mac电脑,打开终端。
标红色的,就是所谓的shell。
实际上,是把我们原来通过鼠标双击打开文件,换成ls和cd。
1.团队协作能力(重点关注) 特别是DBA,这个岗位实际上工作的伙伴除了开发工程师之外,甚至还有各方领导和销售端的同事,团队协作能力特别重要。工作中不可能一个人能单挑所有问题,总是需要合作的,跟团队的每个人处好关系,能完成自己的任务,并且能协同整个团队去解决问题,才能发挥自己的效能和整个团队的效能。
2.正确的分析能力(重点关注)
遇到问题或者拿到一个新的技术,如何去分析其问题所在或分析其原理,需要正确方法。能在排除其他因素干扰的情况下,分析问题,这是一种能力否则容易出现某些因素会干扰判断,得出错误的结论。
这一点基本上和人的逻辑思维能力有关系。
3.严谨负责的态度(重点关注)
网上很多博文或者有些书中的结论,可能是翻译错误可能是作者疏漏,要抱着怀疑的态度去看书和博文,所述一定要经过自己证实、分析才能下结论,不可以光看就认为是正确的。没严谨的态度用正确的方法去分析,结果就看表面现象以为是正确的,可能很久都不能更正。
这一点,可以通过考量人才的细心来判断。
综合能力方面,相信HR可以通过常见的面试手段,可以做基本的判断。
欢迎各位发出自己想要了解的岗位
也许下一期,就是你的疑问
让我们一起成为最懂技术的HR
切记:
我们是HR
即使面试者回答的内容,听不懂也没关系
我们关注的是他是否能够答得上来
———— / END / ————