Sql-Server-2012
可用性組的最早未發送事務警報
在 SQL Server 2008 中,當使用數據庫鏡像時,可以在最舊的未發送事務超過某個門檻值時設置警報。我們可以使用 Launch Database Mirroring Monitor 菜單命令檢查任何數據庫鏡像的狀態。
在 SQL Server 2012 中,我們現在有可用性組。在我看來,存在同樣的潛在問題,如果事務無法發送到輔助伺服器,那麼鏡像將被暫停,並且事務日誌可能會填滿我們所有的磁碟空間。但是,Database Mirroring Monitor 工具似乎無法將可用性組中的數據庫辨識為已鏡像。
如果最舊的未發送交易超過某個值,有沒有辦法設置警報?有沒有辦法設置那個特定的值?
非常有趣的問題..
根據我的理解,我將嘗試回答這個問題。
其他專家可以糾正我的錯誤。
AlwaysON 與數據庫鏡像不同,尤其是在將日誌塊發送到輔助副本時。
不同之處在於日誌塊如何發送到鏡像實例(用於鏡像)或副本(用於 AlwaysON)。
對於數據庫鏡像
- 它將日誌塊刷新到磁碟,並在本地完成後,將日誌塊發送到輔助伺服器。
對於始終開啟
- 它使用主節點上的輔助日誌掃描器將日誌塊並行刷新到輔助節點。
- 美妙之處在於,即使在主 I/O 完成之前,輔助節點可能已經硬化了日誌塊,這提高了性能並縮小了NOT IN SYNC視窗。
- 現在有趣的部分是監控上述場景,有進度消息。輔助節點向主節點發送消息,指示強化的 LSN 級別。主要使用該資訊來幫助確定同步狀態。
因此,沒有像鏡像這樣的警報機制實際上能夠知道最舊的未發送交易。**唯一知道的方法是使用 DMV。**以及可能的擴展事件。
作為旁注,您可以使用基於策略的管理來監控您的 AlwaysON 執行狀況。
下面是我用來監控我的 AlwaysON 環境的查詢:
/************************************************************************************************ Author : Kin Shah Purpose : Find "How far is secondary behind primary" Written for DBA.STACKEXCHANGE.COM ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Disclaimer : Any scripts found on internet you must irst - understand what it is doing - then test it if it suits your requirements I am not responsible for any data loss or any blue screen that you might get. ^^^ *** USE THIS AS PER YOUR OWN RISK **** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *************************************************************************************************/ SELECT AGS.NAME AS AGGroupName ,AR.replica_server_name AS InstanceName ,HARS.role_desc ,Db_name(DRS.database_id) AS DBName ,DRS.database_id ,is_ag_replica_local = CASE WHEN DRS.is_local = 1 THEN N'LOCAL' ELSE 'REMOTE' END ,AR.availability_mode_desc AS SyncMode ,DRS.synchronization_state_desc AS SyncState ,DRS.last_hardened_lsn ,DRS.end_of_log_lsn ,DRS.last_redone_lsn ,DRS.last_hardened_time ,DRS.last_redone_time ,DRS.log_send_queue_size ,DRS.redo_queue_size AS 'Redo_Queue_Size(KB)' /* if the last_hardened_lsn from the primary server == last_hardened_lsn from secondary server then there is NO LATENCY */ ,DATEDIFF(SECOND, DRS.last_redone_time, DRS.last_hardened_time) FROM sys.dm_hadr_database_replica_states DRS LEFT JOIN sys.availability_replicas AR ON DRS.replica_id = AR.replica_id LEFT JOIN sys.availability_groups AGS ON AR.group_id = AGS.group_id LEFT JOIN sys.dm_hadr_availability_replica_states HARS ON AR.group_id = HARS.group_id AND AR.replica_id = HARS.replica_id ORDER BY Db_name(DRS.database_id) ,is_ag_replica_local
參考 :