SQL Server AlwaysOn (SQL 查询数据详解及监控用途)

修正后的完整查询

bash 复制代码
SELECT 
    ar.replica_server_name AS [副本名称],
    ar.availability_mode_desc AS [同步模式],
    DB_NAME(dbr.database_id) AS [数据库名称],
    dbr.database_state_desc AS [数据库状态],
    dbr.synchronization_state_desc AS [同步状态],
    dbr.synchronization_health_desc AS [同步健康状态],
    ISNULL(
        CASE dbr.redo_rate
            WHEN 0 THEN -1
            ELSE CAST(dbr.redo_queue_size AS FLOAT) / dbr.redo_rate
        END, 
        -1
    ) AS [Redo延迟(秒)],
    ISNULL(
        CASE dbr.log_send_rate
            WHEN 0 THEN -1
            ELSE CAST(dbr.log_send_queue_size AS FLOAT) / dbr.log_send_rate
        END, 
        -1
    ) AS [Log传送延迟(秒)],
    dbr.redo_queue_size AS [Redo等待队列(KB)],
    dbr.redo_rate AS [Redo速率(KB/S)],
    dbr.log_send_queue_size AS [Log传送等待队列(KB)],
    dbr.log_send_rate AS [Log传送速率(KB/S)]  -- 修正反斜杠为斜杠
FROM 
    master.sys.availability_replicas AS ar
INNER JOIN 
    master.sys.dm_hadr_database_replica_states AS dbr  -- 补全表名
    ON ar.replica_id = dbr.replica_id  -- 添加关联条件
    AND ar.group_id = dbr.group_id;    -- 按可用性组关联

SQL 查询数据详解及监控用途

以下 SQL 查询用于获取 SQL Server AlwaysOn 可用性组中数据库副本的详细状态和性能指标。这些数据非常适合用于实时监控和高可用性环境的健康检查。


可查询的关键数据及监控用途

字段名 数据来源 监控用途
副本名称 sys.availability_replicas 标识每个副本的服务器名称,用于区分主副本和辅助副本。
同步模式 sys.availability_replicas 显示副本的同步模式: ✅ SYNCHRONOUS_COMMIT(同步提交) ⏳ ASYNCHRONOUS_COMMIT(异步提交)。
数据库名称 sys.dm_hadr_database_replica_states 标识可用性组中的具体数据库,用于定位问题数据库。
数据库状态 sys.dm_hadr_database_replica_states 监控数据库是否在线(ONLINE)或处于恢复中(RESTORING)。
同步状态 sys.dm_hadr_database_replica_states 判断数据同步是否正常: ✅ SYNCHRONIZED(已同步) ⚠️ SYNCHRONIZING(同步中) ❌ NOT SYNCHRONIZING(未同步)。
同步健康状态 sys.dm_hadr_database_replica_states 健康状态分级: ✅ HEALTHY(健康) ⚠️ PARTIALLY_HEALTHY(部分健康) ❌ NOT_HEALTHY(异常)。
Redo延迟(秒) 计算字段(redo_queue_size / redo_rate 辅助副本应用日志的预计耗时。 阈值建议:>30 秒需检查辅助副本性能。
Log传送延迟(秒) 计算字段(log_send_queue_size / log_send_rate 主副本发送日志到辅助副本的耗时。 阈值建议:>10 秒需优化网络带宽。
Redo等待队列(KB) sys.dm_hadr_database_replica_states 辅助副本待应用的日志量。 阈值建议:>100,000 KB 需排查磁盘 I/O。
Redo速率(KB/S) sys.dm_hadr_database_replica_states 辅助副本每秒应用的日志量。 阈值建议:<500 KB/S 表示性能不足。
Log传送等待队列(KB) sys.dm_hadr_database_replica_states 主副本待发送的日志量。 阈值建议:>50,000 KB 需检查主副本负载或网络。
Log传送速率(KB/S) sys.dm_hadr_database_replica_states 主副本每秒发送的日志量。 阈值建议:<1,000 KB/S 需优化网络或启用压缩。

监控场景示例

1. 实时同步状态仪表盘

将查询结果集成到 GrafanaPower BI 中,生成以下可视化图表:

同步健康状态 :用红/黄/绿颜色标记各副本状态。

延迟趋势图 :展示 Redo延迟Log传送延迟 的历史变化。

队列积压热力图 :按数据库和副本显示 Redo等待队列Log传送队列

2. 自动化告警

通过 ZabbixPrometheus 设置警报规则:

yaml 复制代码
# Prometheus 警报规则示例
- alert: HighRedoLatency
  expr: redo_latency_seconds > 30
  annotations:
    summary: "高 Redo 延迟 ({{ $value }}秒)"
    description: "副本 {{ $labels.replica }} 的数据库 {{ $labels.database }} Redo 延迟过高!"

- alert: LogSendQueueOverflow
  expr: log_send_queue_kb > 50000
  annotations:
    summary: "Log 传送队列积压"
    description: "主副本的 Log 传送队列积压 {{ $value }} KB,需立即处理!"
3. 日常巡检报告

使用 PowerShellPython 定时运行查询并生成 CSV/Excel 报告:

powershell 复制代码
# PowerShell 脚本示例
$query = @"
SELECT [副本名称], [同步模式], [数据库名称], [同步健康状态], [Redo延迟(秒)]
FROM (...完整查询...)
"@
Invoke-SqlCmd -Query $query -ServerInstance "YourServer" | Export-Csv -Path "AlwaysOn_Report_$(Get-Date -Format 'yyyyMMdd').csv"

权限要求

最低权限VIEW SERVER STATE(允许查询动态管理视图)。

推荐权限CONTROL AVAILABILITY GROUP(可结合故障转移操作)。


总结

通过这些 SQL 查询,您可以监控以下核心内容:

  1. 同步健康性 :快速发现 NOT_HEALTHY 状态并介入处理。
  2. 延迟与性能 :定位网络瓶颈(高 Log传送延迟)或副本性能问题(低 Redo速率)。
  3. 队列积压:预警数据同步滞后风险,防止故障转移时数据丢失。

建议将查询集成到自动化监控系统中,并定期优化阈值规则,以保障 AlwaysOn 环境的稳定性和高可用性。

相关推荐
海山数据库4 小时前
移动云大云海山数据库(He3DB)postgresql_anonymizer插件原理介绍与安装
数据库·he3db·大云海山数据库·移动云数据库
云飞云共享云桌面4 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
2501_927993535 小时前
SQL Server 2022安装详细教程(图文详解,非常详细)
数据库·sqlserver
星火s漫天5 小时前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
xcLeigh5 小时前
Python 项目实战:用 Flask 实现 MySQL 数据库增删改查 API
数据库·python·mysql·flask·教程·python3
威迪斯特5 小时前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
xu_yule5 小时前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式
一灰灰blog5 小时前
Spring AI中的多轮对话艺术:让大模型主动提问获取明确需求
数据库·人工智能·spring
Nandeska6 小时前
15、基于MySQL的组复制
数据库·mysql
AllData公司负责人6 小时前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源