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