CentOS如何进行SQL Server的性能监控
导读:CentOS 上 SQL Server 性能监控实操指南 一 监控体系与总体思路 在 CentOS 上建议采用“数据库内置指标 + 操作系统资源 + 可视化告警平台”三层方案: 用 DMVs/扩展事件/Query Store 获取 SQ...
CentOS 上 SQL Server 性能监控实操指南
一 监控体系与总体思路
- 在 CentOS 上建议采用“数据库内置指标 + 操作系统资源 + 可视化告警平台”三层方案:
- 用 DMVs/扩展事件/Query Store 获取 SQL 层等待、执行、错误、日志等关键指标;
- 用 sqlcmd 做快速连通性与状态巡检;
- 用 top/vmstat/iostat/nmon 等观察 OS 层 CPU、内存、磁盘、网络;
- 用 Prometheus + Grafana 或 Zabbix 做长期采集、可视化与阈值告警。
二 数据库内置监控
- 快速连通与版本信息
- 命令:
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_stats、sys.dm_db_index_usage_stats、sys.dm_exec_query_stats等,用于等待、索引、执行统计。 - 扩展事件(Extended Events):轻量级事件捕获,适合替代 Profiler 做问题追踪。
- Query Store(SQL Server 2016+):持久化查询计划与运行时统计,便于回归分析与性能回滚。
- DMVs:如
三 操作系统层监控
- 进程与资源
- CPU/内存/负载:
top、htop、vmstat 1、uptime - 磁盘 I/O:
iostat -x 1、nmon - 网络:
netstat -s、sar -n DEV 1 - 进程内存映射:
pmap -x < sqlservr_pid>
- CPU/内存/负载:
- 精准跟踪 SQL Server 进程
- 获取 PID:
pidof sqlservr或ps -ef | grep sqlservr - 定向观察:
top -p $(pidof sqlservr)、htop -p < pid>
- 获取 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 仪表盘(社区有现成模板),配置阈值告警。
- 采集器:部署 prometheus-mssql-exporter,在
- Zabbix
- 特性:支持 MSSQL 性能计数器、实例/库自动发现、阈值与事件告警,可与 Grafana 联动展示。
- 其他可选
- Nagios:通过插件对服务可用性、资源阈值做监控与告警。
- 商业工具:SolarWinds DPA、Redgate SQL Monitor,适合深度 SQL 诊断与可视化。
五 落地步骤与关键 SQL
- 步骤
- 建立只读监控账号,授予
VIEW SERVER STATE等必要权限; - 部署 sqlcmd 巡检脚本与 Prometheus Exporter,配置 Grafana 仪表盘;
- 配置 Zabbix 主机与模板、触发器与通知渠道;
- 建立基线:记录日常 CPU/IO/等待类型/日志空间 的正常区间;
- 设定告警:如 阻塞 > 5s、PLE < 300s、日志使用率 > 80%、CPU > 80% 持续 5 分钟 等;
- 例行巡检:每日查看 活跃会话/等待/长事务,每周分析 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 报表,用于长期趋势与回归分析。
- 版本与连通性:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS如何进行SQL Server的性能监控
本文地址: https://pptw.com/jishu/765984.html
