Beg*_*DBA 5 performance sql-server availability-groups sql-server-2017
我正在尝试找出监控这两个事件的方法
记录发送队列大小 - 我可以在 perfmon 中看到这一点
重做队列大小 - 我可以在 dmv 中看到,但在 perfmon 计数器中看不到
有没有什么方法可以使用 perfmon,以便我可以计算重做队列大小,即使计数器在 perfmon 中不可用?
另外,我发现这些事件在属于数据库镜像的一部分时会记录在 Windows 事件查看器中。但现在使用 AG,如何在 Windows 事件查看器中记录这 2 个超出特定范围的值?
编辑
我所说的警报是指我们在 AG 中是否有一些内容,如此处所示,作为从数据库镜像看到的消息?
日志发送队列和重做队列都可以在sys.sys.dm_hadr_database_replica_states
(文档) 中找到,也可以使用SQLServer:Database Replica
Perfmon 计数器 (文档) 来使用。
使用 Perfmon 计数器,您需要在每个副本上单独收集计数器。每个副本都知道影响该副本本身的发送/重做(恢复)队列。
\n听起来您已经找到了Log Send Queue
perfmon 计数器,其定义为:
\n\n主数据库日志文件中尚未发送到辅助副本的日志记录数量(以千字节为单位)。该值从主副本发送到辅助副本。队列大小不包括发送到辅助设备的 FILESTREAM 文件。
\n
Redo Queue 的 perfmon 计数器实际上就是计数器Recovery Queue
,其定义为:
\n\n辅助副本的日志文件中尚未重做的日志记录数量。
\n
您还可以通过查询 DMV 使用 T-SQL 访问 Perfmon 计数器sys.dm_os_performance_counters
。
SELECT *\nFROM sys.dm_os_performance_counters\nWHERE object_name = \'SQLServer:Database Replica\'\nAND counter_name IN (\'Log Send Queue\',\'Recovery Queue\')\nORDER BY cntr_value DESC;\n
Run Code Online (Sandbox Code Playgroud)\n从 T-SQL 中,您可以查询 DMV 以获取此信息。下面的查询来自我的标准工具箱,包括发送和重做队列大小和速率(在前几列中),以及有关副本状态和发送/重做状态的一些其他信息。请注意,在主副本上运行此命令将报告所有副本的状态信息,在辅助副本上运行此命令将仅报告该辅助副本的本地信息。
\n通过 T-SQL 进行监控的优点是,您可以拥有单个/中央收集点来立即检查所有副本的状态。
\n-- \xe2\x96\xb6 Run this on **PRIMARY**\nSET NOCOUNT ON;\nSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;\n\nSELECT \n --AG info\n AGName = ag.name, \n ReplicaServer = ar.replica_server_name, \n DbName = adc.database_name, \n -- Queue Size & rates\n SendQueueSize = drs.log_send_queue_size,\n RedoQueueSize = drs.redo_queue_size, \n SendRateKb = drs.log_send_rate, \n RedoRateKb = drs.redo_rate, \n -- State Info\n IsLocal = drs.is_local, \n IsPrimary = drs.is_primary_replica, \n SynchronizationState = drs.synchronization_state_desc, \n SynchronizationHealthState = drs.synchronization_health_desc, \n -- Last ____ Time\n LastSentTime = drs.last_sent_time, \n LastRedoTime = drs.last_redone_time, \n LastReceivedTime = drs.last_received_time, \n LastHardenedTime = drs.last_hardened_time, \n LastCommitTime = drs.last_commit_time, \n -- LSN info\n RecoveryLSN = drs.recovery_lsn, \n TruncationLSN = drs.truncation_lsn, \n LastSentLSN = drs.last_sent_lsn, \n LastReceivedLSN = drs.last_received_lsn, \n LastHardenedLSN = drs.last_hardened_lsn, \n LastRedoneLSN = drs.last_redone_lsn, \n EndOfLogLSN = drs.end_of_log_lsn, \n LastCommitLSN = drs.last_commit_lsn,\n --Oh yeah, filestream, too\n FileStreamSendRate = drs.filestream_send_rate\nFROM sys.dm_hadr_database_replica_states AS drs\nJOIN sys.availability_databases_cluster AS adc \n ON drs.group_id = adc.group_id AND drs.group_database_id = adc.group_database_id\nJOIN sys.availability_groups AS ag\n ON ag.group_id = drs.group_id\nJOIN sys.availability_replicas AS ar \n ON drs.group_id = ar.group_id AND drs.replica_id = ar.replica_id\nORDER BY \n -- ag.name, ar.replica_server_name, adc.database_name;\n drs.log_send_queue_size + drs.redo_queue_size DESC;\n
Run Code Online (Sandbox Code Playgroud)\n如果您没有能够直接监视 Perfmon 计数器或 DMV 的监控产品,您可以使用 SQL Server 代理警报系统侵入警报。
\n在对象资源管理器 --> SQL Server 代理 --> 警报中,选择创建新警报\n
在“新警报”窗口的“常规”选项卡上,选择要监视的 Perfmon 计数器以及警报阈值。\n
在“响应”选项卡上,您可以选择发送电子邮件以通知 SQL 代理操作员或执行 SQL 代理作业。您可以让 SQL 代理作业响应运行 T-SQL 或 PowerShell,从而执行几乎任何操作(例如记录到 Windows 事件日志)。\n
归档时间: |
|
查看次数: |
5954 次 |
最近记录: |