Debian上SQL Server的性能监控怎么做
导读:Debian上SQL Server性能监控实践 一 监控体系与总体思路 采用分层监控:系统层(CPU、内存、磁盘、网络)→ 数据库引擎层(会话、请求、等待、I/O、计划缓存)→ 应用层(慢查询、错误、连接池)。 在 Debian 上,SQ...
Debian上SQL Server性能监控实践
一 监控体系与总体思路
- 采用分层监控:系统层(CPU、内存、磁盘、网络)→ 数据库引擎层(会话、请求、等待、I/O、计划缓存)→ 应用层(慢查询、错误、连接池)。
- 在 Debian 上,SQL Server 以 mssql-server 进程运行,建议同时采集系统指标与数据库内部指标,便于定位瓶颈(CPU压力、内存压力、I/O 延迟、锁等待、编译/执行异常等)。
二 系统层监控
- 常用工具与用途
- 进程与负载:top/htop、uptime
- 内存:free -m
- 磁盘与 I/O:df -h、iostat -x 1、dstat
- 网络:ss -s、sar -n DEV 1
- 快速检查示例
- 查看资源与 I/O:
watch -n 1 “echo ‘=== CPU/内存 ===’; top -bn1 | head -15; echo ‘=== 磁盘空间 ===’; df -h; echo ‘=== 磁盘 I/O ===’; iostat -x 1 3” - 查看连接与端口占用:
ss -lntp | grep :1433; netstat -anp | grep :1433
- 查看资源与 I/O:
- 建议采集的关键指标
- CPU:用户态/系统态占比、运行队列长度(load average)
- 内存:可用内存、缓冲/缓存、swap 使用
- 磁盘:读写吞吐、IOPS、await、%util
- 网络:带宽占用、丢包/重传
三 数据库引擎层监控
- 动态管理视图 DMVs(高频巡检)
- 当前阻塞与长事务
- 示例:
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 TOP 20 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 s.session_id, r.status, r.cpu_time, r.logical_reads, r.reads, r.writes, s.loginame, s.host_name, s.program_name, t.text FROM sys.dm_exec_sessions s LEFT JOIN sys.dm_exec_requests r ON s.session_id = r.session_id OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t WHERE s.is_user_process = 1 ORDER BY r.cpu_time DESC;
- 示例:
- 性能计数器(与系统层指标交叉验证)
- 示例:
SELECT counter_name, cntr_value, cntr_type FROM sys.dm_os_performance_counters WHERE counter_name IN (N’Page life expectancy’, N’Buffer cache hit ratio’, N’Lazy writes/sec’, N’Page reads/sec’, N’Page writes/sec’);
- 示例:
- 当前阻塞与长事务
- 轻量跟踪与诊断
- 扩展事件(XE)用于生产环境低开销跟踪(如捕获超时、死锁、长查询)。
- 常用存储过程:sp_who2、sp_whoisactive、sp_BlitzFirst、sp_BlitzWho(快速体检与问题定位)。
- 图形化工具(可选)
- 通过 SSMS 的“活动监视器、性能监视器、执行计划”进行可视化分析(适合偶发问题排查与复盘)。
四 告警与可视化
- Prometheus + Grafana(推荐)
- 节点层:部署 Node Exporter 采集 CPU、内存、磁盘、网络等指标,Prometheus 拉取并存储,Grafana 配置面板展示与阈值告警。
- 数据库层:部署 mssql-exporter(社区方案)采集 SQL Server DMV/性能计数器,Prometheus 抓取后在 Grafana 展示关键图表(如活跃会话、等待类型、缓冲命中率、I/O 等)。
- 告警规则示例(告警表达式):
- 节点 CPU 持续高于 80%:avg by(instance)(rate(node_cpu_seconds_total{ mode=“idle”} [5m])) < 0.2
- 节点磁盘 %util 持续高于 90%:1 - (avg by(instance)(rate(node_disk_read_time_seconds_total[5m]) + rate(node_disk_write_time_seconds_total[5m])) / (avg by(instance)(rate(node_disk_io_time_seconds_total[5m]))) > 0.9
- SQL Server 缓冲命中率低于 95%:1 - (1.0 * SUM(CASE WHEN counter_name = ‘Buffer cache hit ratio’ THEN cntr_value ELSE 0 END) / SUM(CASE WHEN counter_name = ‘Buffer cache hit ratio base’ THEN cntr_value ELSE 0 END)) < 0.95
- 日志与审计
- 启用与轮转 SQL Server 错误日志(Linux 下位于 /var/opt/mssql/log/errorlog),结合 Promtail + Loki 或 Filebeat + Elasticsearch 做检索与可视化。
- 告警通道
- 使用 Alertmanager 对接企业微信、钉钉、Slack、邮件或短信网关,确保关键阈值(CPU、磁盘、连接数、阻塞、错误日志激增)能及时通知。
五 落地流程与优化联动
- 建立基线
- 在工作负载稳定时段采集 1–2 周 数据,确定 CPU、内存、I/O、会话数、等待类型的常态区间与峰值。
- 例行巡检
- 每日:活跃会话、阻塞、长事务、错误日志异常、备份是否成功。
- 每周:等待统计 Top N、索引/统计信息健康度、磁盘增长趋势、参数配置复核(如内存上限、并行度)。
- 与优化闭环
- 结合监控发现的问题,优先处理高成本查询(缺失索引、参数嗅探、统计过期)、锁与阻塞、I/O 瓶颈与配置不当(如 max server memory、max degree of parallelism、cost threshold for parallelism),并回归验证指标是否改善。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian上SQL Server的性能监控怎么做
本文地址: https://pptw.com/jishu/755681.html
