温馨提示×

CentOS如何进行SQL Server的性能监控

小樊
35
2025-12-07 22:41:32
栏目: 云计算

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

一 监控体系与总体思路

  • CentOS 上建议采用“数据库内置指标 + 操作系统资源 + 可视化告警平台”三层方案:
    1. DMVs/扩展事件/Query Store 获取 SQL 层等待、执行、错误、日志等关键指标;
    2. sqlcmd 做快速连通性与状态巡检;
    3. top/vmstat/iostat/nmon 等观察 OS 层 CPU、内存、磁盘、网络;
    4. Prometheus + GrafanaZabbix 做长期采集、可视化与阈值告警。

二 数据库内置监控

  • 快速连通与版本信息
    • 命令:sqlcmd -S <host_or_ip>,<port> -U <user> -P <pwd> -Q "SELECT @@SERVERNAME, @@VERSION, SERVERPROPERTY('ProductVersion')"
    • 用途:确认实例可达、版本与补丁级别。
  • 活动会话与阻塞
    • 查询示例:
      • 当前请求与等待:SELECT session_id, request_id, task_state, wait_type, wait_time_ms, blocking_session_id FROM sys.dm_exec_requests WHERE session_id <> @@SPID;
      • 长事务与最耗时查询(示例):
        SELECT TOP 20 session_id, request_id, start_time, command, text, cpu_time, reads, writes FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) st ORDER BY cpu_time DESC;
    • 用途:定位阻塞链、长事务、异常 SQL。
  • 日志空间使用
    • 命令:EXEC sp_spaceused;DBCC SQLPERF(LOGSPACE);
    • 用途:发现日志增长过快、空间紧张。
  • 性能与诊断设施
    • DMVs:如 sys.dm_os_wait_statssys.dm_db_index_usage_statssys.dm_exec_query_stats 等,用于等待、索引、执行统计。
    • 扩展事件(Extended Events):轻量级事件捕获,适合替代 Profiler 做问题追踪。
    • Query Store(SQL Server 2016+):持久化查询计划与运行时统计,便于回归分析与性能回滚。

三 操作系统层监控

  • 进程与资源
    • CPU/内存/负载:tophtopvmstat 1uptime
    • 磁盘 I/O:iostat -x 1nmon
    • 网络:netstat -ssar -n DEV 1
    • 进程内存映射:pmap -x <sqlservr_pid>
  • 精准跟踪 SQL Server 进程
    • 获取 PID:pidof sqlservrps -ef | grep sqlservr
    • 定向观察:top -p $(pidof sqlservr)htop -p <pid>
  • 用途:识别 CPU 飙升、内存压力、I/O 瓶颈、网络异常等 OS 层根因。

四 可视化与告警平台

  • Prometheus + Grafana
    • 采集器:部署 prometheus-mssql-exporter,在 prometheus.yml 增加 job:
      scrape_configs:
        - job_name: 'sqlserver'
          static_configs:
            - targets: ['<exporter_host>:<port>']
      
    • 可视化:Grafana 添加 Prometheus 数据源,导入 SQL Server 仪表盘(社区有现成模板),配置阈值告警。
  • Zabbix
    • 特性:支持 MSSQL 性能计数器、实例/库自动发现、阈值与事件告警,可与 Grafana 联动展示。
  • 其他可选
    • Nagios:通过插件对服务可用性、资源阈值做监控与告警。
    • 商业工具:SolarWinds DPARedgate SQL Monitor,适合深度 SQL 诊断与可视化。

五 落地步骤与关键 SQL

  • 步骤
    1. 建立只读监控账号,授予 VIEW SERVER STATE 等必要权限;
    2. 部署 sqlcmd 巡检脚本与 Prometheus Exporter,配置 Grafana 仪表盘;
    3. 配置 Zabbix 主机与模板、触发器与通知渠道;
    4. 建立基线:记录日常 CPU/IO/等待类型/日志空间 的正常区间;
    5. 设定告警:如 阻塞 > 5sPLE < 300s日志使用率 > 80%CPU > 80% 持续 5 分钟 等;
    6. 例行巡检:每日查看 活跃会话/等待/长事务,每周分析 Query Store索引/统计信息,每月评审告警与容量。
  • 关键 SQL 清单
    • 版本与连通性:SELECT @@SERVERNAME, @@VERSION, SERVERPROPERTY('ProductVersion');
    • 当前阻塞与等待:SELECT session_id, request_id, task_state, wait_type, wait_time_ms, blocking_session_id FROM sys.dm_exec_requests WHERE session_id <> @@SPID;
    • 日志空间:DBCC SQLPERF(LOGSPACE);
    • 最耗时查询(示例):
      SELECT TOP 20 session_id, request_id, start_time, command, text, cpu_time, reads, writes FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) st ORDER BY cpu_time DESC;
    • 索引/统计使用概览(示例):
      SELECT OBJECT_NAME(object_id) AS tbl, used, rows FROM sys.dm_db_partition_usage_stats WHERE database_id = DB_ID();
      SELECT OBJECT_NAME(object_id) AS tbl, stats_date(object_id, stats_id) AS stats_updated FROM sys.stats WHERE database_id = DB_ID();
    • 说明:按需扩展为 Extended Events 会话与 Query Store 报表,用于长期趋势与回归分析。

0