最近新建立了多個熱備鏡像,於是把如何管理和監控鏡像的認識總結一下。鏡像在建立好之后,就需要去管理其運行狀況。最重要是性能狀況評估和關鍵指標的自動監控警報。
1. 首先我們要獲取鏡像狀態的信息,才能做出判斷或者監控。要獲取這些信息,就要了解兩個重要的鏡像監控組件:數據庫鏡像狀態表和數據庫監控作業。
1.1.數據庫鏡像狀態表
這個表指的是msdb庫中的dbm_monitor_data表。它在首次調用數據庫鏡像監控器或者首次創建數據鏡像監控作業時被自動創建,主體和鏡像都有。每個鏡像會話庫每次更新時將會在其中插入一行。
更新頻率是可以配置的。表中數據默認保留最近7天的數據。
1.2. 數據庫監控作業
這個作業就是用來更新數據庫鏡像狀態表的。調用系統存儲過程sys.sp_dbmmonitoraddmonitoring創建。如果它不能正常運作,則數據庫鏡像狀態表的數據會是過時的。
用sys.sp_dbmmonitorchangemonitoring來修改作業調度(默認是1次/分鍾),用sys.sp_dbmmonitordropmonitoring刪除此作業。
通常用腳本直接創建的鏡像,不會自動生成數據庫監控作業,需要我們手動創建。用GUI界面直接配置的鏡像,通常會生成此作業。
2. 有了前面的定時刷新的狀態數據來源,我們就可以查閱和監控鏡像狀態。可以使用數據庫鏡像監視器或 dbmmonitor 系統存儲過程。
2.1 數據庫鏡像監視器
選中鏡像會話中的庫--右鍵--任務--執行數據庫鏡像監視器。如果出殃紅色的error icon,可能是實例連接沒被正確注冊;需要在Action->Manage Instance Server Connection對相關的鏡像會話的實例正確注冊。
界面上分割為四塊,分別看到一些狀態數據:狀態,主體日志,鏡像日志,全局狀態。各個指標具體含義參考數據庫鏡像監視器概述。
還有一個Tab叫做警報,這里將用於設定一些警閥值,本文后面會涉及。
2.2 dbmmonitor 系統存儲過程
通過執行系統存儲過程sp_dbmmonitorresults來查詢數據庫鏡像狀態表中狀態數據。要說明的是:此SP只能在msdb庫下運行,我的截圖塗黑部分是庫名,而且返回的列不只這么多。
當然系統存儲過程不只這一個,還有
創建定期更新服務器實例上每個鏡像數據庫的狀態信息的作業。
更改數據庫鏡像監視參數的值。
返回當前更新持續時間。
返回所監視數據庫的狀態行,使您能夠選擇此過程是否預先獲取最新的狀態。
停止並刪除服務器實例上所有數據庫的鏡像監視器作業。
3. 我們有狀態數據數據而且又知道如何查看,然后我們要根據某些關鍵狀態的指標來建立起警報,實現自動化監控。
3.1 可以在數據庫鏡像監視器的Warnings面板中設定相關觸發警報的閥值。
下面是MSDN關於閥值的說明:
如果為性能指標定義了警告閾值,則在更新狀態表時,將針對閾值計算最新的值。如果已達到閾值,則更新過程 sp_dbmmonitorupdate 會針對指標生成一個提示性事件(“性能閾值事件”),
然后將此事件寫入 Microsoft Windows 事件日志。下表列出性能閾值事件的 ID。
3.2 既然我們設定閥值警報會觸發特定的windows 事件,則可以據此設定數據庫警報來通知DBA.
在設定數據庫警報前,需要完成Database Mail和Operator的啟用和配置。可以參考MSDN上的How to相關資訊或者網絡上資料。
在SQL Server Agent—》Alerts里新建針對“未發送日志”的警報,如下圖。因為這個實例下,我有多個庫用於鏡像,所以我的數據庫庫名選擇的是“all database”。錯誤號如3.1中所述為32042。
在“響應”選項卡中,我只是選擇用Email通知“操作者”DBA。可以根據需要,勾選“執行作業”。寫一個能夠抓取更多信息的作業(如性能數據,執行情況等等)或者針對警報做出響應的處理腳本,然后在此執行。
在“選項”選項卡中,我只勾選了郵件中包含警報錯誤信息。也可以根據需要,添加額外的文本信息。
“兩次響應的間隔”我設定為一分鍾。
到這里算是郵件警報設定完成了。有時候我的郵箱會收到警報,最好還別收到。。。。
-----------2016-10 增加創建Alert的腳本----------
USE [msdb] GO EXEC msdb.dbo.sp_add_alert @name=N'DAL05SQL25 Alert:Mirror Unsent Log', @message_id=32042, @severity=0, @enabled=1, @delay_between_responses=0, @include_event_description_in=1, @notification_message=N'Unsent Log On SQL25: 1024KB', @category_name=N'[Uncategorized]', @job_id=N'00000000-0000-0000-0000-000000000000' GO EXEC msdb.dbo.sp_add_alert @name=N'DAL05SQL25 Alert:Mirror Oldest Unsent Transaction', @message_id=32040, @severity=0, @enabled=1, @delay_between_responses=0, @include_event_description_in=1, @notification_message=N'Oldest Unsent Transaction On SQL25:3 Mins', @category_name=N'[Uncategorized]', @job_id=N'00000000-0000-0000-0000-000000000000' GO EXEC msdb.dbo.sp_add_alert @name=N'DAL05SQL25 Alert:Mirror Unrestored Log', @message_id=32043, @severity=0, @enabled=1, @delay_between_responses=0, @include_event_description_in=1, @notification_message=N'Unrestored Log On SQL25:1024KB', @category_name=N'[Uncategorized]', @job_id=N'00000000-0000-0000-0000-000000000000' GO EXEC msdb.dbo.sp_add_alert @name=N'DAL05SQL25 Alert:Mirror Commit overhead ', @message_id=32044, @severity=0, @enabled=1, @delay_between_responses=0, @include_event_description_in=1, @notification_message=N'Commit Overhead On SQL25:1 Sec', @category_name=N'[Uncategorized]', @job_id=N'00000000-0000-0000-0000-000000000000' GO
總結:
警報還有很多種方式,WMI的警報,PerfCounters的警報等等。