在 Ubuntu 上监控 SQL Server(Microsoft SQL Server on Linux),可以从 系统层、数据库层、日志、第三方工具 四个维度来做。下面给你一套实用方案。
top
htop
free -h
df -h
iostat -x 1
ps aux | grep sqlservr
重点关注:
sqlcmd -S localhost -U sa -P '密码'
常用 DMV(动态管理视图):
-- 当前连接
SELECT * FROM sys.dm_exec_connections;
-- 正在执行的语句
SELECT
r.session_id,
r.status,
r.command,
t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t;
-- 等待统计
SELECT * FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;
cat /var/opt/mssql/log/errorlog
journalctl -u mssql-server
journalctl -u mssql-server -f
适合深入分析:
示例(记录慢查询):
CREATE EVENT SESSION [SlowQueries]
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(ACTION(sqlserver.sql_text)
WHERE duration > 5000000)
ADD TARGET package0.event_file(SET filename=N'/var/opt/mssql/log/slow.xel')
WITH (STARTUP_STATE=ON);
最常用方案
组件:
示例 sql_exporter 查询:
metrics:
- sql: |
SELECT cntr_value
FROM sys.dm_os_performance_counters
WHERE counter_name = 'Batch Requests/sec'
metrics:
- batch_requests:
usage: "GAUGE"
✅ CPU 使用率
✅ 内存使用(SQL Server 会占用大量内存)
✅ 磁盘 IO(日志 / 数据文件)
✅ 连接数
✅ 慢查询
✅ 死锁
✅ 错误日志异常
SELECT * FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;
free -h
cat /var/opt/mssql/log/errorlog | grep memory
生产环境推荐:
Ubuntu 系统监控
+ journalctl
+ DMV
+ Prometheus + Grafana
+ XEvent(慢查询)
如果你是:
我也可以帮你 直接给一套可复制的监控部署方案(含命令)。