SQL Server DBA必备:数据库运维实战手册
|
去年10月份,凌晨三点十七分,主库日志截断失败,AG同步延迟飙到四百一十二分钟——就在这节骨眼上,我翻开了那本《SQL Server DBA必备:数据库运维实战手册》,第83页,讲“日志备份链断裂的五种假象”。 我原以为会看到一张清晰的流程图,或者至少一句带版本号的判断条件。结果呢?一行加粗黑体:“先看msdb.dbo.backupset里有没有中断记录”。完了。再下一句是:“如果没,就查log_reuse_wait_desc”。中间夹着半句被标了灰色底纹的备注:“某些场景下该字段不可信”,没说哪些场景,没说怎么验证。我盯着屏幕看了十八秒,窗外雨刮器在挡风玻璃上左右左右左右地响,三声之后停了——后来才知道是隔壁机房维保人员把UPS切到了手动模式。
文章配图,仅供参考 这本书优胜劣汰。不是说它选题准、排版好、案例新,是真刀真枪筛过人。你敢照着第三章“AG故障自愈脚本”跑,十分钟内必然触发failover风暴;你按第五章“索引碎片自动重建阈值表”调参数,第二天早上巡检就会发现tempdb文件组里多了七个小文件,每个256MB,命名全是GUID开头加个_01——没人告诉你那个脚本里有个未声明的@file_growth_unit变量,它默认用的是KB,但CREATE DATABASE语句里写的却是MB。这个我敢打包票,因为我改了三遍才抓到是SET ARITHABORT OFF惹的祸。 老张那天下午蹲在我工位边啃包子,韭菜馅儿的,油顺着下巴滴到键盘F键上。他问我:“你真信这书里写的‘生产环境推荐启用即时初始化’?”我没答。他伸手敲了两下Ctrl+Alt+Del,弹出任务管理器,指给我看SQL Server进程的Private Bytes:42.7GB。我说:“刚启的服务,内存还没热。”他笑了一声,手机响了,是女儿老师打来的,说孩子作业少写了一页。他接完电话顺手把包子纸团成球,扔进我桌角的废纸篓——里面还躺着半盒没拆封的咖啡粉,是我上周加班时拆开又忘了冲的。 反常识的是,它最没用的章节反而救了我命。第六章“死锁图XML解析速查”,通篇都在教怎么看<owner-list>和<waiter-list>嵌套层级,连xmlns都标注了。可我真正卡住的,是那个不起眼的脚注小字:“若<deadlock>节点缺失process-list子元素,请检查trace flag 1222是否全局生效”。我翻了三遍目录都没找见这句话在哪——它不在第六章,在附录B“启动参数速查表”的倒数第二行,旁边还印着一个已弃用的sp_configure选项(show advanced options)。那天下午我试了七次dbcc traceon(1222,-1),全失败;第八次顺手加了-gb512,居然成功了。我不知道为什么,现在也懒得查文档,反正日志里终于出来了完整的等待链。 机房空调嗡嗡响,是那种左下角第三台机组的老毛病,低频震动传上来,震得我桌上半瓶矿泉水瓶身起波纹。我一边抄那个XML解析的XPath路径,一边听见王工在走廊喊:“谁动了镜像端口?!我这边backup log全超时!”他喊的是中文,但我脑子自动翻译成T-SQL——WAITFOR DELAY '00:01:00',再exec sp_executesql @sql。这事儿跟我没关系,我连镜像配置都删干净半年了,但他嗓门大,我下意识抬头看了一眼墙上的时间:15:41:09,刚好比NTP服务器慢2.3秒。我没记这个数,只是记住了秒针跳得比平时快半拍。 失败案例有两个。第一个是书里那个“自动收缩检测+告警”脚本,它用sys.dm_db_index_physical_stats查avg_fragmentation_in_percent,但没加WITH (NOLOCK)——我们线上库读写压力大,这句一跑就是十五秒阻塞,等它返回时,SQL Agent早就把下一轮job干掉了。第二个更绝:第127页“AlwaysOn健康状态可视化仪表盘”,Power BI连接字符串里硬编码了localhost,作者没写“请替换成你的WSFC名称”,也没写“若使用Kerberos请确认SPN已注册”。我就这么直愣愣地填了我们的集群VIP,然后Power BI弹窗报错:“无法建立与目标主机的信任关系”。我在那儿坐了七分钟,盯着那个错误框,闻到自己左手边半块冷掉的提拉米苏正散发甜腻霉味——昨天团建剩下的,没人吃,就搁在显示器散热口旁。 我说不准那个“自动清理过期备份”的存储过程到底在删哪个备份集。书里只说“根据retention_day参数滚动删除”,但脚本里调用的是msdb.dbo.sp_delete_backuphistory,而它删的是backupset表本身,不是物理文件。我试过用xp_cmdshell去验证,结果因为没开外围配置被拦了;后来改用PowerShell,又碰上执行策略限制。这事现在还挂着,我没动,它也没炸。就那样。有时候我觉得,这种悬而未决比立刻崩掉更耗神。 上个月我把书借给新人小林,他三天后还回来,扉页上用红笔画了个箭头,指向序言第二段:“本书不承诺零故障,只交付可复现的动作”。他画得特别用力,墨水洇开,把“复现”两个字下面的纸都戳毛了边。我没问他为啥划这句,只问了一句:“你试过第九章‘TempDB文件自动均衡’那段T-SQL吗?”他摇头。我点头。他走的时候顺手把我桌上那盒没拆的咖啡粉拿走了。我忘了提醒他——那盒子其实是空的,外壳是去年双十一买的赠品,里面早被我倒进茶水间垃圾桶了。 接下来?我把目录撕了,把“监控告警”“灾备切换”“性能压测”三章钉在白板上,每页贴三张便签,一张写真实出错时间,一张写当时跑的命令,一张写谁在现场。没打算按顺序读,也不准备重装SQL Server验证所有脚本。就先盯住其中一页:第51页,“ALTER DATABASE SET READ_COMMITTED_SNAPSHOT ON”那一段。我打算今晚把它抄十遍,抄错三次就停笔——错在哪,我自己知道。错不在语法,错在没查sys.databases.is_read_committed_snapshot_on之前,就敲了GO。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


MySQL运维设计避坑指南:14年DBA踩过的5大经典陷阱
DBA熬夜改表?这本MySQL实战手册让设计运维一步到位

