CentOS 上 SQL Server 性能监控实用指南
一 内置工具与 DMV 快速排查
- 使用 sqlcmd 连接实例并做健康检查:
- 连接:sqlcmd -S your_server_name -U your_username -P your_password
- 版本与实例:SELECT @@SERVERNAME, @@VERSION, SERVERPROPERTY(‘ProductVersion’)
- 会话与阻塞: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
- 当前等待:SELECT wait_type, wait_time_ms, wait_resource, session_id, blocking_session_id FROM sys.dm_os_waiting_tasks ORDER BY wait_time_ms DESC
- 日志空间:EXEC sp_spaceused; DBCC SQLPERF(LOGSPACE)
- 借助 DMVs 与 扩展事件(XE) 做深入诊断:
- DMVs:sys.dm_exec_requests、sys.dm_exec_sessions、sys.dm_os_wait_stats、sys.dm_db_index_usage_stats 等,覆盖活跃请求、会话、等待与索引使用情况。
- XE:轻量级事件捕获,适合定位 死锁、超时、慢查询 等,建议按需创建会话并控制目标/事件以降低开销。
二 系统层面监控与日志定位
- 进程与资源:
- 定位进程:pgrep -f sqlservr;实时资源:top -p $(pgrep -f sqlservr) 或 htop
- 综合资源:vmstat 1,iostat -x 1,nmon,dstat,glances,sar,pmap,strace,tcpdump
- 错误日志:
- SQL Server 错误日志路径:/var/opt/mssql/log/errorlog(CentOS 7+)。定期 tail/grep 分析启动、登录、备份、错误与性能相关告警。
三 开源与商业监控平台落地
- Prometheus + Grafana:
- 部署 Prometheus 与 Grafana,通过 prometheus-mssql-exporter 采集 SQL Server 指标,Grafana 导入 MSSQL 仪表盘实现可视化与告警。
- Zabbix:
- 使用 Zabbix Agent 或 ODBC 方式采集 MSSQL 性能计数器与查询指标,支持自动发现、阈值告警与可视化。
- Nagios:
- 安装 Nagios 与相应插件(如 check_mssql 或 check_sqlserver),配置命令与服务检查,实现可用性/性能阈值告警。
- 商业工具:
- SolarWinds DPA、Redgate SQL Monitor、PRTG、Idera SQL Diagnostic Manager 等,提供跨平台监控、语句级分析、容量与瓶颈定位能力。
四 关键指标与告警阈值建议
| 维度 |
关键指标 |
建议阈值或动作 |
| 资源 |
CPU 使用率 |
持续 > 80% 持续 15 分钟 → 检查执行计划/索引/并发 |
| 资源 |
可用内存 |
可用 < 10% 或频繁换页 → 调整 max server memory、优化查询/索引 |
| 资源 |
磁盘 IO 等待 |
await > 20 ms 或 svctm 高 → 检查阵列/磁盘健康、优化 IO 模式 |
| 资源 |
日志写入延迟 |
LOG FLUSH 等待高 → 检查磁盘/日志文件布局与大小 |
| 数据库 |
阻塞 |
阻塞链 > 5 秒 → 分析锁/隔离级别/索引 |
| 数据库 |
会话与连接 |
连接数接近 max_connections → 优化连接池/应用逻辑 |
| 查询 |
长时查询 |
平均执行 > 5–10 秒 → 抓取执行计划、加索引/改写 |
| 日志 |
日志空间 |
使用率 > 80% → 扩容或归档/备份策略调整 |
| 错误 |
错误日志增长 |
短时间内大量错误 → 立即排查失败登录/备份/磁盘/权限 |
五 落地步骤与注意事项
- 部署顺序:先建立 系统基线(CPU/内存/IO/网络),再上线 数据库基线(活跃会话、等待、TOP SQL、日志空间),最后接入 告警(P1:宕机/磁盘满/日志满;P2:CPU>80%/阻塞>30s;P3:长查询/连接泄漏)。
- 采集频率:系统资源建议 15–30 秒;数据库关键 DMV 建议 30–60 秒;XE/Profiler 仅短时按需开启,避免额外开销。
- 安全合规:最小权限创建监控账号;ODBC/Exporter 使用加密与凭据托管;Grafana/Prometheus 与数据库网络隔离与访问控制。
- 容量规划:结合增长趋势与性能曲线,定期评估 max server memory、tempdb 文件数与大小、日志与数据文件布局、索引维护窗口。