首页主机资讯centos中sqlserver性能监控

centos中sqlserver性能监控

时间2026-01-19 19:03:04发布访客分类主机资讯浏览1112
导读:CentOS 上 SQL Server 性能监控实战指南 一 监控体系与分层 建议采用分层监控:操作系统层、SQL Server 引擎层、可视化告警层。 操作系统层:用 top/htop、vmstat、iostat、free、nmon、s...

CentOS 上 SQL Server 性能监控实战指南

一 监控体系与分层

  • 建议采用分层监控:操作系统层、SQL Server 引擎层、可视化告警层。
  • 操作系统层:用 top/htop、vmstat、iostat、free、nmon、sar、ss/tcpdump 观察 CPU、内存、磁盘 I/O、网络 等基础资源,定位瓶颈是否来自系统而非数据库。
  • SQL Server 引擎层:用 DMVs、Extended Events、Query Store、DBCC SQLPERF 获取等待、会话、查询、日志、缓存命中、连接等关键指标,用于定位慢查询、阻塞、日志压力等问题。
  • 可视化告警层:用 Prometheus + GrafanaZabbix 做长期存储、可视化与阈值告警,便于 7×24 监控与容量规划。

二 快速检查与常用 SQL

  • 连通性与版本
    • 命令:sqlcmd -S < host_or_ip> ,< port> -U < user> -P < pwd> -Q "SELECT @@SERVERNAME, @@VERSION, SERVERPROPERTY('ProductVersion') AS ProductVersion"
  • 实时会话与等待
    • 查询正在执行的请求与等待类型:
      SELECT
        r.session_id, r.status, r.command, r.wait_type, r.wait_time, r.cpu_time,
        r.logical_reads, r.reads, r.writes,
        s.loginame, s.host_name, s.program_name,
        SUBSTRING(t.text, (r.statement_start_offset/2)+1,
                  (CASE WHEN r.statement_end_offset = -1 THEN DATALENGTH(t.text)
                        ELSE r.statement_end_offset/2 - r.statement_start_offset/2 + 1 END)) AS stmt_text
      FROM sys.dm_exec_requests AS r
      JOIN sys.sysprocesses AS s ON r.session_id = s.spid
      CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t
      ORDER BY r.cpu_time DESC;
          
      
  • 索引与缺失索引建议
    SELECT
      migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
      'CREATE INDEX IX_' + OBJECT_NAME(mid.object_id) + '_'
        + REPLACE(REPLACE(REPLACE(ISNULL(mid.equality_columns,''),', ','_'),'[',''),']','') + '_'
        + REPLACE(REPLACE(REPLACE(ISNULL(mid.inequality_columns,''),', ','_'),'[',''),']','')
        + ' ON ' + mid.statement + ' (' + ISNULL(mid.equality_columns,'')
        + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END
        + ISNULL(mid.inequality_columns, '') + ')'
        + ISNULL(' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
      mid.statement, mid.equality_columns, mid.inequality_columns, mid.included_columns
    FROM sys.dm_db_missing_index_details AS mid
    INNER JOIN sys.dm_db_missing_index_groups AS mig ON mid.index_handle = mig.index_handle
    INNER JOIN sys.dm_db_missing_index_group_stats AS migs ON mig.index_group_handle = migs.group_handle
    WHERE migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) >
         10
    ORDER BY improvement_measure DESC;
        
    
  • 日志空间使用
    DBCC SQLPERF(LOGSPACE);
        
    
  • 性能基线快照(便于对比)
    SELECT
      (SUM(single_pages_kb) + SUM(multi_pages_kb)) / 1024.0 AS BufferPoolMB,
      (SUM(virtual_memory_committed_kb) + SUM(shared_memory_committed_kb)) / 1024.0 AS MemCommittedMB
    FROM sys.dm_os_memory_clerks WITH (NOLOCK)
    WHERE type LIKE 'MEMORYCLERK_SQLBUFFERPOOL%';
        
    

以上 SQL 依赖 DMVsDBCC,适合在 sqlcmd 或 SSMS 中定期执行并留存结果。

三 长期监控与可视化

  • Prometheus + Grafana
    • 部署 Prometheus 作为时序库,使用 prometheus-mssql-exporter 采集 SQL Server 指标(连接、缓存命中、等待、批处理请求、错误等),在 Grafana 中导入 SQL Server 仪表盘并配置阈值告警(如 Page Life Expectancy、Batch Requests/s、Signal Waits 等)。
  • Zabbix
    • 通过 ODBC 监控 SQL Server 内置性能计数器与关键查询(如连接数、用户连接、日志空间、阻塞会话数等),结合触发器实现邮件/企业微信/钉钉告警,适合已有 Zabbix 体系的团队。
  • 商业与图形化工具
    • SolarWinds DPA、Redgate SQL Monitor 提供开箱即用的拓扑、查询分析与历史趋势,适合对可视化与诊断效率要求较高的场景。

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

指标 含义 建议阈值或关注点
Page Life Expectancy 页在缓冲池中的平均生存时间 持续低于 300 秒 可能表示内存压力
Buffer Cache Hit Ratio 缓冲池命中率 长期低于 95% 需关注内存与 I/O
Batch Requests/s 每秒批处理请求数 结合基线观察突增/骤降
Compiles/s vs Recompiles/s 编译与重编译 重编译比例高可能意味着计划不稳定
Lock Waits / Average Wait Time 锁等待与平均等待时间 持续升高提示阻塞/争用
Log Flush Wait / Log Bytes Flushed/s 日志刷新等待与吞吐 等待高或日志吞吐异常需查日志设备
User Connections 当前连接数 接近最大连接或异常波动需核查应用
Disk Read/Write Latency 存储延迟 超过 10–20 ms(视硬件而定)需排查 I/O
CPU Utilization 服务器 CPU 持续 > 80% 且 SQL 为热点需优化查询/索引
Failed Connections 失败连接数 突增可能意味着认证/网络/服务问题
上述指标可通过 DMVs、Extended Events、Query Store、DBCC SQLPERF 与系统工具获取,并在 Prometheus/Grafana 或 Zabbix 中设置告警。

五 排障流程与优化建议

  • 资源先行:用 top/vmstat/iostat/nmon 确认是否为 CPU、内存、磁盘 I/O、网络 瓶颈,再回到数据库定位。
  • 定位会话与等待:用 DMVs 找出 TOP 会话/语句等待类型阻塞链,必要时配合 Extended Events 抓取短时问题。
  • 查询与索引:开启并查询 Query Store 的“回归查询/高变差查询”,结合缺失索引建议与执行计划进行索引与语句优化。
  • 日志与空间:用 DBCC SQLPERF(LOGSPACE) 检查日志空间,确保日志设备健康且备份/截断策略合理。
  • 持续化与复盘:将关键 SQL 与指标采集纳入 Prometheus/Grafana 或 Zabbix,建立基线、设置告警、定期复盘优化。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos中sqlserver性能监控
本文地址: https://pptw.com/jishu/786093.html
CentOS Node.js网络配置怎么做 Node.js在CentOS中的安全性如何

游客 回复需填写必要信息