Ubuntu 上 SQL Server 性能监控实操指南
一 监控体系与工具选型
二 快速排障与日志定位
sudo systemctl status mssql-server --no-pagersudo tail -f /var/log/mssql/errorlog三 数据库内置监控与慢查询定位
SELECT
r.session_id, r.status, r.command, r.cpu_time, r.reads, r.writes, r.logical_reads,
r.wait_type, r.wait_time, r.last_wait_type, r.wait_resource,
t.text AS sql_text, s.loginame, s.host_name, s.program_name
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
JOIN sys.sysprocesses AS s ON r.session_id = s.spid
ORDER BY r.cpu_time DESC;
SELECT TOP 20 wait_type, waiting_tasks_count, wait_time_ms, signal_wait_time_ms
FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;
CREATE EVENT SESSION [slow_query_xe] ON SERVER
ADD EVENT sqlserver.sql_batch_completed(
ACTION(sqlserver.sql_text)
WHERE duration > 1000000 -- 1,000,000 微秒 = 1 秒
),
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE duration > 1000000
)
ADD TARGET package0.event_file(SET filename=N'/var/opt/mssql/extended_events/slow_query_xe.xel')
WITH (STARTUP_STATE=OFF);
GO
ALTER EVENT SESSION [slow_query_xe] ON SERVER STATE = START;
sys.fn_xe_file_target_read_file 分析。四 系统级监控与可视化搭建
五 关键指标与告警阈值示例
| 维度 | 关键指标 | 建议阈值或关注点 | 采集方式 |
|---|---|---|---|
| 资源 | CPU 使用率 | 持续 > 80% 需排查热点查询/并发 | top/htop、Node Exporter |
| 资源 | 可用内存 | 剩余 < 10% 或频繁换页 | free、Node Exporter |
| 资源 | 磁盘读写延迟 | 平均读写 > 20 ms 需关注 I/O 瓶颈 | iostat、Node Exporter |
| 资源 | 磁盘空间 | 可用 < 20% 触发扩容/清理 | df、Node Exporter |
| 连接 | 当前连接数 | 接近 最大连接数 时拒绝新连接 | sys.dm_exec_sessions、mssql-exporter |
| 查询 | 批处理/语句时延 | P95/P99 持续升高需优化 | Extended Events、mssql-exporter |
| 等待 | 前 N 等待类型 | PAGEIOLATCH_, LCK_, WRITELOG 等异常升高 | sys.dm_os_wait_stats、mssql-exporter |
| 缓存 | 缓冲池命中率 | 长期 < 95% 可能内存不足 | mssql-exporter |
| 日志 | 日志刷新时延 | 持续偏高影响提交性能 | mssql-exporter |
提示:阈值需结合业务峰谷与历史基线动态调整,避免误报与漏报。