Ubuntu环境下SQL Server性能监控工具与方案
一 内置数据库工具
SELECT TOP 5
r.session_id, r.status, r.cpu_time, r.total_elapsed_time,
t.text AS query_text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
ORDER BY r.total_elapsed_time DESC;
二 Linux系统层监控
sudo apt install htop)。sudo apt install sysstat):关注 cpu us、memory free 等。三 图形化与开源监控平台
四 快速上手与告警实践
# 1) 进程资源
top -b -d 1 -n 5 | grep -i sqlservr
# 2) 系统整体与 I/O(需已安装 sysstat)
vmstat 1 5
iostat -x 1 5
# 3) 网络连接
ss -tulnp | grep mssql
-- 当前活跃请求与等待
SELECT TOP 10
r.session_id, r.status, r.wait_type, r.wait_time, r.cpu_time,
t.text AS query_text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
ORDER BY r.total_elapsed_time DESC;
-- 会话概览
SELECT session_id, login_name, program_name, login_time, status
FROM sys.dm_exec_sessions
ORDER BY login_time DESC;
#!/usr/bin/env bash
THRESHOLD=80
EMAIL="admin@example.com"
CURRENT_TIME=$(date '+%F %T')
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "$CURRENT_TIME - CPU 使用率超过阈值($THRESHOLD%),当前:$CPU_USAGE%" \
| mail -s "SQL Server CPU 告警" "$EMAIL"
fi
建议将脚本加入 cron(如每5分钟执行),并结合 Prometheus Alertmanager 或 Zabbix 实现分级告警。