温馨提示×

Ubuntu环境下SQL Server的性能监控工具

小樊
35
2025-12-27 21:06:42
栏目: 云计算

Ubuntu环境下SQL Server性能监控工具与方案

一 内置数据库工具

  • 动态管理视图 DMVs:用于实时洞察数据库运行与瓶颈,常用包括:
    • sys.dm_exec_requests(当前请求与等待信息)
    • sys.dm_exec_sessions(会话与登录信息)
    • sys.dm_os_performance_counters(SQL Server 性能计数器)
    • 示例:查询当前耗时最长的前5条查询
      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;
      
  • Extended Events(XE):轻量级事件跟踪,适合替代 Profiler 做慢查询、死锁、登录等事件采集与回放分析。
  • SQL Server Profiler:图形化跟踪工具,便于开发/测试环境分析执行轨迹,生产环境慎用(开销较大)。

二 Linux系统层监控

  • 进程与资源:
    • top/htop:快速查看 sqlservr 进程的 CPU/内存 占用(htop 需安装:sudo apt install htop)。
    • ps aux | grep mssql:定位 SQL Server 主进程。
  • 系统整体与 I/O:
    • vmstat 1(需 sudo apt install sysstat):关注 cpu usmemory free 等。
    • iostat -x 1(需 sysstat):关注磁盘 %utilawait,识别 I/O 瓶颈。
  • 网络与连接:
    • ss -tulnp | grep mssqlnetstat -an | grep mssql:查看监听端口(默认 1433)与连接状态。
  • 其他实用工具:
    • sar(系统活动历史)、dstat(综合资源)、glances(跨平台监控)。

三 图形化与开源监控平台

  • SQL Server Management Studio(SSMS):在 Windows 上连接 Ubuntu 实例,使用“性能监视器”、XE 会话、Profiler 等进行诊断(需启用 TCP/IP 远程连接)。
  • Prometheus + Grafana + mssql-exporter
    • 部署 Prometheus 采集时序数据,配置 mssql-exporter 作为目标暴露 SQL Server 指标;
    • Grafana 导入 SQL Server 社区仪表盘,实现可视化与告警(如连接数、锁等待、缓冲池命中率等)。
  • Netdata:轻量级实时监控,安装后访问 http://<Ubuntu_IP>:19999,可查看系统与 SQL Server 相关资源图表。
  • Zabbix:企业级监控,支持 SQL Server 模板、自动发现、阈值告警(邮件/短信/企业微信等)。

四 快速上手与告警实践

  • 5分钟系统体检(命令行)
    # 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
    
  • 5分钟数据库体检(T-SQL)
    -- 当前活跃请求与等待
    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;
    
  • 告警示例(Shell 监控 CPU 阈值)
    #!/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 AlertmanagerZabbix 实现分级告警。

0