物联网老兵亲授:SQL Server DBA实战运维手册
|
掘金这地方,老熟人一刷就看见你ID后面挂个“已读”,比SQL Agent作业还准时。去年国庆,我在南苑机房蹲着换第三块RAID卡,对讲机里小王喊“DBA快上来”,我说“上什么上我正扒磁盘托架呢”,结果他喊的是“主库redo log爆了”,不是“食堂红烧肉没了”。 冷风是从机柜底部往上灌的,不是从天花板下来——这点我敢打包票。因为蹲久了膝盖发麻,抬腿时裤脚被风兜得啪一下贴在UPS背面散热格栅上,嗡鸣声忽然高了半拍。那台UPS用了七年零四个月,风扇转速表早归零了,但只要用手背蹭它外壳,能感觉到振动频率在变。监控页面显示一切正常。我以为监控覆盖了——结果根本没覆盖:温度传感器插在PDU后面,物理盲区,整整十七厘米。 告警群99+,全是“自动清除”,没人点开看原始消息。小李截图发我:“这个‘Tempdb contention’告警,连续三小时每分钟一次。”我回他:“查下session_wait_stats里wait_type=’PAGELATCH_UP’的top3 resource description”。他秒回:“查了,全是tempdb的数据文件编号103、104、105。”我说:“停,别再往下查了,去把105号文件删掉。”他愣住。我原以为他要骂我疯了,结果他直接连上服务器rm -f /var/opt/mssql/data/tempdb_mdf_105.ndf——删完十秒,等待下降七成。这不是玄学,是去年春节前他们改过tempdb文件自动增长策略,但没同步更新filestream路径的硬编码逻辑,留了个裸奔的LDF尾巴,每次auto-growth都触发锁升降序重排……可这个我说不准,当时没抓到xevent trace,只靠perfmon里看到log flush延迟跳变反推的。 食堂剩饭在二楼东侧窗口,不锈钢餐盘边缘有三道划痕,深浅不一。第一道是去年五一,老周用叉子刮土豆泥留下的;第二道是我七月闷热天扒拉米饭时划的;第三道昨天刚添,小张端盘子撞了门框。我不记得哪天开始,只要看到那第三道痕,手就会先摸手机看有没有未读SQL Agent失败通知——已经形成条件反射,比Windows登录超时还准。 “物联网老兵亲授:SQL Server DBA实战运维手册”?站得住的地方,就一个词:优胜劣汰。不是说写得多好,是活下来的才配翻这本册子。我们组去年走三个DBA,两个倒在AlwaysOn故障演练翻车现场:一个在切换后没及时关secondary的backup compression,结果备份链崩了三天;另一个压根不知道sys.dm_hadr_database_replica_states里is_local=0的记录里,synchronization_state_desc字段的‘NOT_HEALTHY’跟‘SUSPENDED’在DMV里压根不同步——他查视图报错,就真信了“数据库同步正常”。这两个名字我都懒得提,但他们留下的SQL Job命名风格我还得维护:Backup_Daily_V2_Retry_If_Failed_Last_Time_Before_Holiday。太长,agent日志截断,但不敢改,一改就触发上游ETL调度器校验失败。 半夜三点被电话吵醒,对方声音带电流杂音:“主库CPU打满,但sp_who2全是sleeping。”我边穿裤子边敲键盘连上去,showplan_xml看了两眼就挂了——执行计划缓存里有个Parameter Sensitive Plan,参数嗅探叼住了一个历史极值,生成的索引扫全表,而那个索引前天刚被运维脚本根据“低使用率报告”给drop了。我让值班的先跑DBCC FREEPROCCACHE,但他卡在“是否确认释放所有计划”交互式提示上,连-h选项都忘了加。我说你Ctrl+C再重来,他说“Ctrl+C没反应”,我就知道他连的是Windows桌面版SSMS,不是Linux终端。我懒得说了,自己ssh过去,ps aux | grep sqlservr,揪出pid,kill -15——三十八秒后CPU回落。这速度比我们组报销流程审批快多了。 前天小王问我:“临时表建在tempdb还是model里更安全?”我没答,转头问他对讲机电量还剩多少。他翻过来看屏幕,说“百分之十二”。我说那你先去充个电。他刚转身,我瞥见他工牌挂绳底下露出半截打印纸,上面是某厂商给的“SQL Server 2022 IoT Edition”许可条款第7.3条手写批注:“不可用于车载T-Box本地存储节点”——他自己写的,蓝墨水,字有点歪。这事儿我早该提醒他,可上周五开会我盯着大屏上的SQL Error Log滚动,发现其中一条“Error: 825, Severity: 10”在凌晨1:23:17出现过三次,间隔刚好十六秒,但log_reuse_wait_desc始终是NOTHING。我当场截图发群里,没人回。后来我自己重建了那张堆表,加了row_number() over (order by getdate())强制分页……但到现在都没想明白,为什么偏偏是这张表。
文章配图,仅供参考 所以这本手册到底值不值?你自己心里有杆秤。我现在每天早上六点四十到机房,泡杯茶,先听十分钟低频噪音——是新换的冷水机组还是旧UPS老化加剧?听不出来,但我得听。听完了,再看一眼告警群未读数,然后打开手册第47页,不是查语法,是找那个被油渍糊住的脚注位置:2019年Q3补丁KB4534310对tempdb元数据锁的修改说明。那里印歪了,少半个句号。但那一页的纸角被我撕掉过,又用透明胶带粘回去,现在胶带泛黄翘边,像没愈合的旧伤疤。 这本册子,我建议你别从头看。直接翻到附录C,找“应急熔断checklist”,里面第三项写着:“当所有Agent job运行时间超过平均值二点三倍且持续四次以上,禁用job schedule,手工执行,并通知架构组——但务必在周一上午九点前恢复。”至于“二点三倍”怎么来的?手册没写。我告诉你:是老周当年被逼疯那天算的。他算了三百七十二次job平均耗时,取中位数的2.3倍向上取整。这数字现在还刻在他工位键盘F12键帽背面。你要不信,可以借他键盘摸一摸。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


DBA跨界创业:3个月用数据方法论跑通盈利模型
边缘AI视角下的物联网移动互联安全新挑战

