AICon 北京站 Keynote 亮点揭秘,想了解 Agent 智能体来就对了! 了解详情
写点什么

作为一名忙得要死的 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:002384

评论

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

阿里云加入“一云多芯”应用创新计划,首批通过金融专有云能力评估

云布道师

混合云

YonTalk 大咖论道:YonBuilder 低代码开发平台能力解析

YonBuilder低代码开发平台

ChatGPT已能操控机器人,工程师连代码都不用写,网友:微软在搞天网?

Openlab_cosmoplat

人工智能 机器人 开源社区 ChatGPT

焱融科技荣获爱分析·信创产品及服务创新奖

焱融科技

#高性能 #分布式文件存储 #文件存储 #全闪存储 #容器存储

如何通过Java代码在PowerPoint 幻灯片中插入公式

在下毛毛雨

PowerPoint 公式 java‘

软件测试/测试开发丨4步,用 Docker搭建测试用例平台 TestLink

测试人

Docker 软件测试 自动化测试 测试开发 testlink

Feast on Amazon 解决方案

亚马逊云科技 (Amazon Web Services)

人工智能

你的收藏不能少的Spring笔记,阿里十年架构师手写Spring笔记

小小怪下士

Java spring 程序员

Redis缓存穿透/击穿/雪崩以及数据一致性的解决方案

Java 缓存 穿透 击穿 雪崩

深耕智能边缘研究和应用,英特尔中国研究院、南京英麒联合探索算力前沿

科技热闻

国内外低代码开发平台优劣势一览

YonBuilder低代码开发平台

迪士尼的“元宇宙梦”醒了

Openlab_cosmoplat

开源社区 元宇宙

网心科技多项边缘计算成果亮相第十届中国网络视听大会

网心科技

喜报:旺链科技成为龙芯生态重要合作伙伴

旺链科技

区块链 生态合作

亚信科技AntDB数据库荣获互联网周刊金i奖“2022年度产品”

亚信AntDB数据库

数据库 AntDB 国产数据库 AntDB数据库 企业号 4 月 PK 榜

格式塔理论

Data 探险实验室

可视化 大屏可视化 可视化看板 大屏布局 仪表板

软件测试/测试开发丨做web自动化时,定位元素常用方法有哪些?

测试人

软件测试 自动化测试 测试开发 Web自动化测试

卡奥斯赋能发展引擎,“工赋山东”再加“数”!

Openlab_cosmoplat

工业互联网 开源社区

亮相数字化转型大会!卡奥斯助力两化融合工业转型!

Openlab_cosmoplat

工业互联网 开源社区

智慧公厕解决方案,光明源方案揭秘

光明源智慧厕所

智慧城市

ChatGPT也BUG?带你走进ChatGPT背后的网络基础设施

郑州埃文科技

人工智能 ChatGPT

一次偶然机会发现的MySQL“负优化”

Java MySQL 数据库 性能优化

让ChatGPT手把手教我们学操作系统是一种怎样的体验?

Java全栈架构师

程序员 AI 后端 操作系统 计算机

Mac OS如何显示隐藏文件和文件扩展名

互联网搬砖工作者

The Foundry Modo 16 Mac版(专业的三维建模软件)

Rose

mac软件下载 Foundry Modo 三维建模软件

不会PS没关系,AI拼图技术已能以假乱真|斯坦福研究

Openlab_cosmoplat

开源社区 ps

理性探讨AIGC未来的发展方向

加入高科技仿生人

人工智能 低代码 AIGC

苹果电脑删除磁盘分区及双系统分区的办法

互联网搬砖工作者

Double-check 技术:Golang 中多线程编程的必备技能

Jack

golang 设计模式

Java:如何在PowerPoint幻灯片中创建散点图

在下毛毛雨

图表 PowerPoint java‘

软件测试/测试开发丨Web自动化总卡在文件上传和弹框处理上?

测试人

软件测试 自动化测试 测试开发 selenium

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