Linux 上监控 SQL Server 性能的可落地方案
一 内置工具与 DMV 查询
sqlcmd -S your_server_name -U your_username -P your_passwordSELECT @@SERVERNAME, @@VERSION, SERVERPROPERTY('ProductVersion')SELECT wait_type, wait_time_ms, signal_wait_time_ms FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESCSELECT 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)SELECT * FROM sys.dm_db_missing_index_detailsSELECT TOP 20 total_worker_time/execution_count AS avg_cpu_ms, execution_count, total_elapsed_time/execution_count AS avg_elapsed_ms, SUBSTRING(st.text, (qs.statement_start_offset/2)+1, ((CASE qs.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)+1) AS stmt FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st ORDER BY avg_elapsed_ms DESC二 系统层监控
pidof sqlservrtop -p $(pidof sqlservr)、htop(交互式)、vmstat 1(CPU/内存/IO 概览)、dstat(CPU/内存/磁盘/网络多合一)、glances(跨平台总览)、Netdata(实时可视化)。iostat -x 1df -h、lsblk三 开源监控与可视化
prometheus.yml 的 scrape_configs 添加作业(如 sqlserver 作业,target 指向 Exporter 地址),在 Grafana 中添加 Prometheus 数据源并导入 SQL Server 仪表盘。四 关键指标与告警阈值示例
| 维度 | 关键指标 | 建议阈值或动作 |
|---|---|---|
| 资源 | CPU 使用率 | 持续 >80% 需排查热点查询或并发 |
| 资源 | 可用内存 | 可用内存长期 <10% 或频繁换页 |
| 资源 | 磁盘 IO 等待 | avg. disk sec/read > 20ms 或 avg. disk sec/write > 20ms 需核查阵列/磁盘/日志 |
| 资源 | 日志卷使用率 | >80% 及时扩容或归档 |
| SQL 引擎 | Page Life Expectancy | <300 秒 可能内存压力 |
| SQL 引擎 | Buffer Cache Hit Ratio | <95% 考虑内存或查询优化 |
| SQL 引擎 | Compiles/Sec、Recompiles/Sec | 编译/重编译异常升高,检查参数嗅探与计划缓存 |
| SQL 引擎 | 阻塞与死锁 | 出现持续阻塞或死锁,优化事务/索引/隔离级别 |
| 查询 | 长时查询 | 平均执行时间或 CPU/逻辑读异常升高,抓取执行计划并优化 |
| 会话 | 连接数 | 接近 max_connections 时扩容或限流 |
五 快速落地步骤
iostat、vmstat、df 等。sqlcmd 定期抓取 DMV),输出 Prometheus 可读指标。