SQL Server运维踩坑15年实战解法
|
“这需求能跑通,我倒立写存储过程。” 李工刚说完就低头去摸白板笔——没水了,甩两下,啪地一声,墨囊裂了,蓝墨溅在PRD第7页的索引字段定义上。王蕊伸手抽了张纸按住,没说话,但指甲盖把纸边卷起了毛边。投影仪对焦不准,SQL执行计划那张图糊成一片黄晕,像谁拿热毛巾捂过屏幕。空调在滴水,嗒、嗒、嗒,节奏比我们讲阻塞超时还准。 优胜劣汰——不是我说的,是15年里它自己长出来的。2026年9月这个节骨眼,又撞上三个库同时做主从切流,凌晨三点接到告警,查出来是某个灰度版本的触发器里嵌了SELECT FROM sys.dm_exec_sessions……还带JOIN。我原以为是连接池配太小,结果翻日志发现,是那个埋点补丁包把sp_who2硬塞进事务里跑了三次。没人测并发场景,因为PRD第12页写着“仅用于内部管理”,排期表里标着P3。P3啊,连review都没过——可它上线了,且活了47天。 外卖汤洒了一点在桌上,刚好漫过“资源争用分析”那行字。老周端着碗过来擦,擦完顺手把桌上那摞打印的需求单往旁边推了推,最上面那份封皮印着“v2.3-终稿-202603”,底下压着三张A4纸没装订,页脚编号断在“附录C-索引失效回滚方案(待确认)”。没人收。我盯着那断掉的编号看了半分钟,后来才发现,C-1到C-3压根没写完,只有标题框,框里画了斜线,像随手划掉的债。 跟老板争执那次在10楼小会议室,他说:“为什么不能加个读写分离中间件?”我答:“能加,加完你得养五个DBA盯延迟抖动。”他笑:“真有那么玄?”——我当场打开手机连内网,调出上周五下午两点零七分的监控:主库CPU 89%,只因一个报表任务被误设为每日全量刷取用户标签宽表;而从库延迟峰值卡在187秒,只因某次release把WITH (NOLOCK)硬写死了,连sys.dm_db_index_usage_stats这种系统视图都加了——它不该加。我说完,他手机一直在震,微信弹窗飘在屏幕右下角:“财务催付款审批”,震了七下,他按灭,再没提中间件的事。 一个做了没人用的功能:去年底推的“自动索引健康度评分”后台服务。上线后埋点数据显示,运营后台点击率0.02%,全是测试账号刷的。但它在生产库里跑着,每天凌晨三点生成一份XML报告,往NAS写,写满三个月自动覆盖。我问过前端,没人接这个接口;问过数据组,说“评分维度和他们日常巡检不一致”;问运维,说“看起来像能用,就没关”。它就活着,像办公室绿植底下那只总也逮不到的潮虫。 还有个明确的主观判断:所有声称“用Query Store自动捕获性能回归”的团队,六个月内必然手动关掉Query Store。不是技术不行,是它记下来的执行计划太碎,根本筛不出有效对比项——除非你每条语句都加hint、都打唯一label、都走同一条参数化路径。没人干。我们去年给某业务线做复盘,翻他们三个月的Query Store历史,挑出最慢的20条查询,其中17条的实际执行耗时波动范围超过400%,而系统给出的“回归判定阈值”是±15%。我原以为是配置错了,结果发现,是DBA自己改的阈值,改成±300%,只为了不让告警邮件塞爆邮箱。
文章配图,仅供参考 会议室椅子少一把,张薇坐折叠凳上开的会,膝盖顶着桌沿,讲SQL Server 2022新特性时把腿换了个方向,凳子吱呀一声响。她说到列存储索引的批处理模式适配性时停顿了两秒,然后说:“其实我们线上,八成查询根本不走批处理——因为参数嗅探没关,每次缓存计划都错。”这话落地,没人接。王蕊低头删掉刚才在纸上画的E-R草图,换成画圆圈,一个叠一个,最后涂黑了三个。漏斗转化?呵,上次我们看订单支付失败日志,前十个最常出错的SQL里,七个是带OR的WHERE条件,两个是LEFT JOIN后在ON里写非等值过滤——这俩玩意儿SQL Server优化器直接放弃估算行数,全靠运气选执行计划。但PRD里没写“禁止OR”,排期表也没标“JOIN约束审查”,所以它们就上线了。优胜劣汰?不是谁赢谁输,是那些没被干掉的,刚好躲过了三次大版本升级、两次服务器迁移、一次存储阵列重构,还活着而已。 自己那份没人看的文档。叫《SQL Server运维避坑口诀》PDF,32页,最后更新时间是2025年11月。我发给所有对接过的开发群,三天后,在一个叫“基础服务支撑组”的钉钉群里,被@了一次:“老哥,口诀第17条说‘避免在函数索引列上做计算’,但我们现在WHERE DATEADD(day, -7, create_time) > GETDATE() 算违规吗?”我回:“算。而且你们这条SQL现在正占着tempdb里30GB空间,撑爆过两次。”没人再问。那文档现在还在共享盘根目录,文件名后面自动加了“(1)”——因为有人下载过,又重命名保存了一次。 下一步?把上周切流失败的那个实例,手工导出所有自定义作业的T-SQL定义,逐条扫一遍是否有WAITFOR或xp_cmdshell——不用自动化工具,就手写PowerShell脚本跑。为啥?因为上个月试过两个第三方扫描工具,其中一个把sp_configure的配置项当漏洞报,另一个干脆把master数据库的版本号识别成“未打补丁”。我不信工具了。信手写的,至少我删代码时,知道删的是啥。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


从资源浪费到精准匹配:服务器调优与选型实战
MySQL运维设计三合一:建站到高可用全栈实战
数据科学家建站无需懂运维:技术栈革新让建站极简
站长别单干!14年运维老炮儿的深度闭门TechTalk
ASP站长必学:边缘合规风控技术实战

浙公网安备 33038102330471号