Debian 上 SQL Server 性能监控实用指南
一 监控体系与分层
- 建议采用分层监控:系统层(CPU、内存、磁盘 I/O、网络)、数据库引擎层(会话、请求、等待、执行计划)、日志层(错误与告警)、可视化层(Grafana/Prometheus 或商业 APM)。
- 在 Debian 上,系统层使用常见 Linux 工具即可;数据库层以 T-SQL DMVs、Extended Events、内置存储过程为主;如需集中可视化,可引入 Prometheus + Grafana 或商业工具。
二 系统层监控
- 资源与负载
- 实时与趋势:使用 top/htop(进程与 CPU)、vmstat(CPU/内存/IO/进程)、iostat -x(磁盘 I/O 队列与延迟)、free(内存)、df(磁盘空间)、uptime(系统负载)、netstat/ss(连接与端口)。
- 日志与内核:使用 journalctl -u mssql-server、tail -f /var/log/syslog、dmesg 观察服务异常、OOM、磁盘与网络故障等。
- 建议采集的关键指标
- CPU:用户态/系统态占比、运行队列长度(load average)。
- 内存:可用内存、缓冲/缓存、Swap 使用。
- 磁盘:读写吞吐、await/r_await/w_await、IOPS、使用率。
- 网络:带宽占用、丢包/重传(如 sar/ifstat 或 ethtool -S)。
三 数据库引擎层监控
- 动态管理视图 DMVs(T-SQL 即时查询)
- 当前活动与阻塞
- 查看会话与请求:
SELECT session_id, request_id, task_alloc, task_dealloc, hostname, program_name, loginame, text
FROM sys.dm_exec_sessions s
LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle)
ORDER BY task_alloc DESC;
- 查看阻塞链:
SELECT request_session_id AS blocking_spid, resource_type, request_mode, request_status, request_type
FROM sys.dm_tran_locks l
JOIN sys.dm_os_waiting_tasks w ON l.lock_owner_address = w.resource_address;
- 等待与资源压力
- 等待统计(按降序):
SELECT wait_type, waiting_tasks_count, wait_time_ms, max_wait_time_ms, signal_wait_time_ms
FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;
- 性能计数器(实例级):
SELECT counter_name, cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name IN (N’Page life expectancy’, N’Buffer cache hit ratio’, N’Latch waits’, N’Lock waits’);
- 扩展事件 XE(轻量跟踪,适合生产)
- 创建会话捕获慢查询与错误(示例思路)
- 事件:sqlserver.rpc_completed、sqlserver.sql_batch_completed(设定 duration 阈值)、sqlserver.error_reported。
- 目标:ring_buffer 或 file(便于离线分析)。
- 启动/停止:CREATE/ALTER/DROP EVENT SESSION …;START/STOP EVENT SESSION …。
- 内置与社区存储过程
- 快速体检与活跃会话:sp_who2、sp_whoisactive。
- 一键健康检查:sp_BlitzFirst、sp_BlitzWho(定位 Top SQL、等待、阻塞、配置风险)。
四 日志与告警
- SQL Server 错误日志:通过 journalctl -u mssql-server 或查看安装目录下的 ERRORLOG,关注登录失败、备份失败、磁盘满、内存压力、严重错误等。
- Linux 系统日志:使用 tail -f /var/log/syslog、dmesg 捕捉 OOM-killer、磁盘 I/O 错误、网络异常等。
- 建议做法
- 将关键日志接入 rsyslog/集中日志平台(如 Loki/ELK),设置告警规则(如 ERRORLOG 出现 severity≥17、磁盘使用率>80%、长时间运行会话等)。
五 可视化与第三方工具
- 自建监控链路
- 系统指标:部署 Node Exporter 采集主机指标,使用 Prometheus 抓取并存储,在 Grafana 做面板展示与阈值告警(CPU、内存、磁盘 IOPS/延迟、网络等)。
- 数据库指标:将 DMVs/XE 结果通过脚本(如 Python/PowerShell)定期写入时序库或 Pushgateway,Grafana 统一展示与告警。
- 商业与桌面工具
- SQL Server Management Studio(SSMS) 的活动监视器、性能仪表盘、执行计划分析、Profiler/Extended Events 图形向导。
- 第三方 APM/性能分析:SolarWinds Database Performance Analyzer、Idera SQL Diagnostic Manager 等,适合集中化与长期基线管理。