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