0

《Oracle 优化日记》作者谈DBA的学习成长及经验积累 | 坐而论道

白鳝 2017-01-07
135

主要讨论人员

  • 提问: 肖鹏

  • 解答: 徐戟(白鳝)

嘉宾介绍

徐戟(白鳝)

从事应用开发、Oracle数据库、性能优化工作超过20年,一直从事IT咨询服务和系统优化工作。
曾供职于DEC、赛格集团、长天集团、联想集团等国内外知名企业,现任南瑞集团信息系统集成分公司CTO。
1999年起致力于Oracle数据库性能优化等方面的研究,参与了大量性能优化项目,积累了大量的实际工作案例。
著有《ORACLE 优化日记》、《ORACLE RAC日记》和《DBA的思想天空》三本数据库技术图书。
曾组织开发了国内首套电信级联机实时计费系统、国内第一套三检合一的检验检疫综合管理系统,并主持设计IPP金融中间业务平台,即金融大前置,该平台目前在国内十多个商业银行中使用。

精彩问题

本文涉及的提问包括如下几个:

  1. 目前MySQL的版本更新很快,在有一定存量的基础下,怎么看待版本更新,是否可以实现不骚扰业务,也不投入过多的人力完成版本的大面积升级?

  2. 目前的数据库种类非常的多,Oracle、MySQL、Redis、MongoDB、PostgreSQL,作为DBA来说是应该专而精?还是应该广而博?是否需要区分阶段?

  3. 自动化运维系统可以极大的缓解DBA的工作,但是普遍来说DBA的综合开发能力有限,那么DBA应该以什么角色参与到自动化运维系统中,参与多深?

  4. 目前的架构一般会用到多种数据库,比如redis和MySQL,作为运维方来说在大规模的情况下,是按照软件水平方向进行运维,管MySQL的只管MySQL,管redis的只管redis,还是按照业务垂直划分,某个DBA同时管着某个业务的reids、mysql?优劣各是什么?

  5. 有没有适合DBA的学习型组织的优秀实践?

精彩回复

  • 在有大量存量系统的情况下,纯粹为了升级而升级是没必要的。

  • 一些企业采用了一线管系统,二线管专业技术平台的切分方法,将纵横管理划分在两条线上

  • DBA所需要的技能和知识涵盖面十分广。个人学习比较枯燥,学习起来也比较慢。因此群体学习是一种十分好的学习方法

Q1. 目前MySQL的版本更新很快,在有一定存量的基础下,怎么看待版本更新,是否可以实现不骚扰业务,也不投入过多的人力完成版本的大面积升级?

版本升级的目的和驱动力无外乎以下几个方面:

  • 需要新功能支持业务

  • 提升性能

  • 消除BUG

  • 运维支持能力对老版本支持不足

如果不是为了上面的原因,在有大量存量系统的情况下,纯粹为了升级而升级是没必要的

不骚扰业务,也不投入过多人力的情况下完成大面积升级是可以做到的,通过自动化作业脚本完全可以做到批量升级。但是如果在IT架构没有达到一定水平之前做这样的事情,是风险极大的。

如果你的数据库都采用了支持自动切换的主从复制的高可用架构,那么完全可以实现对业务影响很小的后台静默升级,而且由于架构保证了数据库的高可用和数据冗余备份,因此这种操作完全可以通过自动化运维作业去实现。

比如说子衿技术团队的NBASE-MH MYSQL高可用集群拥有1主2备三个可读写分离的独立数据库,而且三个库之间可以手动和自动切换。可参考如下图:

当需要进行数据库升级的时候,如果原版本和欲升级版本之间的主从复制是兼容的,那么就可以采取先升级一台从库,等升级完成后实现数据同步,再升级另外一个从库,完成后,将主库切到其中一个从库,然后升级主库。

这些操作可以通过自动化脚本实现,事后可以进行自动化健康性检查。DBA需要重点检查告警日志就可以了。不过如果你的数据库架构没有那么完善,那还是老老实实备份了数据,然后一点点的去升级吧。

Q2. 目前的数据库种类非常的多,Oracle、MySQL、Redis、MongoDB、PostgreSQL,作为DBA来说是应该专而精?还是应该广而博?是否需要区分阶段?

专而精,广而博,一专多能是DBA的三种知识结构。其实实际上能做到任何一点的DBA,混口饭吃都是没有任何问题的,而且肯定不是只能混口饭吃的境界,完全可以比较滋润的在IT圈里混日子了。

你想做哪种DBA,实际上更主要的是你的性格和你对自己的要求而已。再说的高大上一点就是和你的幸福感来自哪里有关系。

