前阿里资深技术专家的 MySQL 心路历程

15706475-7d1eacc43c3adc35

主要分享的内容:

  1. 和 MySQL 打交道的经历;
  2. 你为什么要了解数据库原理;
  3. 建议的 MySQL 学习路径;
  4. DBA 的修炼之道。

和 MySQL 打交道的经历

以丰富的经历进入百度

在读书的时候,做了很多项目,也实习过不少公司,简历里面的经历就显得很丰富了。在面试的时候,有个让我印象很深刻的事儿。面试官问我说,你有这么多实习经历,有没有什么比较好玩儿的事?我想了想答道,跟你说个数据量很大的事儿 ,在跟移动做日志分析的时候我碰到了几千万行的数据。他听完以后就笑了。后来,进了百度才知道,几千万行那都是小数据。

开始尝试看源码解决问题

加入百度后,是在贴吧做后端程序,比如权限系统等等。那个时候,还仅仅是个 MySQL 的普通用户,使用了一段时间后就出现问题了:一个跑得很快的请求,偶尔会又跑得非常慢。老板问这是什么原因,又不好意思说不知道,于是就自己上网查资料。

但是,2008 年那会儿,网上资料很少,花了挺长时间也没查出个所以然。最终,只好去看源码。翻到源码,当时就觉得它还蛮有意思的。而且,源码真的可以帮我解决一些问题。

于是一发不可收拾,从那时候就入了源码的“坑”。

混社区分享经验

2010 年的时候,阿里正好在招数据库的开发人员。虽然那时还只是看得懂源码,没有什么开发经验,但还是抱着试试看的态度投了简历。然后顺利通过了面试,成功进入了阿里。之后,干了 7 年多才离开了阿里。去了阿里以后,我才建了博客、开了微博参加社区活动。

为什么要了解数据库原理?

了解原理能帮你更好地定位问题

举一个例子:每天早上都得重启一下应用程序,否则就提示连接数据库失败。

按照这个错误提示,应该就是连接时间过长了,断开了连接。数据库默认的超时时间是 8 小时,而员工平时六点下班,下班之后系统就没有人用了,等到第二天早上九点甚至十点才上班,这中间的时间已经超过 10 个小时了,数据库的连接肯定就会断开了。回去把超时时间改得长一点。后来,按照这个方法,问题已经解决了。

由此,也更深刻地体会到,作为开发人员,即使我们只知道每个参数的意思,可能就可以给出一些问题的正确应对方法。

了解原理能让你更巧妙地解决问题:

如果我们懂得一些参数,并可以理解这些参数,就可以做正确的设置了。而如果我们进一步地懂得一些原理,就可以更巧妙地解决问题了。

看得懂源码让你有更多的方法:

如果能看得懂源码,你的操作行为就会不一样。

MySQL 学习路径

首先你要会用,要去了解每个参数的意义,这样你的运维行为(使用行为)就会不一样。千万不要从网上拿了一些使用建议,别人怎么用,你就怎么用,而不去想为什么。再往后,就要去了解每个参数的实现原理。一旦你了解了这些原理,你的操作行为就会不一样。 再进一步,如果看得懂源码,那么你对数据库的理解也会不一样。

如果一定要总结出一条学习路径的话,那首先要会,然后可以发现问题

发现问题后,建议是,你可以尝试先不看答案自己去思考,或者去数据库里面翻一翻,这将会是一个不错的过程。

再下一步就是实践。之后当你觉得开始有一些“线”的概念了,再去看 MySQL 的官方手册。要不要直接翻手册呢?建议是,一开始千万不要着急看手册,这里面有 100 多万个英文单词,你就算再厉害,也是看了后面忘了前面。所以,你一定要自己先有脉络,然后有一个知识网络,再看手册去查漏补缺。

DBA 的修炼

DBA 和开发工程师有什么相同点?

DBA 本身要有些开发底子,比如说做运维系统的开发。另外,自动化程度越高,DBA 的日常运维工作量就越少,DBA 得去了解开发业务逻辑,往业务架构师这个方向去做。

开发工程师也是一样,不能所有的问题都指望 DBA 来解决。因为,DBA 在每个公司都是很少的几个人。所以,开发也需要对数据库原理有一定的了解,这样向 DBA 请教问题时才能更专业,更高效地解决问题。

所以说,这两个岗位应该有一定程度的融合,即:开发要了解数据库原理,DBA 要了解业务和开发。

DBA 有前途吗?

强调的是,每个岗位都有前途,只需要根据时代变迁稍微调整一下方向。

DBA 接下来一方面是要了解业务,做业务的架构师;另一方面,是要有前瞻性,做主动诊断系统,把每个业务的问题挑出来做成月报,让业务开发去优化,有不清楚的地方,开发同学会来找你咨询。你帮助他们做好了优化之后,可以把优化的指标呈现出来。这将很好地体现出你对于公司的价值。

有哪些比较好的习惯和提高 SQL 效率的方法?

这个方法,总结起来就是:要多写 SQL,培养自己对 SQL 语句执行效率的感觉。以后再写或者建索引的时候,知道这个语句执行下去大概的时间复杂度,是全表扫描还是索引扫描、是不是需要回表,在心里都有一个大概的概念。这样每次写出来的 SQL 都会快一点,而且不容易犯低级错误。

看源码需要什么技术?

看源码的话,一是要掌握 C 和 C++;另外还要熟悉一些调试工具。因为代码是静态的,运行起来是动态的,看代码是单线程的,运行起来是多线程的,所以要会调试。

另外,不建议你用可视化的工具。虽然可视化工具很方便,但你不知道这个操作点下去以后,实际上做了什么,所以我建议你自己手写代码和 SQL 语句,这样对一些底层原理你会更明白。

学数据库要保持什么心态?

不只是数据库,所有多线程的服务,调试和追查问题的过程都是很枯燥的,遇到问题都会很麻烦。但是,你找出问题时的那一下会很爽。

你得找到这种感觉,它可以支持你度过接下来要枯燥很久的那段时光,这样你才能继续坚持下去。

当然,如果有更快乐的学习过程还是更好的,希望这能让你学习得轻松些。

15706475-5b648e34a15029a4
前阿里资深技术专家的 MySQL 心路历程

15706475-05b37648019ed9ef.jpg
未标题-2.jpg

【想了解更多大数据文章,请关注作者 加群733234221索要更多大数据视频教程......群文件可以直接下载领取】

猜你喜欢

转载自blog.csdn.net/weixin_34112030/article/details/86921224