上线第二天凌晨,DBA 的手机被告警轮番轰炸。某个核心库的 CPU 冲上 90%,阻塞作业全部卡死,前一天还在正常执行的 TOP SQL 一夜之间变成了慢 SQL。可回头翻系统自带的管理平台,上面只显示“数据库正在运行”,事件日志也干干净净。玩过大范围 SQL Server 环境的人应该都有同感:最折磨人的不是服务挂掉,而是它“看起来正常但内部已经乱成一锅粥”。
这次我要装的 SolarWinds SQL Sentry 2024,就是为了解决这类问题。它能从 SQL Server 实例内部抓取等待统计、执行计划、作业运行状态、阻塞链和资源消耗,把监控粒度从“服务器开机状态”细化到“某一条查询为什么慢”。这篇文章会完整走一遍安装与注册流程,包括我实际操作中踩过的坑、对界面关键选项的理解,以及装完之后应该先做哪几件事。适合数据库管理员、应用运维和刚接手 SQL Server 监控体系的人阅读。
1. 为什么 2024 年我会选择 SQL Sentry 这类监控工具
1.1 从一次“数据库看起来没挂”的故障说起
有一年我负责一个老旧的业务系统,底层跑 SQL Server 2016,客户反馈后台操作“转圈圈”,但没有一个人说“数据库宕机”。我打开任务管理器,CPU、内存还算正常,Windows 事件日志也没有致命错误。常规监控工具显示一切绿灯,可业务就是慢。
后来登录到那台实例,用 DMV 一查,sys.dm_os_waiting_tasks里大量LCK_M_X等待,再往深处追,发现某个半夜跑批的手工事务没有提交,持有了一张表锁,白天的业务查询全被堵在后面。问题很清楚,常规监控却没报警,因为常规工具只盯服务器层指标,根本看不到“等待”和“阻塞链”。
这种时候就需要一个能深入数据库引擎内部的工具。SQL Sentry 的核心能力正是把PAGEIOLATCH_SH、CXPACKET、LCK_M_X这类 SQL Server 内部等待事件可视化,直接指出瓶颈在 CPU、IO、锁还是编译。2024 版本在原有基础上强化了对 Azure SQL 数据库、SQL Server 2022 以及 Always On 可用性组的支持,对混合环境越来越友好。
1.2 SQL Sentry 监控的是 SQL 实例内部,而不是服务器外壳
很多监控软件喜欢装一堆 Agent 到操作系统里,收集 CPU、内存、磁盘 IO,然后画一堆漂亮的趋势图。这些数据当然有用,但 SQL Server 是一个高度复杂的进程,同样的 CPU 使用率,对 A 查询可能是正常的,对 B 查询就是灾难。SQL Sentry 走的是另一条路:它直接连到 SQL Server 实例的 DMV、性能和事件接口,读取正在执行的计划、等待资源、历史性能基线。
我印象最深的是它的 Top SQL 视图。它能抓出过去一段时间内累计 CPU 最高、耗时最长、逻辑读取最多的语句,而且可以直接下钻到某条语句对应的执行计划。对比常规监控,相当于一个是“看体温”,另一个是“看病理切片”。普通监控告诉你主机温度高了,SQL Sentry 告诉你这波高 CPU 是哪条语句、哪个数据库、哪个用户跑出来的。
这也是很多 DBA 团队愿意给它买单的原因。它不是替代你的基础监控平台,而是补上数据库内部这一层,让告警从“实例挂了”变成“这条语句的等待时间开始飙升”。
1.3 谁会从这篇安装笔记里真正获益
如果你手里有几十个 SQL Server 实例需要统一管理,或者正在处理常规监控覆盖不到的“偶发慢查询”,又或者刚接手一套已经装了 SQL Sentry 但没人维护的环境,那这篇内容很适合你。
我写这篇笔记时,默认读者会一点 SQL Server 基本概念,比如实例、登录名、数据库、服务账号。但如果你完全是新手,也不要担心,安装过程中的每个关键选项我都会解释为什么要这样选,而不是只告诉你“下一步、下一步、完成”。毕竟工具装不上、注册不顺利,再强的功能也白搭。
2. 安装 SQL Sentry 之前的准备清单:省得装到一半卡壳
2.1 系统版本与 .NET 运行时要求
SQL Sentry 的架构由三部分构成:管理控制台、数据收集器、被监控实例上的采集代理。控制台通常安装在 DBA 自己的工作机或跳板机上,数据收集器则需要一台常开机的 Windows 服务器。2024 版对操作系统的要求不算苛刻,Windows Server 2016 以上、Windows 10/11 都支持。但我不建议在 Server Core 这种不带完整桌面体验的最小化系统上装控制台,有条件还是用带 GUI 的 Windows Server。
安装前要确认 .NET Framework 4.8 已经就位。Windows Server 2022 默认自带,但 Server 2016 经常需要手动装。很多首次安装失败都是卡在这里,日志指向某个 .NET 组件缺失,看起来和 SQL Sentry 无关,实际就是运行时没准备好。
另外一个容易被忽略的点是时区。控制台、采集服务、SQL Server 实例最好都使用同一时区,否则监控数据的时间轴会错位。如果你把两个时区不同的实例混在一起看,排障时会发现明明数据库在同一时间点发生了事件,时间戳却对不上,定位问题非常痛苦。
2.2 仓库数据库与磁盘空间预算
SQL Sentry 需要用一个 SQL Server 数据库存放历史性能数据,这个仓库库如果太小,装了等于没装,数据会被不断滚动清理。官方建议的磁盘余量会随监控实例数量变化,我的经验是:一个中等规模的 SQL Server 环境,监控 10 到 20 个实例,至少要给它留 100GB 左右的磁盘空间。你可以在安装时选择数据保留周期,但空间给得太紧,后期会频繁出现数据保留期被自动压缩的告警。
仓库库最好单独建实例或放在独立磁盘上。不要图省事,把 SQL Sentry 的配置库存放到正在被监控的业务库里。监控数据写入频繁,会和你自己的业务 SQL 抢 IO,造成互相拖累。我遇到过一家公司,把仓库库放在核心交易库的同一磁盘上,结果监控数据写多了,业务高峰期 IO 延迟飙升,监控工具反而成了事故源。
磁盘 I/O 也值得关注。仓库库存的是典型的时间序列数据,写入量持续稳定,用 SSD 明显省心。机械盘不是不能用,但当数据保留期较长、查询历史趋势的时候,性能差距会直接体现出来。
2.3 服务账号、域策略和网络端口的三方对齐
安装过程中会让你指定 SQL Sentry 服务账号。很多人图省事直接用Local System,这样在单机测试环境没问题,但如果要访问其他机器上的 SQL Server 实例,域账号或至少一个可以跨越网络认证的账号更合适。
服务账号必须拥有“作为服务登录”的权限,否则 Windows 在启动服务时会直接报错。如果是域环境,还要检查组策略里有没有禁止该账号登录服务的策略。SQL Sentry 的采集服务同时要连接仓库库和被监控实例,所以该账号至少要在仓库库上拥有db_owner角色,并在被监控实例上有查看 DMV 的权限。
网络方面,先搞清楚你装的是完全集中式还是分散式部署。控制台、收集器、被监控实例之间的通信端口如果被防火墙拦截,安装向导能跑完,但后续数据采集会静默失败。我的做法是先关闭 Windows 防火墙验证一次连通性,确认可行后再把例外规则加回去。当然,生产环境不要直接关防火墙,只是做连通性测试时这样比较快。
3. 安装 SQL Sentry 主程序,一次走完安装向导
3.1 从哪里拿安装包以及为什么要校验哈希
2024 版的安装包不出意外是一个几十到几百 MB 的可执行文件或压缩包。建议只从 SolarWinds 官方下载,不要用第三方站点转存的所谓“绿色版”“破解版”。这类二次打包的安装包,轻则被塞入广告推广,重则直接种马。做数据库监控的工具,如果连安装源都不干净,后面分析出来的数据也没有可信度。
下载完先校验一下 SHA-256 哈希。官方下载页面通常会列出文件哈希值,PowerShell 里可以用Get-FileHash查看本地文件的哈希值,两个值一致再开始安装。这个小动作 30 秒就够,但在勒索软件横行的年代,值得养成长久习惯。
如果你是要给几十台服务器批量部署,可以把安装包放到内网共享目录,或者使用静默安装参数自动部署。但第一次安装环境,我建议还是手动跑一遍向导,把每个选项看清楚。自动部署可以以后慢慢研究,手动先建立一个正确的基线配置。
3.2 选择安装组件:控制台、数据收集器和采集代理
安装向导会让你选择安装组件。常规情况下有三种角色:控制台是图形界面,数据收集器负责从被监控实例拉数据并存到仓库库,采集代理则部署到每台被监控的 SQL Server 上。
如果你只是在一台标准 Windows 服务器上试点,直接把所有组件都装上是可以的。数据量不大时这个单机模式完全够用。但到了生产环境,我的建议是:控制台装到 DBA 工作站,数据收集器单独跑在一台服务器上,采集代理按需推送到每个实例。
这样做不是为了显得“专业”,而是为了故障隔离。数据收集器如果长期高频写入仓库库,CPU 和内存占用并不低,和控制台抢资源会影响你打开界面的流畅度。更重要的是,当被监控实例数量超过二三十个时,数据收集器本身可能成为瓶颈,这时它可以拆成多个进程,分散压力。
3.3 初始化仓库库时的字段选择
安装向导中间会要求你指定仓库库的连接信息,比如目标 SQL Server 实例、认证方式和数据库名称。这里有几个选项值得停下来说。
仓库库名称建议包含版本和环境标识,例如SQLSentryRepository_Prod。不要只用默认名称,因为以后如果有多套环境,你会搞不清这个库到底属于哪套监控体系。默认排序规则我一般保持与目标实例一致,避免出现字段排序和比较异常。
认证方式上,本地测试可以用 SQL 登录,但生产环境我更推荐 Windows 身份验证。这样后续运维只需管理域账号,不用为监控系统额外维护一套 SQL 密码。不过要注意,SQL Sentry 的采集服务需要用它自己的 Windows 账号连到仓库库,这个账号至少要具备db_owner权限,否则安装程序创建表、写存储过程都会失败。
数据库文件位置也不要全部塞到默认的C:\Program Files\Microsoft SQL Server\...目录。仓库库会持续写入,默认目录所在系统盘通常空间紧张,最好指定到独立的数据盘。安装指南里可能会让你配置数据保留周期,我一般初始设置保留 30 天原始明细数据,再配合每周汇总表,兼顾查询速度与磁盘占用。
3.4 安装完成后看到什么才说明成功
安装向导跑完,不代表整套系统已经正常。第一次打开控制台,你会看到一个登录界面,输入刚才配置的 Windows 账号或 SQL 身份后,控制台会开始加载监控界面。
如果控制台顺利打开,左侧能出现可展开的实例树,说明基本安装成功了。但真正确认安装成功,还要看两件事:第一,Windows 服务列表里有没有SQL Sentry相关的服务,且在“正在运行”状态;第二,仓库库里是否已经自动生成了一批数据表、存储过程和后台作业。
我认为最有说服力的验证方式,是随便在控制台里打开一个“Events”视图,看看有没有来自仓库库的事件流入。如果事件视图里能翻到安装初始化产生的记录,至少证明数据链路是通的。
4. 注册和激活:试用转正过程中最关键的几个细节
4.1 先申请试用许可证,而不是直接执行安装包
很多人在安装前不注册,装完以后打开控制台才被提示需要输入许可证。SQL Sentry 的试用流程通常是到官网申请一个评估许可证,发到注册邮箱后,把密钥贴到控制台的许可界面里激活。
我的建议是,在正式安装前就完成注册申请。别小看这个先后顺序,如果你在一个隔离的内网环境里安装控制台,注册页面可能无法访问,这时你手里要有已经下载好的试用密钥文件或离线许可证。
试用许可证的有效期一般按天计算,从你完成申请后开始,而不是从你装好软件后开始。有些人申请完放着半个月不用,真正部署时试用期已经过去一截,白白浪费评估窗口。我一般会先规划好安装日期,再提交试用申请,让评估期能覆盖完整的测试阶段。
4.2 在控制台里输入许可证密钥的正确姿势
正式采购后,SolarWinds 通常会给你发一封授权邮件,里面有许可证密钥或附件格式的许可证文件。不要踩我踩过的坑:第一次我把授权邮件里的所有字段一股脑复制粘贴,结果在激活界面提示无效,后来发现只需要填入密钥部分,前面的人类可读描述不要带进去。
控制台里一般会有 Help 或 Settings 菜单,进入 Licensing 或 License 页面,填入密钥后点校验。如果校验成功,页面会显示当前授权版本、有效期、已经使用的管理节点数。如果校验失败,先检查网络。激活过程需要访问授权服务器,授权服务器的响应偶尔会被代理干扰。
还要看看系统时间。如果服务器日期和实际日期偏差太大,许可证签名校验会失败。这类问题在虚拟机里尤其常见,特别是那些刚克隆出来的虚拟机,时钟没同步时,激活界面显示的错误往往让人误以为是密钥有问题。先校准到 NTP 时间源,再重新激活。
4.3 授权范围、实例配额和超额提示
SQL Sentry 的许可证通常按被管理的目标数量或用户数计费。你购买的是多少个 SQL Server 实例的监控权,就只能在控制台里加入相应数量的实例。
安装完成后进入监控界面,如果发现添加被监控实例时提示“此操作需要其他许可证”,多半是授权数量已用完。这时不要再往里面塞实例,先分清哪些实例是必须监控的核心库,哪些可以用其他轻量方案补充。
我遇到过一种尴尬情况:一个可用性组里有主库、同步副本、异步副本,我当时以为监控一个主库就够了,结果发现同步副本上也有负载和等待事件需要观察。后来重新评估授权时,把所有承载读写流量的副本都纳入了监控范围。如果你的环境是高可用架构,购买授权时要把这些“隐形”的副本也算进去。
5. 安装完成不等于闭环:接入第一个 SQL Server 实例并跑通全流程
5.1 添加实例时该用哪个账号连接
控制台装好、授权激活后,第一件事是添加被监控的 SQL Server 实例。入口一般是通过“Add Instance”或右键资源树选择注册实例。填写主机名、实例名和认证信息后,系统会尝试建立连接。
连接时建议使用一个专用的最低权限登录账号,不要用sa或 DBA 本人的高权限账号。SQL Sentry 读取性能视图需要VIEW SERVER STATE权限,查看作业、维护计划可能还需要额外授权。你可以先给账号授予VIEW SERVER STATE和VIEW ANY DEFINITION,如果后续某些功能提示权限不足,再按需追加。用最小权限起步,至少不会因为一个监控工具把数据库安全暴露面扩大。
如果填完连接信息后长时间停留在“验证连接”状态,先在错误日志里确认连接是否被实例端防火墙拒绝。SQL Server 默认在 1433 端口监听,但你公司网络环境里可能有多个实例、动态端口或命名实例。命名实例用主机名加实例名连接,SQL 浏览器服务如果没开启,也可能导致连接失败。
5.2 用 Top SQL 和等待统计验证采集链路
添加实例成功后,切到 Top SQL 页面。刚添加的前几分钟可能没有数据,不用着急,SQL Sentry 需要先完成基线采集。等待 15 到 30 分钟后再回来看,如果你能找到 CPU 时间、逻辑读、执行次数都有数据记录的 SQL 语句列表,说明采集链路已经通。
等一等,这个动作非常关键。很多人在这一步看到“还没数据”就误以为安装失败,开始重装、改权限,最后发现只是还没到采集周期。我的建议是先手动执行几条压测查语句,给系统造点负荷,这样 Top SQL 页面的排序结果能更明显区分出来。
等待统计视图则更本质。它会列出PAGEIOLATCH_SH、LCK_M_X、CXPACKET等等待类型的累计时间和占比。如果采集正常,这些数据在 Installation 后一小时内就能形成初步趋势。看到等待数据开始滚动,你对这套系统的信任感才算真正建立起来。
5.3 设置第一条告警通知,否则监控等于白装
有监控没告警,等于装了一个不会说话的哨兵。SQL Sentry 支持自定义告警,当某条 SQL 的等待时间超过阈值、作业失败、空间不足时,触发通知到邮件、短信或第三方集成。
第一次配置告警,我建议从这几个方向入手:采集代理离线、作业失败、关键实例的CPU持续高于阈值、某个数据库的事务日志超过设定大小。这些条件相对比较基础,误报率低,信号价值高。
通知配置里,SMTP 主机和发件人账号一定要测试成功后再挂到业务上。我经历过一次配置了邮件告警但收不到信的情况,排查结果居然是 SMTP 服务器对外发邮件有域名白名单限制,发件服务器要求认证用户必须来自特定域名,测试时没注意,导致告警从未发出去。任何告警渠道配上之后,先人为制造一次告警,验证全链路,别等事故发生时才发现通知没通。
6. 安装注册阶段常见的坑与我的处理方案
6.1 安装程序无法写入仓库库
有次部署时,安装向导在“初始化仓库库”阶段一直报权限错误。当时我用的账号是域管理员,直觉告诉我权限没问题,后来才发现 SQL Server 实例上根本没有给这个账号创建数据库的权限。
解决方案很简单,在初始化之前先在目标 SQL Server 实例上手工创建一个登录账号并授予sysadmin或至少dbcreator加db_owner的权限。等仓库库创建完成,再把账号降权到db_owner。不要嫌麻烦,数据库监控工具的仓库库创建需要建表建索引,初始化时权限不够,后续补起来非常痛苦。
还有一种情况是 SQL Server 的remote login限制策略,尤其是实例配置了专用管理员连接后,普通连接通道可能被截断。检查实例配置里的“允许远程连接”选项是否打开,TCP/IP 协议是否启用。好几回安装失败都不是软件问题,是 SQL Server 没开 TCP/IP。
6.2 激活成功但 UI 仍提示未授权
激活界面显示证书有效,但控制台右上角依然提示未授权。这种情况一般不是密钥的问题,而是控制台进程缓存了旧授权状态。
最常用的处理方式是完全退出控制台,杀掉所有相关进程,再重新打开。如果还不行,把许可证文件重新加载一次,确认文件路径里的特殊字符没有干扰解析。SolarWinds 产品对许可证文件路径比较敏感,路径中如果带中文或空格,偶尔会读取失败。把许可证文件放到纯英文路径下,使用C:\License\sentry.lic这类命名,成功率会高很多。
另外提醒一句,激活完成后要检查系统时间同步。域环境的服务器如果域控制器时间漂移,你在许可证校验时可能遇到签名不匹配的幻觉性错误。校准 NTP 后再激活,能省很多排查功夫。
6.3 采集服务启动后反复退出
SQL Sentry 的数据收集器注册为 Windows 服务后,偶尔会在“启动-停止-重启”之间反复横跳。遇到这种情况,先打开 Windows 事件日志,重点看服务控制管理器记录的错误码。
我处理过一次,最后发现是服务账号“作为服务登录”权限不在目标组策略允许列表里。域环境下有个容易被忽视的点:某些安全策略会把“批处理作业”和“作为服务登录”搞混,组策略对象套下来,服务账号看似是某个用户组的管理员,却没有明确的“作为服务登录”权限。
另外,检查仓库库连接字符串里的密码是否仍然有效。服务账号密码如果做过轮换,服务在重启时会因为连接失败而退出。公司里如果没有统一的密码管理器,建议至少记好这些服务账号的轮换台账。
6.4 维护安装档案:版本、补丁和激活凭证
最后分享一个我自己这几年受益匪浅的习惯:每装一次企业级软件,都建立一个安装记录文档,包含安装包文件名、版本号、构建号、安装日期、安装路径、仓库库位置、许可证文件备份、服务账号名和联系方式。
这些信息不用写得多华丽,但排查问题时必须有地方查。特别是 SolarWinds 产品经常有 Hotfix 补丁,文件名通常是一长串带版本号的格式,如果你不记录清楚,半年后根本分不清当时装的是哪一版。我自己用的格式是2024.1.0_RTM_build1234_2024-03-15,这样看文件名就能直接对上安装时间线。
恢复环境时,这个记录能帮你快速重建一套和原来一致的监控系统。数据库备份和许可证文件也建议留一个异地副本,避免服务器彻底故障后失去监控能力,反而在最需要排障的时候没有工具可用。
安装和注册只是 SQL Sentry 迈出的第一步。我个人最深的体会是,这类数据库性能监控工具的上手门槛不在于点击“下一步”,而在于你是否有意识地把等待统计、Top SQL 和告警策略串成一条完整的事件响应链路。装完以后,给自己定一个习惯:每周固定抽半小时翻一遍 Top SQL 和等待趋势,不要等告警响了才打开控制台。你越熟悉它的日常形态,真出问题的时候就越能第一时间看出哪个指标不寻常。