加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.beijidao.cn/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL Server混合云运维避坑指南

发布时间:2026-10-24 14:09:31 所属栏目:MsSql教程 来源:DaWei
导读:  改版上线翻车。那天我盯着监控大屏,SQL Server Agent 在 Azure VM 里卡在“正在启动作业”八分钟十七秒,而本地 AlwaysOn 可读副本的 CPU 突然掉到 3%,不是降——是直接断崖,像被拔了电源。PM 在钉钉语音里说“用户等

  改版上线翻车。那天我盯着监控大屏,SQL Server Agent 在 Azure VM 里卡在“正在启动作业”八分钟十七秒,而本地 AlwaysOn 可读副本的 CPU 突然掉到 3%,不是降——是直接断崖,像被拔了电源。PM 在钉钉语音里说“用户等不及了”,我回他:“你让用户等,别让 SQL Server 等。”他沉默三秒,切麦说“那先切回旧链路”,我把鼠标悬停在 Failover Cluster Manager 的“强制接管”按钮上,没点。我原以为跨云 DNS TTL 设成六十秒就稳了,结果 CoreDNS 转发给 Azure Private DNS 时,缓存策略根本不认 TTL——它认的是自己心情。


  键盘左下角 Ctrl 键半年前就塌了半边,今天按下去有点黏,松手时带出一声轻微“嗒”,跟服务器日志里那行“Error: 1418, severity 16, state 1”几乎同步。这个我敢打包票:1418 不是配置错,是 Azure 上的 SQL Server 2019 CU33 启动时,自动把 `sp_server_diagnostics` 输出塞进一个已满的系统 health ring buffer,然后静默失败——不是报错,是干脆不记日志。我们查了四小时,直到测试同事用手机拍下她笔记本外接显示器右下角的 Chrome DevTools Network tab,Filter 里打着“sqlserver-diag”,才看到那条 504 是从 Azure Arc agent 代理出来的。她说“我就是顺手截个图,没想帮你定位”,但我信了。


  旁边工位后端老张去倒水,路过我桌时把保温杯盖子拧开又拧上,咔哒两声。他昨天刚骂完 Kubernetes operator 对 SQL Server AG 状态监听的延迟比人眼反应还慢,今天他自己的 Java 应用连 Azure SQL DB 就连不上——连不上不是 timeout,是 SSL handshake 卡在 Certificate Verify 阶段,因为 Azure SQL 默认开的 `Encrypt=required` 会校验证书链,而他本地 JDK truststore 没更新 DigiCert Global G2 Root CA,可他坚持说“本地连得通啊”,我说“你本地是连 dev-sql01.int 连通的,那是内部 DNS 解析,你 docker run 的时候压根没挂那个 /etc/hosts”。他摆手:“哎呀这个我待会再搞”,然后走了。汤洒了一滴,在我左手边外卖盒盖边缘,浅褐色,直径大概两毫米,现在还在那儿没擦。


  SQL Server 混合云运维避坑指南?别扯了。它唯一优点是优胜劣汰——不是技术优胜,是人淘汰。留下的要么是记得每次 patch 后手动跑 `ALTER AVAILABILITY GROUP [AG] RESUME DATA MOVEMENT` 的,要么是把 SSISDB 部署脚本写成 PowerShell + Azure CLI + T-SQL 三嵌套、每次 deploy 前要掐表看 Azure Key Vault 秘钥轮转是否完成的,要么是能听出来 SQL Server Error Log 里那声“squelch”和 Windows Event Log 里 Application 0x7030 的区别在哪的。剩下一堆文档里写的“建议启用异地只读副本”“推荐使用弹性池”,全是拿本地 OLTP 经验硬套的笑话。去年双十一前我们照着白皮书把读流量全导 Azure SQL 弹性池,结果凌晨两点池子爆了,不是 max cpu——是 elastic pool dtu limit 下的 queue depth 达到六百三十二,所有 select from sys.dm_exec_requests 的 status 全变成“queued”。没人告诉你 queued 会吃光客户端连接池里的线程;更没人说 Azure SQL 的 `sys.dm_db_resource_stats` 采样延迟高达二十五秒,而本地 AG 的 `sys.dm_hadr_availability_replica_states` 是毫秒级实时——你拿后者做 failover 判定依据,它早过期了。


  我桌上双屏壁纸是三年前爬黄山回来截的,左屏云海,右屏天都峰背光剪影,现在右屏壁纸右下角有块液晶坏点,像一粒黑芝麻,每次开 SSMS 查 pg_locks 视图都扫到它。上周我教新来的运维调 Azure Migrate 工具做评估,他说“怎么选 SQL Server 版本”,我指了指他显示器右下角的 Win10 版本号:“看你系统自带啥就选啥。SQL Server 2019 在 Azure VM 上启用了新的轻量级检查点逻辑,但如果你基础镜像还是用三年前的 sysprep 镜像,那个检查点会偷偷写进 C:\\Windows\\Temp,然后某天被磁盘清理策略干掉,再下次重启——log reuse wait 就变 REPLICATION,可你根本没配 CDC 或 distributor。”他说“那怎么办”,我说“重装基础镜像”。他点头。我没说其实重装也不一定灵,因为 Azure 平台层有时候会在关机状态下悄悄压缩 VHD 文件元数据,导致 Windows 启动时 NTFS 日志回滚失败,这时候 SQL Server 进程能起来,但 master 数据库会卡在 recovery pending——你用 SSMS 连,显示 login failed,实际是 master 还没加载完。这个我说不准。


  CSS 命名的事我最近也在想。为什么前端团队非要把 class 名写成 .card-header__title--mobile-active,搞得 PR review 里光是 rename 就占掉三百行?可人家至少命名能执行。SQL Server 混合云里你起个 job 名叫 “Sync-Prod-to-Azure-ReadOnly”,结果 Azure Automation Runbook 里调用它用的是 job ID GUID,PowerShell 脚本里硬编码了 `Get-SqlAgentJob -ServerInstance "azure-ag-prime" -Name "Sync-Prod-to-Azure-ReadOnly"`,哪天有人手抖在 SSMS 里改了个空格……算了,这事儿我不说了,说多了血压高。工位右边那盆绿萝叶子黄了三片,我还没换土。


文章配图,仅供参考

  下一步?明天上午九点,我要去会议室跟架构组对齐一件事:删掉所有跨云 AG 监控告警里的 “if replica_state_desc = 'SECONDARY' and operational_state_desc = 'ONLINE'”,改成直接查 `sys.dm_hadr_database_replica_states.log_send_queue_size` > 500MB + `last_commit_time` 落后主节点超十五秒 —— 至少这条能打住半夜三点的误报电话。至于桌面那滴汤,等会儿用纸巾按一下,不擦。让它干着。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!