速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

作为一名忙得要死的 DBA 人员,如何卸掉手上的一部分工作?

  • 2019-08-06
  • 本文字数:2018 字

    阅读完需:约 7 分钟

作为一名忙得要死的DBA人员,如何卸掉手上的一部分工作?

我没有时间顾全一切

我是一名非常忙的 DBA。开发人员常常在不经过我 Review 代码的条件下,直接提交到生产环境。这导致我一次又一次地陷入被动的境地,在美好的周末里,开发人员可能都在海滩上喝着美酒抽着雪茄,而我还在不断解决性能问题。这种境地是否似曾相识?也许开发人员可能并没有在海滩上享受生活,但也不会差得太大。


  • 你很忙,你需要保证备份是可恢复的,服务器是被锁定的,提供新的实例,不能停止打补丁。这一切的维护计划不会自动执行

  • 开发人员的工作也是如此,他们需要不断地更新系统,但是相较于 DBA 的修改,比例有所不同。通常来讲,开发人员管理的代码远远多于 DBA 管理的。

  • DBA 没有足够的时间审查所有的内容,修改的内容直接发布到生产环境,造成问题时 DBA 就不得不需查看当时的修改内容。如果 DBA 有时间的话,就应该在评审期进行检查。

这是一场噩梦,又会发生什么?

想象一下,如果有一群人可以帮你审查代码,如果每一个开发人员都有一个你信任的“守卫”来做代码审查?如果随着时间的推移你可以帮助程序员能够自己有能力检查 SQL 代码——如果这样可以减少您花费 1%、10%、50%、100%的额外时间,又会怎样呢?你是否可以想象得到,躺在沙滩上的人会不会变成你自己呢?

行,但是该怎么办呢?我们的开发人员并不精通 SQL

我们先看看 DBA 在代码评审时应该做哪些事情:


  • 确保格式正确,符合全部的标准。

  • 是否有潜在的 SQL 注入的风险。

  • 考虑修改的风险,比如说在一个 10 亿数据的表上面,修改聚集索引所花费的时间,实时性要求比较高的系统是否能接受这种时间上的消耗。

  • 考虑一下对于性能的影响 —— 是否会导致 tempdb 溢出?是否会产生死锁?执行计划是否变糟?

  • 代码是否符合开发人员的预期,merge 语句中的 update 语句是否正确。


想要开发人员足够了解 SQL,并能够独立自查自己的代码,减少线上问题,有许多需要注意的东西。


以上列出的只是其中一部分问题。通常来讲,快速看一遍代码很容易做到,但是没什么太大的作用。花费时间去思考修改的内容往往能够找出问题,但是也比较耗时,而且 DBA 往往没有那么多时间。所以这种情况,我常常称是一种恶性循环。


下面我们还是来分析一下 DBA 做的每一件事,看看我们能做些什么。

确保格式正确,符合全部的标准

自动化的方式可以直接节省全部的时间。在提交代码的时候,自己写一些工具来验证代码的格式是否正确,这里可以使用 DacFx 提供的功能,或者购买 Redgate SQL Code Guard,或者采取一些其他的方式。较好的方式是在提交代码的时候,如果不符合你的标准,就自动将格式修改正确。在这种方式下,你基本可以确认,已经提交的代码一定是符合标准的。


注意:我假设执行时,你的代码在源代码管理中,并且它不会停止所有操作(可能不停止备份)

是否有潜在的 SQL 注入的风险

将这 100%自动化,是否使用了 sp_executesql 或 exec 这种“有风险”的存储过程?如果有的话你可以发出警告,或者你可以检查代码来查看是否有传递连接字符串的情况。

考虑修改的风险以及对于性能的影响

我把这两个问题合并在一起说,这里有两件事需要你来做,第一件事是提供一个好的测试环境,开发人员可以在这里编写性能测试。保证每次提交代码的时侯,运行这些测试,如果需要检查的脚本(包括需要部署的脚本)未在指定时间内完成检查工作,则阻止项目打包。


你可以做的第二件事,是跟开发人员一起工作并对他们进行一些训练,比如说在一个小时的午餐时间分享一些信息给他们,就是一个比较好的方式。分享的主题可以包括:“如何查看执行计划”、“SQL Server 以及索引相关的内容”、“如何统计比较感兴趣的信息”等等。我觉得你脑海中浮现的内容肯定比我想到的更多。我发现,当开发人员和 DBA 都开始书写并分享自己的见解的时候,这种方式会更加奏效。尽管内容可能并不是很深入,但是这并不重要,因为开发人员和 DBA 在这个过程中都会学习到一些知识。


