詳解如何監視數據庫鏡像的狀態
具體而言,監視鏡像數據庫可以:
驗證鏡像是否正在運行。
基本狀況包括了解這兩個服務器實例是否正常運行,服務器是否已連接,以及是否將日志從主體服務器移至鏡像服務器。
確定鏡像數據庫是否與主體數據庫保持同步。
在高性能模式下,主體服務器可能會積壓大量仍需發送到鏡像服務器的未發送日志記錄。而且在任意運行模式下,鏡像服務器也有可能積壓大量已寫入日志文件但仍需在鏡像數據庫中進行還原的未還原日志記錄。
確定在高性能模式下,當主體服務器實例變得不可用時所丟失的數據量。
可以通過查看未發送的事務日志量(如果有)以及在主體服務器上提交丟失事務的時間間隔,來確定數據的丟失量。
將當前性能與過去性能進行比較。
出現問題時,數據庫管理員可以查看鏡像性能的歷史記錄來幫助了解當前狀態。通過查看歷史記錄,用戶可以檢測性能走向,識別性能問題的模式(例如,一天當中網絡變慢或進入日志中的命令數變得異常龐大的時間)。
解決鏡像伙伴之間數據流減小的問題。
設置關鍵績效指標的警告閾值。
如果新狀態行中的值超過閾值,則系統便會向 Windows 事件日志發送提示性事件。系統管理員可以隨后根據這些事件手動配置警報。有關詳細信息,請參閱將警告閾值和警報用于鏡像性能指標。
數據庫鏡像狀態監視工具
可以使用數據庫鏡像監視器或 sp_dbmmonitorresults 系統存儲過程來監視鏡像狀態。兩個系統管理員(即 sysadmin 固定服務器角色成員以及在 msdb 數據庫中,由系統管理員添加到 dbm_monitor 固定數據庫角色的用戶)均可使用這些工具監視本地服務器實例上任何鏡像數據庫中的數據庫鏡像。使用上述任意一種工具時,系統管理員還可以手動刷新鏡像狀態。
注意:
系統管理員還可以配置并查看關鍵績效指標的警告閾值。有關詳細信息,請參閱將警告閾值和警報用于鏡像性能指標。
數據庫鏡像監視器
數據庫鏡像監視器是一個圖形用戶界面工具,系統管理員可以使用此工具查看和更新狀態,配置多個關鍵績效指標的警告閾值。dbm_monitor 固定數據庫角色成員還可以使用數據庫鏡像監視器查看鏡像狀態表中的最新行,但是這些成員不能更新狀態表。
監視器顯示在“狀態”選項卡式頁面上選擇的數據庫的狀態(包括性能指標)。該頁的內容來自主體和鏡像服務器實例。通過與主體服務器實例和鏡像服務器實例的單獨連接收集狀態時,會異步填充該頁。監視器每隔 30 秒便會嘗試更新一次狀態表。只有當狀態表在 15 秒內沒有更新,并且用戶是 sysadmin 固定服務器角色的成員時,更新才能成功。有關“狀態”頁中報告的信息摘要,請參閱本主題后面的“數據庫鏡像監視器顯示的狀態”部分。
有關數據庫鏡像監視器界面的介紹,請參閱數據庫鏡像監視器概述。有關啟動數據庫鏡像監視器的信息,請參閱如何啟動數據庫鏡像監視器。
系統存儲過程
還可以通過運行 sp_dbmmonitorresults 系統存儲過程來檢索或更新當前的狀態。您還可以使用其他 dbmmonitor 存儲過程在服務器實例上設置監視、更改監視參數、查看當前更新持續時間以及刪除監視。
下表介紹了管理和使用數據庫鏡像監視的存儲過程,它們獨立于數據庫鏡像監視器工作。
過程 說明
sp_dbmmonitoraddmonitoring
創建定期更新服務器實例上每個鏡像數據庫的狀態信息的作業。
sp_dbmmonitorchangemonitoring
更改數據庫鏡像監視參數的值。
sp_dbmmonitorhelpmonitoring
返回當前更新持續時間。
sp_dbmmonitorresults
返回所監視數據庫的狀態行,使您能夠選擇此過程是否預先獲取最新的狀態。
sp_dbmmonitordropmonitoring
停止并刪除服務器實例上所有數據庫的鏡像監視器作業。
dbmmonitor 系統存儲過程可以用作數據庫鏡像監視器的附加補充。例如,即使使用 sp_dbmmonitoraddmonitoring 配置監視,也可以使用數據庫鏡像監視器查看狀態。
監視的工作原理
本部分介紹數據庫鏡像狀態表、數據庫鏡像監視器作業和監視器,并介紹用戶如何監視數據庫鏡像狀態以及如何刪除鏡像作業。
數據庫鏡像狀態表
數據庫鏡像狀態存儲在 msdb 數據庫內的一個內部、未記錄的數據庫鏡像狀態表中。在服務器實例上首次更新鏡像狀態時,便會自動創建此狀態表。
狀態表可以自動更新,也可以由系統管理員手動更新,但最低更新間隔為 15 秒。將最低更新間隔設置為 15 秒可以防止服務器實例因狀態請求而導致重載。
狀態表可以通過數據庫鏡像監視器和數據庫鏡像監視器作業(如果正在運行)進行自動更新。默認情況下,“數據庫鏡像監視器作業”將每分鐘更新一次狀態表(系統管理員可以將更新持續時間指定為 1 至 120 分鐘之間的一個值)。相反,數據庫鏡像監視器每隔 30 秒自動更新一次狀態表。對于這些更新,“數據庫鏡像監視器作業”和數據庫鏡像監視器將調用 sp_dbmmonitorupdate。
當 sp_dbmmonitorupdate 首次運行時,便會在 msdb 數據庫中創建“數據庫鏡像狀態”表和 dbm_monitor 固定數據庫角色。sp_dbmmonitorupdate 通常通過針對服務器實例上的每個鏡像數據庫將新行插入狀態表來更新鏡像狀態;有關詳細信息,請參閱本主題后面的“數據庫鏡像狀態表”。此過程還會計算新行中的性能指標并截斷保留時間長于當前保持期(默認為 7 天)的行。有關詳細信息,請參閱 sp_dbmmonitorupdate (Transact-SQL)。
注意:
除非數據庫鏡像監視器當前正在由 sysadmin 固定服務器角色成員使用,否則,只有在具有“數據庫鏡像監視器作業”并且 SQL Server 代理正在運行時,才能自動更新狀態表。
數據庫鏡像監視器作業
數據庫鏡像監視作業(“數據庫鏡像監視器作業”)獨立于數據庫鏡像監視器運行。僅當使用 SQL Server Management Studio 啟動鏡像會話時,才能自動創建“數據庫鏡像監視器作業”。如果始終使用 ALTER DATABASE database_name SET PARTNER 命令開始鏡像,則僅當系統管理員運行 sp_dbmmonitoraddmonitoring 存儲過程時,該作業才存在。
創建“數據庫鏡像監視器作業”之后,如果 SQL Server 代理正在運行,則默認情況下,每分鐘調用一次作業。然后,作業會調用 sp_dbmmonitorupdate 系統存儲過程。
默認情況下,SQL Server 代理每分鐘調用一次“數據庫鏡像監視器作業”,而作業隨即調用 sp_dbmmonitorupdate 以更新狀態表。系統管理員可以使用 sp_dbmmonitorchangemonitoring 系統存儲過程更改更新持續時間,他們還可以使用 sp_dbmmonitorchangemonitoring 系統存儲過程查看當前的更新持續時間。有關詳細信息,請參閱 sp_dbmmonitoraddmonitoring (Transact-SQL) 和 sp_dbmmonitorchangemonitoring (Transact-SQL)。
監視數據庫鏡像狀態(由系統管理員執行)
sysadmin 固定服務器角色成員可以查看和更新狀態表。
使用數據庫鏡像監視器
系統管理員可以使用數據庫鏡像監視器手動刷新“狀態”頁、導航樹或“歷史記錄”頁。如果狀態表在前 15 秒內沒有更新,則此操作還會更新狀態表。
若要查看給定服務器實例上鏡像狀態的歷史記錄,系統管理員還可以針對服務器實例單擊“歷史記錄”按鈕(位于“狀態”頁上)。將在“數據庫鏡像歷史記錄”對話框中顯示歷史記錄。在此對話框中,系統管理員可以查看服務器實例狀態表中的部分或全部行。
有關“狀態”頁指標的信息,請參閱本主題后面的“數據庫鏡像監視器顯示的性能指標”。
使用 sp_dbmmonitorresults
系統管理員可以使用 sp_dbmmonitorresults 系統存儲過程查看狀態表,如果此狀態表在前 15 秒內沒有更新,則還可以選擇對其進行更新。此過程將調用 sp_dbmmonitorupdate 過程并返回一個或多個歷史記錄行,具體取決于過程調用中的請求量。有關其結果集中狀態的信息,請參閱 sp_dbmmonitorresults (Transact-SQL)。
監視數據庫鏡像狀態(由 dbm_monitor 成員執行)
如上所述,當 sp_dbmmonitorupdate 首次運行時,便會在 msdb 數據庫中創建 dbm_monitor 固定數據庫角色。dbm_monitor 固定數據庫角色成員可以使用數據庫鏡像監視器或 sp_dbmmonitorresults 存儲過程查看現有的鏡像狀態。但是這些用戶不能更新狀態表。若要了解所顯示狀態的保留時間,用戶可以查看“狀態”頁上的“主體日志(<時間>)”和“鏡像日志(<時間>)”標簽上的時間。
dbm_monitor 固定數據庫角色成員使用“數據庫鏡像監視器作業”定期更新狀態表。如果作業不存在,或者 SQL Server 代理已停止,則狀態便會迅速變舊,并且不再反映鏡像會話的配置。例如,在一次故障轉移之后,伙伴可能分享相同的角色 - 主體或鏡像。或者,當前主體服務器可能顯示為鏡像,而當前的鏡像服務器顯示為主體。
刪除數據庫鏡像監視器作業
數據庫鏡像監視器作業(“數據庫鏡像監視器作業”)在刪除之前將一直保留。必須由系統管理員對監視作業進行管理。若要刪除“數據庫鏡像監視器作業”,請使用 sp_dbmmonitordropmonitoring。有關詳細信息,請參閱 sp_dbmmonitordropmonitoring (Transact-SQL)。
數據庫鏡像監視器顯示的狀態
數據庫鏡像監視器的“狀態”頁描述了鏡像伙伴以及鏡像會話的狀態。狀態信息包括性能指標(如事務日志的狀態)以及在會話沒有同步時,有助于當前對完成故障轉移所需時間和潛在數據丟失進行評估的其他信息。此外,“狀態”頁還概略顯示有關鏡像會話的狀態和信息。
注意:
有關數據庫鏡像監視器和“狀態”頁的說明,請參閱本主題前面的數據庫鏡像狀態監視工具。
下面將介紹上述各內容的概要。
伙伴
“狀態”頁顯示每個伙伴的下列信息:
服務器實例
在“狀態”行顯示狀態的服務器實例的名稱。
當前角色
服務器實例的當前角色。可能的狀態包括:
主體
鏡像
鏡像狀態
可能的狀態包括:
未知
正在同步
已同步
已掛起
已斷開連接
見證服務器連接
見證服務器的連接狀態。可能的狀態包括:
未知
已連接
已斷開連接。
主體服務器上的日志
“狀態”頁顯示主體服務器上的日志自所示時間起的下列狀態信息:
未發送日志
發送隊列中處于等待狀態的日志量 (KB)。
最早的未發送事務
發送隊列中最早的未發送事務的保留時間。事務保留時間指示在將事務發送到鏡像服務器實例之前將其保留的分鐘數。該值有助于測量數據丟失的可能性(以時間計)。
發送日志所需的時間(估計值)
根據當前發送速率,估計主體服務器實例將當前位于發送隊列的日志發送到鏡像服務器實例所需的分鐘數。發送日志所需的實際時間將受傳入事務速率的影響,而此速率的變化非常大。但是,可以使用“發送日志所需的時間(估計值)”值粗略估計手動故障轉移所需的時間。
當前發送速率
事務發送到鏡像服務器實例的速率(以 KB/秒計)。
新事務的當前速率
傳入事務進入主體日志的速率(以 KB/秒計)。若要確定鏡像是落后、保持同步、還是正在追趕,請將該值與“發送日志所需的時間(估計值)”值進行比較。
鏡像服務器上的日志
“狀態”頁顯示鏡像服務器上的日志自所示時間起的下列狀態信息:
未還原日志
重做隊列中處于等待狀態的日志量(以 KB 計)。
還原日志所需的時間(估計值)
將當前在重做隊列中的日志應用于鏡像數據庫所需的近似分鐘數。
當前還原速率
將事務還原到鏡像數據庫的速率(以 KB/秒計)。
鏡像會話
此外,“狀態”頁還顯示有關鏡像會話的下列信息:
鏡像提交開銷
每個事務的平均延遲時間(毫秒),僅與高安全性模式相關。此延遲是主體服務器實例等待鏡像服務器實例將事務日志記錄寫入重做隊列時,所發生的開銷量。
發送和還原所有當前日志的所需時間(估計值)
發送在主體服務器上已提交的所有未發送日志,以及還原重做隊列中當前存在的所有日志所需的估計時間。此估計時間值可能小于“發送日志所需的時間(估計值)”和“還原日志所需的時間(估計值)”這兩個字段值的總和,因為發送和還原操作可以并行執行。
見證服務器地址
見證服務器實例的網絡地址。有關此地址格式的信息,請參閱指定服務器網絡地址(數據庫鏡像)。
運行模式
數據庫鏡像會話的運行模式:
高性能(異步)
不帶自動故障轉移功能的高安全(同步)
帶自動故障轉移功能的高安全(同步)
【編輯推薦】