点击蓝色“有关SQL”关注我哟
加个“星标”,天天与10000人一起快乐成长
图 | L
当信息管理系统还是 C/S,B/S 模式的年代,数据库优化交给DBA一个人做,还没有太大的压力。有些DBA,可能还兼顾开发的角色。数据进出,也没有多少量。系统的架构设计也就 2 层,一个人要做到全栈,并不是特别难的事情。
放在现在这个时间点,数据库优化再由DBA一个人担任,可能就不合适了。原因会有这些:
数据库是开发的盲区
前端的框架现在是越来越丰富,从 JQuery, Angular 1.0-8.0, React, Vue 等等,从前切片的工程师,现在变得开始要抓那么多细节。
2006年,我在写B/S的时候,甚至还有时间手撸css/html/js, 我还记得 css 的12个滤镜,我都玩得不亦乐乎。
但现在呢,除了这么多框架,还要考虑 MVC, Microservice. 那开发对数据库的性能还有那么大的兴趣吗?显然不如写个跑马灯来的快乐吧。
当下的数据库,就被当成了一个数据黑盒,就像是家里的洗碗机,脏碟子,油盘子丢进去,10分钟后光亮如新的出来。甚至还各种花招式,连锅一起,放上咖啡杯,安排的老老实实。
开发们,你们老实说,各种ORM工具,你们少用了么?但这些ORM对数据库的伤害,你们都熟知吗?
SQL优化丢给DBA
最常见,也是最害怕的开发人员玩SQL的模式,动态SQL语句。如果说,为了灵活处理逻辑,写动态拼接的SQL,还情有可原,那么下面这样的语句,是不是可以用下绑定变量:
SET @SQL_BODY = '
update a
set SaleAmount = SaleAmount * '+ convert(nvarchar,@IncrementalSize)+
'
from Sales a
where a.SaleAmount < ' +convert(nvarchar,@SalesLower)
为了自己编程的便易,把这类引起CPU压力的动态SQL,丢给DBA.我真替他们心疼!
当然也会有很多开发认为,现如今硬件那么快了,内存那么大,硬盘那么大,CPU那么快,为什么数据库还那么慢,你们DBA不行哇。
是的呢,现代网络这么发达,手机随处可见,也没见你的产品,流量跑过上亿呀!
满目自信,SQL优化不难
老有开发认为,加索引就能解决性能问题。于是,一张表上百个索引,更一条数据,就耗时大几秒。
不行,换数据库,换架构,分库分表。折腾了大半年,由于本质没解决,反而把火引到了别的不熟的存储产品上,离正道越来越远。
当然也有很多老板认为SQL优化很重要,处处讲究性能,表表要有索引,Where 一定要加日期等。但却没想不到,开发人员一个7000万的UPDATE,把库直接干熄火。
火烧眉毛的DBA
我一直强调,数据库开发和管理,是个体系活儿。必须对数据库知识体系结构掌握的通透,下起刀来,才游刃有余。
数据库优化,当然是DBA的活儿。那仅靠一个人肯定不行,需要团队。要培训开发,要审核数据库的SQL日志,更要懂安全驾驶数据库。
要做到安全驾驶,除了方向盘要稳,还需要很多其他素质:懂得看盘,懂得导航,懂得路规,懂得礼让。
安全驾驶数据库,也有很多面知识要掌握。
培训开发规范,表结构设计,建模基础,命名规范,索引设计,范式与逆范式。
正确评估数据库性能阈值:做好数据库性能基准测试,压力测试,数据库对象画像,比如空间统计,资源消耗排名以及慢SQL审核
云计算融合:DBA最大的挑战来自云。一个项目的UI开发,并不会随着后台存储切换到云上,而减少。但DBA的竞争就激烈了,牛皮的DBA可以一人管30,50台数据库服务器,弱鸡DBA就没有空间了。就跟歌手一样,以前烂歌手,还有很大的市场,只要你拉下脸,肯唱,观众没别的地儿可去,还得听着你嗷嗷滴吼。但现在呢,我打开QQ音乐,就爱听最好听的。
以上的部分观点来自于机工华章的赵编辑送我的书《数据库高效优化》,这本书重实践,讲优化,深入浅出谈体系,是本不可多得的好书,推荐给你!
全书分为四篇:
引言篇,总结了实际工作中常见的问题,并通过真实案例让读者直观感受到SQL语句优化的重要。同时在每个案例后面,还针对案例出现的问题进行了总结;
原理篇,主要讲解了和SQL语句优化相关的基础知识及必要的一些操作,包括优化器、成本、执行计划、统计信息、语句解析、游标、绑定变量、数据对象等诸多方面;
优化篇,这是本书的重点,详细讲述了优化器对于SQL语句的多种处理方式,包括查询转换、数据对象访问方式、表关联、半/反连接、子查询、排序、并行等等。读者了解了这些方式,可以更好地理解优化器的行为,也就使优化更加有的放矢。这部分实战性极强,读者可以作为案头参考资料,随时查阅,反复实践;
实践篇,从数据设计开发规范、数据库画像、SQL优化方法论、AWR报告解读及数据库审核平台实践等几个角度全面讲解在实际工作中如何通过优化SQL,大幅度提高数据库的性能。
本号再做一次打卡送书活动。规则如下:
从今天起,到2月11日结束
连续在头条文章打卡满21天
打卡内容随意,字数要求14字以上
不要在同一篇文章下连续打卡
只送一位读者,老朋友优先
--完--
往期精彩:
本号精华合集(三)
如何写好 5000 行的 SQL 代码
如何提高阅读 SQL 源代码的快感
我在面试数据库工程师候选人时,常问的一些题
零基础 SQL 数据库小白,从入门到精通的学习路线与书单