好的性能测试需要有人去编写,而且,开发人员通过这个可以学习到一些东西,比如说如何查看执行计划,一旦有了这些测试,你的生活就会瞬间变得很惬意。如果培养了一个学习环境,在需要时提供一些指导,那么你就可以逐步地将代码 Review 的工作留给开发人员自己,自己从每天繁杂的工作中解脱出来,DBA 团队焕然一新,把他们精力放在更精彩的数据库工作上。

代码是否符合开发人员的预期

这对我来说是一个非常关键的问题,你可以随意购买许多格式化工具,但是即使是世界上最漂亮的代码也可能有大量的逻辑错误。如果代码是 T-SQL,我们可以使用测试框架 tSQLt,来确保我们编写的代码符合一组既定标准。代码评审可以查看已经编写的测试和需求,并查看测试是否满足条件。


实话实说,一旦你开始对数据库代码使用单元测试,并且使用像代码审查之类的流程来监控工作的质量,在构建一种学习和共享的文化,那浪费掉的时间就可以收回来做别的事情了。想象一下,你和开发者一起,坐在海滩上喝着冰镇饮料,抽雪茄,是件多么惬意的事情。


原文链接:


As a DBA, how do I offload some of my work?


2019-08-06 08:002282

评论

发布
暂无评论
发现更多内容

昆仑数据库 MySQL 连接协议简介

KunlunBase昆仑数据库

国产数据库

什么是“企业级”低代码?成为企业级低代码必须具备的5种能力

优秀

低代码 企业级低代码平台

AITSM:看人工智能如何重塑IT服务管理

云智慧AIOps社区

人工智能 运维 安全 监控 IT管理

KunlunBase对MySQL私有DML语法的支持

KunlunBase昆仑数据库

国产数据库

KunlunBase 读写分离方案

KunlunBase昆仑数据库

无人自助洗车项目如何?好不好做

共享电单车厂家

自助洗车加盟 车白兔自助洗车 无人自助洗车项目

KunlunBase指导手册(四)从 Oracle 实时同步数据到 KunlunBase

KunlunBase昆仑数据库

国产数据库

美团二面:为什么Redis会有哨兵?

Java全栈架构师

Java redis 程序员 面试 后端

ORACLE进阶(十四)转义字符讲解

No Silver Bullet

oracle delete 转义字符 7月月更 TRUNCATE

SAP Fiori @OData.publish 注解的工作原理解析

汪子熙

SAP Fiori SAP UI5 ui5 7月月更

Pyecharts结合Pandas绘制图表

迷彩

数据分析 数据可视化 7月月更

Sample上新,从API 8开始支持!速来拿走

HarmonyOS开发者

HarmonyOS

SpringSecurity中的密码加密

急需上岸的小谢

7月月更

Kunlun-Storage vs PostgreSQL OLTP 测试

KunlunBase昆仑数据库

国产数据库

KunlunBase的Fullsync高可用机制简介

KunlunBase昆仑数据库

国产数据库

性能测试中的随机数性能问题探索

FunTester

自助洗车更轻松更自在的洗车方式

共享电单车厂家

自助洗车 自助洗车加盟 车白兔自助洗车

华为云张修征:将金融作为战略投入的重点行业,助力中国金融机构数字化升级

科技热闻

上班族是否也能加盟自助洗车?

共享电单车厂家

自助洗车加盟 车白兔自助洗车

KunlunBase功能之insert/update/delete...returning语句

KunlunBase昆仑数据库

国产数据库

解读Go分布式链路追踪实现原理

华为云开发者联盟

Go 开发

腾讯一面:内存满了,会发生什么?

程序员小毕

程序员 腾讯 面试 程序人生 计算机

阿里内网GC面试小册,仅7天Github获赞96.9K

程序知音

Java 阿里巴巴 程序员 后端 JVM

连续4周上榜的这位开发者,活出了当代大学生该有的样子

OpenI启智社区

深度学习 开源 大学

KunlunBase指导手册(三)数据导入&同步

KunlunBase昆仑数据库

国产数据库

KunlunBase 0.9.1版本Sysbench性能测试报告

KunlunBase昆仑数据库

国产数据库

商品管理功能越来越丰富,不愧是 Pro 系统!

CRMEB

共享自助洗车是车主自己洗吗?

共享电单车厂家

共享自助洗车 自助洗车加盟 车白兔自助洗车

自助洗车加盟一般多少加盟费?

共享电单车厂家

自助洗车加盟 自助洗车品牌 车白兔自助洗车

春风拂过希壤,能否成为元宇宙创作的起点?

脑极体

小数据量用户场景使用KunlunBase的价值

KunlunBase昆仑数据库

作为一名忙得要死的DBA人员,如何卸掉手上的一部分工作?_软件工程_Disqus_InfoQ精选文章