ITPUB名人堂:专业MYSQL数据库DBA 金官丁(ID:jinguanding)分享自己
本次采访我们邀请到了来自于五分钟网络科技DBA经理 金官丁先生分享自己的DBA职业经历,以及数据库优化实战经验分享,同时也欢迎更多的同行跟贴参与更多的讨论。
hwayw:
问题1、您先自我介绍一下?分享以下您的职业经历?您目前的从事的工作?
Jinguanding:
大家好!我是金官丁,ITPUB网站ID:jinguanding,MySQL及其开源数据库版块的版主,新浪微博账号:mysqlops,早期主要是维护SQL Server数据库,后放弃微软的数据库产品,加入开源数据库MySQL阵容。很多人问我如何提高技术?个人感受深的就是多逛ITPUB等社区,并且积极想办法还原社区朋友碰到问题的场景,从而找出问题发生的根本原因,再给出合理的解决方案,这样可以提高个人分析和解决问题的能力,同时也增加碰到各种错误的机会,从而会帮助我们在今后工作中,减少错误的发生。做一名扁鹊一样医术高明的DBA,一直是我所追求的。
大学期间曾经对病毒的研发非常感兴趣,曾经研究过一段时间,并且写过一点小东西,但是终究发现自己不擅长,也不是非常适合作为职业道路走。大二暑假曾经写过一个即时通信的聊天系统,以及使用自学开发软件PowerBuild为企业开发MIS系统,终还是喜欢数据库,并且被一句话打动:”一个国家信息化程度的高低,取决于数据库的大小”,为此觉得这个方向非常值得学习与适合自己从事的职业方向。大致职业经历:
(1).大四第二个学期,也即2006年2月份初就带领一帮同学来上海找工作,一周之内顺利拿到3家公司的Offer,还有一家招聘DBA岗位的公司面试未通过,其中3家公司分别是医药系统研发、建筑行业软件研发、电力GIS系统研发,3家公司的待遇都基本上差不多,而且电力GIS系统研发公司没有专门负责数据库方面的技术人员,还可以额外承担此方面的工作,为此选择这家公司,不过使用的数据库产品是:SQL Server 、Oracle,为公司设计和部分实现通用的数据存储架构的解决方案,以及与同事合作编码完成了三套电力行业特有业务系统的通用解决方案。
(2).待合同期满之后,积蓄也足够在上海生活一年以上,就决心离职寻找DBA岗位的工作。过去一年多的工作时间内,SQL Server的技术进步非常明显,Oracle能应付基本的工作需求,对MySQL也能进行日常的维护操作,同时考虑到Oracle DBA阵容中高手如云,而MySQL DBA的道路还未探明,尤其互联网行业使用MySQL数据库产品的市场前景非常广阔,于是决定优先做SQL Server DBA的工作,同时也兼顾MySQL数据库技术的实践与学习,并且把MySQL数据库作为以后职业的方向,刚好游戏米果(上海)网络技术有限公司人事电话联系我,询问是否有意向换工作(此时我已经提出离职申请,只是因公司业务需要而未办理离职手续),记得还是在北京回上海的火车上,然后就这样顺利加入,并且为公司做了很多游戏数据库的设计和优化,游戏日志数据的分析工作,卡密生成与自动寄卖系统的设计与开发,充值消费和会员系统的改造等,可惜后来游戏米果因内部原因而致使公司解散。
(3).因个人感情上因素而选择去杭州,并且优先与丁香园创始人面谈过,但是考虑到阿里巴巴能有更多的数据量与高负载挑战,而决定加入了阿里巴巴(内部称B2B)上市公司,这一年对我的挑战非常大,不仅是陌生的工作环境,高负荷的工作量,技术含金量的要求,更重要的是阿里巴巴内部技术人员抵制与不信任MySQL。首先,如何重建他们对MySQL数据库的信息非常关键;其次,改变开发人员做数据存取设计的习惯与给开发人员做技术培训和辅导;后,通过大家合作完成一系列项目的研发和上线维护而进行经验累积和摸索,制定与实施一套完整的流程与规范;到我离开B2B DBA团队的时候,我们MySQL DBA团队建立起来了,上述三个目标也都非常顺利的完成,并且团队中还有培养起来非常的同仁。
现在上海五分钟网络科技有限公司工作,我们公司主业是社交游戏的研发与运营,大难处就是如何解决大量用户同时在线,而导致的大量数据并发写入与更新。目前主要是负责整个公司数据层架构的设计和带领研发团队实现社交游戏行业的通用性解决方案,或称游戏引擎,游戏与充值消费等数据库的设计与维护,以及团队的管理、公司内部的培训、考核等管理性质工作。
hwayw:
问题2、您认为MySQL、SQL server,oracle这些数据库相比较,哪个有什么优势?您更看好哪种数据库?
Jinguanding:
MySQL数据库产品已经从互联网行业崭露头脚,到现在是占据互联网行业主导地位,几乎每家互联网行业的公司,都在使用MySQL作为其后端数据库提供数据服务,并且提供的数据服务越来越重要。同时,MySQL数据库产品也已经在通信领域的中国移动、中国联通等公司使用,以及电力行业的北方电网等等案例,这些案例说明MySQL数据库产品已经被企业和技术人员认同,也间接说明MySQL数据库产品的成熟度与解决方案的丰富多样,而且正逐渐渗透到其他各个领域;
Oracle数据库在互联网行业的市场占有率,已经受到MySQL等开源数据库产品大规模的冲击,其市场占有份额急剧下降,并且电信、银行、税务、通信、医药、电力等领域是其传统势力范围,并且部分领域也有MySQL成功进入的案例,不过增长势头不明显;
微软公司的SQL Server数据库产品主要是在中小型企业中,有着广泛的应用,尤其是传统的生产制造行业根深蒂固。SQL Server数据库的性能不错和功能完备,以及提供非常方便与简便的图形化操作界面,也降低很多企业对技术人员的能力要求,同时国内不少企业依然使用盗版的SQL Server数据库软件,为此短期内传统生产制造行业不太会轻易考虑数据库产品的更换迁移。
从公司角度出发,可以说甲骨文公司会是现在与未来数据库市场上的大赢家,微软公司也会有自己的一席之地,只是可能市场占有率会被MySQL数据库产品冲击的越来越厉害,关于这点会在另外一篇文章<<甲骨文公司战略主导下 MySQL产品将走向何方>>中详细阐述,个人依然看好MySQL数据库产品在互联网行业,会取得越来越好的成绩,基于MySQL数据库的解决方案也会越来越丰富,并且MySQL数据库的技术与产品也会越来越完善、稳定、高效。
hwayw:
问题3、您一直专注MySQL数据库的研究,您在实际工作中,做的MySQL数据库性能优化方面成功的例子是什么?您当初是如何来完成?
Jinguanding:
“优化”一词的准确理解是平衡,也是我在不同场合一直说的:我们总是在一会平衡左手,一会又平衡右手,从中寻找佳的平衡点,但是随着时间的推移和数据的增长,平衡点会发生变化,平衡也会越来越难,平衡的技巧也会不同。真正的优化应该是越早越好,并且从不同的方向进行合理综合的优化,借用自己去年年底华东技术大会PPT中的图片解答:
成功的MySQL数据库优化案例,还真不知道选择哪个是成功的,为此就选择一个涉及MySQL数据库产品JOIN连接算法和InnoDB统计信息缺陷的优化案例给大家分享,对大家也会比较有价值,也是一直强调重视 MySQL数据库结构设计与其他数据库产品的区别,案例描述信息:
(1).阿里巴巴公司内部使用的Confluence系统;
(2).Confluence系统是购买的商业软件,且几年都没有付给软件开发商维护费用,为此无法让开发商修改代码;
(3).Confluence系统采用了Hibernate方式操作数据库,并且对出现在WHERE子句中的条件字段加了函数,主要是大小写转换的函数;
(4).数据存储设计问题:几乎所有的数据都存储在一张数据库表中;
(5).后台数据库为:MySQL,且MySQL不支持函数索引,数据库运行在普通的PC Server上,DELL 2950 8G内存,4块硬盘做的RAID1+0;
(6).用户量为二万名左右的员工;
(7).出现的问题:一张大表(大概2000KW多条记录,且含有TEXT大字段)与一张小表(2000条记录左右)需要进行JOIN连接查询操作,偶尔会走错执行计划,出现大表循环小表的情况,从而导致服务器的负载骤然升高,使整个系统的响应速度突然下降,而影响员工的工作效率;
解决办法:
问题出现的根本原因是几乎所有的数据都存储在一张表中(简称A表),其对应的分类目录信息存在另外一张表中(简称B表),而SQL的查询条件字段加有函数而无法走索引,InnoDB存储引擎的统计信息有时会出现偏差,而导致优化器选择错误的执行计划,即用A表的数据循环B表,其中A表是普通索引,B表是主键索引,更加容易出现。同时,MySQL的JOIN连接算法只有嵌套循环算法,为此出现嵌套循环算法坏的情况之一。后通过分析和测试发现,B表的主键字段值是Confluence系统内部控制生成的,为此把B表的主键字段降级为普通索引字段,即可以规避优化器走错执行计划的问题,自从做此修改完成之后再也没有出现Confluence系统出现负载突然飓高的情况。
hwayw:
问题4、现在的中小型企业都是使用MySQL,但还是有很多人认为MySQL数据库处理不了大数据,要存储大量数据库还是需要用ORACLE,您是否认同这样的观点?为什么?
Jinguanding:
首先我们大家要阐述清楚一个概念,大数据的标准?若是如维基百科上所言:” 大数据(Big data)是通常用来形容一个公司创造的大量非结构化和半结构化数据,这些数据在下载到关系型数据库(relational database)用于分析时会花费过多时间和金钱。” ,那么MySQL和Oracle数据库产品都不适合,反而是NoSQL数据库产品锁擅长的领域,但是这些数据要从二个角度去理解:一是需要提供用户查询访问,二是用于数据建模分析。前者,我们大家可以考虑存在NoSQL或者MySQL数据库产品中,Oracle数据库产品并不适合,若是数据建模分析,那就是分布式计算的范畴,比如Hadoop非常适合。
单台MySQL数据库能存储多大容量的数据,提供多少并发数据的服务,也跟其所运行的服务器硬件条件有关系,其本身的技术实现也有关。其实NoSQL、Oracle数据库产品也面临同样的问题,为此都不得不做一些数据拆分存储;若是使用Oracle数据库产品的话,多一个选择也即通过购买更多更贵的存储设备,或者购买更多的License,而采用MySQL数据库拆分存储的话,使用社区版本则为免费,使用企业版本的License费用相比较也低廉很多,为此MySQL和Oracle相比较的话,尤其大数据时代,前者更加有优势。
后再阐述一点,打消大家顾虑。我们现在业务数据垂直与水平拆分之后,有很多数据库表的数据量都是几千万,甚至上亿条数据,并且数据的更新和写入并发度非常高,但数据库的性能依然非常优越,关键是掌握MySQL的特性,从而知道如何使用与发挥MySQL的优势。
hwayw:
问题5、现在有很多人认为:NoSQL才是未来数据库王道,您是否也认同这种观点,为什么?
Jinguanding:
NoSQL数据库概念一传入国内的时候,技术圈内多数人还未明白NoSQL是何概念,就开始狂热盲目地追崇,然后大约2011年11月份开始,NoSQL数据库热运动开始退却,非常关键是大家已经明白了,何为NoSQL?NoSQL数据库适合那些应用场景?NoSQL数据库产品各自有那些优缺点,是否成熟?所以说NoSQL是未来数据库王道之说,是无法立足的,但是NoSQL数据库一定会有其一席之地。
NoSQL数据库适合存储非结构化性数据,且企业具有大规模的数据量,也即至少T级别以上,并且这些非结构化数据源源不断地产生,同时企业又非常想通过对这些非结构化的数据进行分析,获得一定的商业或企业策略制定的参考价值,也即需要用到分布式计算的功能,所以此领域的Hadoop软件系统应用前景非常广阔,且提供了一套完整的解决方案。每一种NoSQL数据库产品能适应的业务场景不同,其能实现的技术方案也有千秋,产品的稳定性等都需要技术人员进行考究,否则就会出现忙碌使用,容易导致遍地踏雷开花而身亡。
相关文章