如果你对某个数据库掌握到了比较极致的程度,那么你只需要专一种数据库,就足够让你有一份不错的工作,在圈子里有足够的人气和地位,并且让你自己的工作生活有足够的继续学习的动力了。

广而博的DBA,往往是做集成之类的工作成长起来的,没有对某种技术做特别深入的研究和学习,但是在工作中积累了大量的各种各样的工作技能,见过各种各样的数据库和系统。他的经验足以支撑他在工作中如鱼得水。不过这样的DBA也有明显得缺陷,他无法深入的在某个领域做十分高端的技术工作。这会限制他的最终发展。

一专多能是结合了上面两种的优势,做到专而精并不是每个人都能做到的,这不仅仅需要你不断的学习,更重要的是,需要一定的机遇。

而一专多能是很多DBA能做到的,刚开始的时候主攻一种技术,随着年龄和阅历的增加,接触了更多的项目,接触了更多的技术,每种技术虽然无法达到第一种的深度,但是都会涉猎,都能折腾几下。这种知识结构可以使DBA在自己的工作中获得更多的机会,也更容易抓住某个机会,成功转型。在往IT架构师发展的路上,这种一专多能的技能是十分重要的。

Q3. 自动化运维系统可以极大的缓解DBA的工作,但是普遍来说DBA的综合开发能力有限,那么DBA应该以什么角色参与到自动化运维系统中,参与多深?

自动化运维的范围太广泛了,包括自动化部署、自动化发布、自动化巡检、自动优化、自动化拓扑维护、自动化调用跟踪、应用性能监控等等。

作为DBA参与编程开发肯定不是强项,但是贡献指标采集脚本,贡献分析策略和知识库、配合系统调试,反馈系统问题等方面还是可以积极参与的。

另外具有一定开发能力的DBA,写一些小的工具,脚本,对DBA工作还是很有帮助的,学会一种脚本语言,比如PYTHON/PERL/SHELL等,在某些情况下也会派上用场。

Q4. 目前的架构一般会用到多种数据库,比如Redis和MySQL,作为运维方来说在大规模的情况下,是按照软件水平方向进行运维,管MySQL的只管MySQL,管Redis的只管Redis,还是按照业务垂直划分,某个DBA同时管着某个业务的Reids、Mysql?优劣各是什么?

横向纵向管理是各有利弊的

按系统划分维护职能,可以让运维人员对整个系统有一个十分统一的认识,对整个系统的全栈架构都了如指掌,一旦出现一些问题,可以站在一个全面的角度去考虑,不容易局限于某个IT组件。不过一个人很难在多个知识域都能研究的十分深入,因此很难做到深入。限制了维护人员专业方面的深入。

如果按照技术平台划分,在某个技术平台上可以做到专业,技术能力和深度都有保障。但是比较难对整个系统的整体有一个全面的理解,遇到比较深的问题,无法及时理解整个系统的全栈结构,无法解决一些综合性的问题。

为了解决这个问题,一些企业采用了一线管系统,二线管专业技术平台的切分方法,将纵横管理划分在两条线上。也有些企业在划分专业线的基础上,设置了系统经理的角色,系统经理必须对整个系统有全面的了解。

Q5. 有没有适合DBA的学习型组织的优秀实践?

DBA所需要的技能和知识涵盖面十分广。个人学习比较枯燥,学习起来也比较慢。因此群体学习是一种十分好的学习方法。

比如我们要学习某本书,这本书有20章,400多页,一个人看这本书大概需要一个多月时间。而群体学习,10个人参加学习,每个人分配2章,看完后给大家讲,和大家讨论,那么可能半个月就能完成学习了。而且这种学习方法,学习的效果也远远好于自己一个人闷头看书。

可能很多DBA喜欢参加各种沙龙活动,普通的沙龙活动貌似大家都听的挺好,也有不少收获,但是由于沙龙这种活动主要是听别人讲,自己的思考比较少,所以每次从沙龙活动中虽然也能有收获,但是往往学到的东西是无根的,很容易再次丢失。在沙龙中如果能增加互动,增加实际操作,对抗演练等活动,可能会事半功倍。

对学习型组织来说,大家一起做些有价值得事情是大家都追求的,其他的可以大家一起做的事情也很多,比如一起写个小工具、一起翻译一本技术书籍、一起写一套培训课件等,都是十分有趣和有价值的。


最后修改时间:2020-05-08 00:20:46
「喜欢文章,快来给作者赞赏墨值吧」
文章转载自白鳝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论