在 AG 中記錄發送隊列大小和重做隊列大小
我試圖找出監控這兩個事件的方法
- 記錄發送隊列大小 - 我可以在 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 計數器,其定義為:主數據庫的日誌文件中尚未發送到輔助副本的日誌記錄量(以千字節為單位)。此值從主副本發送到輔助副本。隊列大小不包括發送到輔助節點的 FILESTREAM 文件。
Redo Queue的perfmon計數器其實就是
Recovery Queue
計數器,定義為:次要副本的日誌文件中尚未重做的日誌記錄數量。
您還可以通過查詢
sys.dm_os_performance_counters
DMV 使用 T-SQL 訪問 Perfmon 計數器。SELECT * FROM sys.dm_os_performance_counters WHERE object_name = 'SQLServer:Database Replica' AND counter_name IN ('Log Send Queue','Recovery Queue') ORDER BY cntr_value DESC;
T-SQL / DMV
從 T-SQL,您可以查詢 DMV 以獲取此資訊。以下查詢來自我的標準工具箱,包括發送和重做隊列大小和速率(在前幾列中),以及有關副本狀態和發送/重做狀態的一些其他資訊。請注意,在主副本上執行它會報告所有副本的狀態資訊,在輔助副本上執行它只會報告該輔助副本的本地資訊。
通過 T-SQL 進行監控的優點是您可以擁有一個單一/中央收集點來一次檢查所有副本的狀態。
-- ▶ Run this on **PRIMARY** SET NOCOUNT ON; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT --AG info AGName = ag.name, ReplicaServer = ar.replica_server_name, DbName = adc.database_name, -- Queue Size & rates SendQueueSize = drs.log_send_queue_size, RedoQueueSize = drs.redo_queue_size, SendRateKb = drs.log_send_rate, RedoRateKb = drs.redo_rate, -- State Info IsLocal = drs.is_local, IsPrimary = drs.is_primary_replica, SynchronizationState = drs.synchronization_state_desc, SynchronizationHealthState = drs.synchronization_health_desc, -- Last ____ Time LastSentTime = drs.last_sent_time, LastRedoTime = drs.last_redone_time, LastReceivedTime = drs.last_received_time, LastHardenedTime = drs.last_hardened_time, LastCommitTime = drs.last_commit_time, -- LSN info RecoveryLSN = drs.recovery_lsn, TruncationLSN = drs.truncation_lsn, LastSentLSN = drs.last_sent_lsn, LastReceivedLSN = drs.last_received_lsn, LastHardenedLSN = drs.last_hardened_lsn, LastRedoneLSN = drs.last_redone_lsn, EndOfLogLSN = drs.end_of_log_lsn, LastCommitLSN = drs.last_commit_lsn, --Oh yeah, filestream, too FileStreamSendRate = drs.filestream_send_rate FROM sys.dm_hadr_database_replica_states AS drs JOIN sys.availability_databases_cluster AS adc ON drs.group_id = adc.group_id AND drs.group_database_id = adc.group_database_id JOIN sys.availability_groups AS ag ON ag.group_id = drs.group_id JOIN sys.availability_replicas AS ar ON drs.group_id = ar.group_id AND drs.replica_id = ar.replica_id ORDER BY -- ag.name, ar.replica_server_name, adc.database_name; drs.log_send_queue_size + drs.redo_queue_size DESC;
警報
如果您沒有能夠直接觀察 Perfmon 計數器或 DMV 的監控產品,您可以使用 SQL Server 代理警報系統破解您的警報。
在對象資源管理器 –> SQL Server 代理 –> 警報中,選擇創建新警報
在 New Alert 視窗的 General 選項卡上,選擇要監視的 Perfmon 計數器以及警報門檻值。
在響應選項卡上,您可以選擇發送電子郵件以通知 SQL 代理操作員或執行 SQL 代理作業。您可以讓 SQL 代理作業響應執行 T-SQL 或 PowerShell,它幾乎可以執行任何操作(例如記錄到 Windows 事件日誌)。