在 CentOS 上监控 SQL Server 性能的可落地方案
一 内置与命令行快速巡检
- 使用 sqlcmd 连接实例并执行健康检查与性能查询,例如:
- 连接:sqlcmd -S your_server_name -U your_username -P your_password
- 版本与实例:SELECT @@SERVERNAME, @@VERSION, SERVERPROPERTY(‘ProductVersion’)
- 日志空间:DBCC SQLPERF(LOGSPACE)
- 活跃请求与等待:SELECT session_id, request_id, task_alloc, task_dealloc, hostname, program_name, loginame, text FROM sys.dm_db_session_space_usage s JOIN sys.sysprocesses p ON s.session_id = p.spid CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) ORDER BY task_alloc DESC
- 借助 DMVs 与 Extended Events 持续采集执行与等待统计,用于定位慢查询、阻塞与资源瓶颈;在图形化环境可用 SSMS 的性能监视器、活动监视器、Profiler 辅助分析(Profiler 为较重工具,生产慎用)。
二 系统层面资源监控
- 进程与资源:top/htop(按 PID 过滤 mssql 进程)、free(内存)、vmstat(CPU/内存/IO)、iostat(磁盘)、nmon(多子系统)、dstat(综合资源)、pmap(进程内存映射)、ps/pstree(进程树)、uptime(负载)、ss/netstat(连接与端口)、sar(历史统计)、strace/tcpdump(排障抓包)。
- 快速示例:
- 实时资源:top -p $(pidof sqlservr)
- 磁盘 IO:iostat -x 1
- 综合资源:nmon
- 连接与端口:ss -lntp | grep sqlservr
这些工具帮助判断 CPU、内存、磁盘 IO、网络 是否存在瓶颈,并可与数据库层指标联动分析。
三 开源监控平台与告警
- Prometheus + Grafana
- 部署 Prometheus 与 Grafana,通过 prometheus-mssql-exporter 采集 SQL Server 指标,在 Grafana 中构建仪表盘并配置阈值告警。
- 基本流程:安装 Prometheus → 配置 scrape_configs 指向 exporter → 启动 Grafana → 添加 Prometheus 数据源 → 导入或自建 SQL Server 仪表盘 → 配置 Alertmanager 告警规则。
- Zabbix
- 使用 Zabbix Agent 或 ODBC 方式监控 SQL Server,内置 MSSQL 性能计数器 支持,结合模板实现自动发现、阈值告警与可视化。
- 其他可选
- Nagios(插件化检查与告警)、Monit(进程与资源守护)、企业级 SolarWinds DPA、Redgate SQL Monitor 等,用于更细粒度的性能分析与报表。
四 关键指标与采集方式
| 维度 |
关键指标 |
采集方式 |
| 连接与用户 |
当前连接数、失败连接 |
DMVs(如 sys.dm_exec_sessions、sys.sysprocesses)、SSMS 活动监视器 |
| 查询性能 |
平均/最大执行时间、CPU/逻辑读、执行次数 |
DMVs(如 sys.dm_exec_query_stats、sys.dm_exec_sql_text)、Query Store |
| 等待与阻塞 |
等待类型与毫秒数、阻塞链 |
DMVs(如 sys.dm_os_wait_stats、sys.dm_exec_requests)、Extended Events |
| 日志与空间 |
日志文件大小与已用百分比 |
T-SQL(DBCC SQLPERF(LOGSPACE)) |
| 资源与 IO |
CPU 利用率、可用内存、磁盘读写延迟与队列 |
Linux(top/vmstat/iostat/nmon)、Grafana/Prometheus 面板 |
| 错误与登录 |
错误日志、登录失败 |
SSMS 错误日志、Extended Events |
| 上述指标覆盖数据库与系统两个层面,建议以 DMVs/Query Store 为数据库主视角,以 Linux 工具与平台为系统侧视角,联动排查。 |
|
|
五 落地实施步骤与告警建议
- 步骤
- 建立基线:在业务平稳期采集 CPU、内存、磁盘 IO、连接数、查询性能 的基线值(如 15–30 天)。
- 部署采集:在 CentOS 上部署 Prometheus + Grafana + mssql-exporter 或 Zabbix,按实例配置采集间隔(如 15s)。
- 构建仪表盘:按“连接/查询/等待/日志/资源”分面建立面板,加入关键图表(如 Top SQL、等待统计、磁盘 IO)。
- 配置告警:对异常阈值设置 P1/P2/P3 分级告警,例如:
- P1:SQL Server 进程 宕机/不可达、严重错误日志激增、磁盘 >85% 使用或 IO 延迟异常
- P2:平均查询时长突增 >50%、P95 等待显著上升、连接数接近上限
- P3:日志空间 >80%、CPU/内存持续高于基线 20%
- 持续优化:结合 Query Store 与 Extended Events 定位慢查询与阻塞根因,定期评审告警规则与阈值。
- 注意
- 生产环境控制采集频率与跟踪范围,避免 Profiler/Extended Events 过度开销;对高频查询使用抽样与合理筛选。
- 建议将监控账号权限最小化,仅授予必要的 VIEW SERVER STATE 等权限,保障安全与稳定。