我试图找出监控这两个事件的方法
记录发送队列大小 - 我可以在 perfmon 中看到
重做队列大小 - 我可以在 dmv 中看到,但在 perfmon 计数器中看不到
有什么方法可以使用 perfmon 以便即使计数器在 perfmon 中不可用,我也可以计算重做队列大小?
此外,当这些事件是数据库镜像的一部分时,我看到这些事件被记录在 Windows 事件查看器中。但是现在使用 AG,如何在 Windows 事件查看器中记录这两个值超出一定范围?
编辑
通过警报,我的意思是我们在 AG中有一些东西,如此处所示,作为从 db 镜像中看到的消息?
日志发送队列和重做队列都可以在
sys.sys.dm_hadr_database_replica_states
( docs ) 中找到,也可以使用SQLServer:Database Replica
Perfmon 计数器 ( docs )。性能监视器
使用 Perfmon 计数器,您需要在每个副本上单独收集计数器。每个副本都知道影响该副本本身的发送/重做(恢复)队列。
听起来您已经找到了
Log Send Queue
perfmon 计数器,其定义为:Redo Queue的perfmon计数器其实就是
Recovery Queue
计数器,定义为:您还可以通过查询
sys.dm_os_performance_counters
DMV 使用 T-SQL 访问 Perfmon 计数器。T-SQL / DMV
从 T-SQL,您可以查询 DMV 以获取此信息。以下查询来自我的标准工具箱,包括发送和重做队列大小和速率(在前几列中),以及有关副本状态和发送/重做状态的一些其他信息。请注意,在主副本上运行它会报告所有副本的状态信息,在辅助副本上运行它只会报告该辅助副本的本地信息。
通过 T-SQL 进行监控的优点是您可以拥有一个单一/中央收集点来一次检查所有副本的状态。
警报
如果您没有能够直接观察 Perfmon 计数器或 DMV 的监控产品,您可以使用 SQL Server 代理警报系统破解您的警报。
在对象资源管理器 --> SQL Server 代理 --> 警报中,选择创建新警报
在 New Alert 窗口的 General 选项卡上,选择要监视的 Perfmon 计数器以及警报阈值。
在响应选项卡上,您可以选择发送电子邮件以通知 SQL 代理操作员或执行 SQL 代理作业。您可以让 SQL 代理作业响应运行 T-SQL 或 PowerShell,它几乎可以执行任何操作(例如记录到 Windows 事件日志)。
我还建议跟踪您的发送队列,因为我发现我们的系统有 5 个辅助节点(2 个报告异步、2 个故障转移异步、1 个故障转移同步),其中一些异步保存在一个巨大的发送队列上,我认为这是从 CPU 发生的运行并行处理,因为 maxDOP 太高,因此 CPU 等待时间导致发送延迟较大(40GB~ 日志文件)。
发送队列/发送 kbs = 发送剩余时间,找出一个您希望发送数据的良好阈值,如果超过该阈值,则触发那些发送队列警报,如果它将高于该阈值。
我还建议您将任何大型索引作业限制为小于服务器/数据 DOP 的 maxDOP,以确保同步不会因索引而受到阻碍。