Debian 上 SQL Server 性能监控实用技巧
一 系统层监控
- 资源总览与瓶颈定位:使用 top/htop 观察 CPU、内存占用;用 vmstat 1 查看上下文切换与 I/O 等待;用 iostat -x 1 聚焦磁盘 await、svctm、util;用 free -m 检查可用内存;用 df -h 关注数据盘与日志盘使用率;用 netstat -s 或 ss -s 观察重传与连接状态;用 ping 与 traceroute 验证网络连通性。
- 日志与内核消息:用 tail -f /var/log/syslog 实时查看系统日志;用 journalctl -u mssql-server 查看 SQL Server 服务日志;用 dmesg 排查内核与驱动异常。
- 服务与变更管理:用 systemctl status/restart mssql-server 管理实例;变更前后配合 apt update && apt upgrade 保持系统与组件为较新稳定版本,降低因缺陷导致的性能波动。
二 数据库内置监控 DMVs 与系统过程
- 会话与请求:查询 sys.dm_exec_sessions 了解登录与活跃会话;查询 sys.dm_exec_requests 获取当前执行语句、等待类型与资源消耗;结合 sys.dm_exec_sql_text(request_id) 还原正在执行的 SQL 文本 以定位慢查询。
- 性能计数器:通过 sys.dm_os_performance_counters 获取 SQL Server 内部计数器(如批处理请求/秒、缓存命中率、锁等待等),用于趋势与阈值监控。
- 快速体检与活跃查询:使用 sp_who2、sp_whoisactive 快速查看连接与活跃进程;使用 sp_BlitzFirst、sp_BlitzWho 做一键化健康检查与热点查询识别。
三 跟踪与诊断工具
- 轻量跟踪:使用 Extended Events 创建会话,按需捕获 rpc_completed、sql_batch_completed、deadlock_graph 等事件,输出到文件或内存目标,兼顾开销与信息量。
- 深度分析:在需要更细粒度分析的场景,可用 SQL Server Profiler 创建模板,捕获指定事件与列,回放并定位性能瓶颈(注意在生产环境控制开销)。
- 组合使用:以 DMVs 实时定位问题,用 Extended Events/Profiler 聚焦时间段与事件做根因分析,形成“发现—取证—验证”的闭环。
四 可视化与长期观测
- 指标采集与可视化:部署 Telegraf(启用 sqlserver 输入插件)采集 SQL Server 指标,写入 InfluxDB,在 Grafana 展示与告警;可直接导入社区仪表盘(如 ID 9336)快速起步。
- 第三方 APM/监控:结合 SolarWinds Database Performance Analyzer、Idera SQL Diagnostic Manager 等工具,获得跨实例、跨环境的容量与性能趋势分析。
五 高频指标与告警阈值示例
| 指标 |
含义 |
常用命令或来源 |
建议告警阈值 |
| CPU 使用率 |
实例对 CPU 的占用 |
top/htop |
持续 >80% 持续 5–10 分钟 |
| 可用内存 |
系统可用内存 |
free -m |
可用 <10% 或可用 <1–2 GB |
| 磁盘 util |
磁盘繁忙程度 |
iostat -x 1 |
>80–90% 持续 5 分钟 |
| 磁盘空间 |
数据/日志盘余量 |
df -h |
使用率 >80–85% |
| 连接数 |
活跃会话 |
ss -s 或 sys.dm_exec_sessions |
接近实例 最大连接数 |
| 批处理请求/秒 |
吞吐趋势 |
sys.dm_os_performance_counters |
较基线 下降 >30% 持续 10 分钟 |
| 平均等待时间 |
资源等待 |
sys.dm_os_wait_stats |
显著上升并持续 >10 分钟 |
| 错误/失败连接 |
网络或认证异常 |
/var/log/syslog、journalctl |
短时间内 突增 |