centos中sqlserver性能监控
导读: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 + Grafana 或 Zabbix 做长期存储、可视化与阈值告警,便于 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 依赖 DMVs 与 DBCC,适合在 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
