CentOS 下 SQL Server 性能监控实操指南
一 监控体系与分层
二 快速检查与即时诊断
sqlcmd -S <host_or_ip>,<port> -U <user> -P <pwd>SELECT @@SERVERNAME, @@VERSION, SERVERPROPERTY('ProductVersion')SELECT session_id, request_id, task_state, wait_type, wait_time_ms, blocking_session_id FROM sys.dm_exec_requests WHERE session_id > 50;EXEC sp_who2;DBCC SQLPERF(LOGSPACE);top/htop、vmstat 1、free -m、uptimeiostat -x 1(关注 await、r/s、w/s、util)mpstat -P ALL 1netstat -anp | grep :<sql_port>pmap -x <sqlservr_pid>、ps aux | grep sqlservrnmon、sar -u -r -b -d 1 60strace -p <sqlservr_pid> -T -f -o sqlstrace.out、tcpdump -i any -nn port <sql_port> -w sql.pcap三 长期监控与可视化方案
prometheus.yml 增加作业:
scrape_configs: - job_name: 'sqlserver' static_configs: - targets: ['<host_ip>:<exporter_port>']四 关键指标与阈值建议
| 维度 | 关键指标 | 常用来源 | 建议动作 |
|---|---|---|---|
| 连接与会话 | 当前连接数、阻塞会话数 | sys.dm_exec_sessions、sys.dm_exec_requests |
连接突增或长期阻塞时排查应用逻辑与锁等待 |
| 工作负载 | 批处理请求/秒、编译/重编译 | DMVs(如 sys.dm_exec_query_stats) |
重编译频繁时检查参数嗅探、统计信息 |
| 等待统计 | 前 N 等待类型与总等待时间 | sys.dm_os_wait_stats |
针对 PAGEIOLATCH_/WRITELOG/ASYNC_NETWORK_IO 等优化 IO、网络与日志 |
| 日志 | 日志空间使用率 | DBCC SQLPERF(LOGSPACE) |
接近满时扩容日志或优化检查点/备份 |
| 资源 | CPU 利用率、可用内存、磁盘 IO 等待 | top/vmstat/iostat/mpstat |
CPU 持续高时查热点查询;IO 高时查索引/统计/磁盘 |
| 错误与登录 | 登录失败、错误事件 | Extended Events | 发现暴力破解或异常登录及时处置 |
五 排障流程与优化方向
sys.dm_exec_requests 中定位 blocking_session_id,结合 sys.dm_exec_sql_text 与 sys.dm_exec_query_plan 查看 SQL 与执行计划;必要时用 Extended Events 捕获登录、错误与慢查询事件,降低开销。DBCC SQLPERF(LOGSPACE) 检查日志使用;用 iostat 观察 await、util,确认是否存储/文件系统瓶颈;结合日志备份策略与检查点调优。free、vmstat、top 判断内存压力与 CPU 占用;在 DMVs 中分析 PAGEIOLATCH_/RESOURCE_SEMAPHORE 等等待,配合索引与统计信息优化,减少不必要的排序/哈希/扫描。netstat 检查连接状态与端口占用,用 tcpdump 抓包定位异常流量或超时;结合应用侧连接池配置与超时重试策略。