温馨提示×

如何监控Ubuntu SQL Server性能

小樊
40
2026-01-12 01:54:54
栏目: 云计算

Ubuntu 上 SQL Server 性能监控实操指南

一 监控体系与工具选型

  • 建议采用“系统级 + 数据库内置 + 可视化平台”三层方案:
    • 系统级:用 top/htop、vmstat、iostat、netstat、free、df、uptime 观察 CPU、内存、磁盘 I/O、网络、负载 等基础资源。
    • 数据库内置:用 DMVs(如 sys.dm_exec_requests、sys.dm_os_wait_stats) 实时洞察 会话、等待、阻塞;用 Extended Events 低开销捕获 慢查询/错误/登录 等事件;配合 SSMS 活动监视器/执行计划 做深入诊断。
    • 可视化平台:用 Prometheus + Grafana 搭建长期监控与告警面板,便于容量规划与趋势分析。

二 快速排障与日志定位

  • 服务状态与错误日志:
    • 查看服务状态:sudo systemctl status mssql-server --no-pager
    • 实时查看错误日志:sudo tail -f /var/log/mssql/errorlog
    • 常见性能相关线索包括:资源不足、权限/配置异常、启动失败原因等。
  • 连接与网络:
    • 确认 SQL Server Browser 运行且防火墙放行 1433 端口,便于远程连接与排障。
  • 资源瓶颈初筛:
    • top/htop 看 CPU/内存占用,iostat 看磁盘吞吐与延迟,vmstat 看上下文切换与 I/O 等待,netstat 检查连接与端口占用,free/df 检查内存与磁盘空间,uptime 看系统负载。

三 数据库内置监控与慢查询定位

  • 实时会话与等待统计(DMVs):
    • 查看当前运行请求与阻塞:
      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;
      
  • 低开销事件捕获(Extended Events):
    • 示例:创建跟踪会话捕获超过阈值的批处理与语句(按需调整阈值与路径)
      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;
      
    • 在 SSMS 中通过“管理 → 扩展事件 → 会话”查看与导出结果,或用 T-SQL 查询 sys.fn_xe_file_target_read_file 分析。
  • 图形化诊断(SSMS):
    • 使用 活动监视器 观察 进程、资源等待、最近消耗;通过 执行计划 识别 扫描/键查找/排序/哈希匹配 等成本热点。

四 系统级监控与可视化搭建

  • 系统资源面板:
    • 实时与趋势:用 glances、dstat、Netdata 快速查看 CPU、内存、磁盘 I/O、网络 等;配合 Prometheus Node Exporter 采集指标,Grafana 展示。
  • Prometheus + Grafana 实践要点:
    • 在 Ubuntu 上部署 PrometheusNode Exporter,Grafana 添加 Node Exporter 数据源并导入系统监控面板。
    • 针对 SQL Server,建议部署社区提供的 mssql-exporter(或自研 Exporter)采集数据库指标,并在 Grafana 中构建 连接数、缓存命中率、批处理/语句时延、锁等待、I/O 吞吐 等面板,设置阈值告警。

五 关键指标与告警阈值示例

维度 关键指标 建议阈值或关注点 采集方式
资源 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

提示:阈值需结合业务峰谷与历史基线动态调整,避免误报与漏报。

0