第三篇——第二部分——第六文 监控SQL Server镜像
?
原文出處:http://blog.csdn.net/dba_huangzj/article/details/26846203
?
要優化,首先要監控,看看是否有性能問題,如果有,在哪里。才能開始真正的優化,所以本文以監控為入口,在上一篇已經略微提供了一些監控方面的信息
針對監控部分,本文將介紹以下內容:
?
1.1. 監控組件:
-
數據庫鏡像狀態表:
數據庫鏡像狀態存儲在MSDB中的dbm_monitor_data表中,每當數據庫鏡像狀態更改時,會通過sp_dbmmonitorupdate系統存儲過程創建這個表。比如在前面的域環境搭建鏡像中,可以看到下面的結果:
首先按照http://blog.csdn.net/dba_huangzj/article/details/27652857 中step 6的方式把兩臺機器加入注冊管理器中:
?
?
然后執行下面語句,可以看到有一些有價值的信息:
SELECT * FROM msdb.dbo.dbm_monitor_data ORDER BY local_time DESC其中比較有價值的是role、各種rate等。
-
數據庫鏡像狀態作業:
默認情況下,每分鐘運行一次,用于更新數據庫鏡像狀態表。運行間隔從1分鐘到120分鐘。這個作業實際上是調用sp_dbmmonitorupdate系統存儲過程。如果SQL Server Agent沒有啟用,那么這個作業也不能運行,這回導致前面說到的鏡像狀態表的數據變得過時。
這個作業在使用SSMS開始數據庫會話是自動創建,但是可以使用下面的系統存儲過程自定義作業,詳細內容可以查看聯機叢書:
- sp_dbmmonitoraddmonitoring:創建數據庫鏡像監視器作業,該作業可定期更新服務器實例上每個鏡像庫的鏡像狀態。注意,如果周期太低客戶端的響應時間可能會增加。比如把周期設為1分鐘:EXEC sp_dbmmonitoraddmonitoring 1
- sp_dbmmonitorchangemonitoring:更改數據庫鏡像監視參數的值,比如把更新周期更改為5分鐘:EXEC sp_dbmmonitorchangemonitoring 1,5;
- sp_dbmmonitordropmonitoring:停止并刪除服務器實例上所有數據庫鏡像監視器作業。
警告閾值:
如果你使用過鏡像監視器,會發現有一個警告選項,如圖:
?
留意右下角的說明,通過閾值,可以設置一系列的應對措施,下面簡要說明一下各個閾值:
- 未發送日志(unsent log):錯誤號32042,在主體服務器上設置,在高性能模式下非常重要,如果數據庫鏡像被暫停,即使是高安全模式下也可以用這個閾值。
- 未還原日志(unrestored log):錯誤號32043,在鏡像服務器上設置,過量的未還原日志意味著鏡像服務器的I/O子系統可能存在性能問題導致鏡像服務器無法跟上主體服務器的進度。
- 最早未發送事務(Oldest Unsent transaction):錯誤號32040,在主體服務器上設置,在高性能模式下尤其重要。
- 鏡像提交開銷(Mirro commit overhead):錯誤號32044,在鏡像服務器上配置,設置平均事務延時提交的毫秒數。這個值是主體服務器等待鏡像服務器確認已經redo的時間。這個時間在高安全模式下才有意義,因為高性能模式下主體服務器不需要等待鏡像服務器的確認信息。
閾值的使用在本文的【結合其他工具進行監控】和【關于鏡像的系統存儲過程】部分詳細介紹。
?
數據庫鏡像監視器:
打開數據庫鏡像監視器:
可以通過下面方式打開鏡像監視器:
注冊鏡像數據庫:
如果配置好鏡像,打開監視器之后就有一些相關信息,但是由于某些原因要配置鏡像庫的信息,可以使用注冊鏡像數據庫的功能,如圖:
然后進行注冊:
默認情況下,SQL Server會優先以Windows 身份驗證鏈接,點擊確定之后,就完成添加工作。
使用監視器進行性能檢查:
鏡像監視器是很好的監控鏡像性能的工具,使用這個工具,我們首先要看鏡像狀態,一般出現【已同步】或者短時間的【正在同步】是允許的,但是其他狀態下,就需要檢查是否有問題。監控窗口沒30秒刷新一次,如果你不是sysadmin角色而是dbm_monitor數據庫角色,需要等待鏡像監控作業自己更新。如果是sysadmin可以手動刷新。
通過點擊【歷史記錄】可以查看鏡像的傳輸的歷史信息。
?
?
我們可以嘗試看看變動,在主體服務器中寫一個死循環不停插入數據,然后看看監視器的結果,記得在查看之后停止死循環:
?
?
可以看到插入過程的確產生了日志傳輸。
?
關于鏡像的系統存儲過程:
前面略微提到過一些系統存儲過程,實際上,鏡像甚至其他高可用技術都提供了一系列系統存儲過程來實現幾乎甚至全部的GUI功能,作為DBA,會用系統存儲過程是非常必要的。下面介紹主要的一些系統存儲過程,更詳細的信息請自行查看聯機叢書:
?
- sp_dbmmonitorresults:通過返回數據庫鏡像狀態表的信息監控,必須在MSDB庫中執行。
?
在這個結果中,有些列要說明一下:
role
? 1: Principal? 2: Mirror
mirroring_state
? 0: Suspended? 1: Disconnected
? 2: Synchronizing
? 3: Pending Failover
? 4: Synchronized
witness_state
? 0: Unknown? 1: Connected
? 2: Disconnected
- sp_dbmmonitorchangealert:用于添加或修改特定的警告閾值。下面語句是創建一個閾值,當AdventureWorks2008R2庫中【最早未發送事務】超過20分鐘即發出警告。 USE msdb
GO
EXEC sp_dbmmonitorchangealert @database_name = N'AdventureWorks2008R2', @alert_id = 1, @threshold = 20, @enabled = 1
- sp_dbmmonitorhelpalert:返回特定庫中的閾值信息。如: USE msdb
GO
EXEC sp_dbmmonitorhelpalert @database_name = N'AdventureWorks2008R2', @alert_id = 1
- sp_dbmmonitordropalert:通過把閾值設為NULL來移除警告閾值,如: USE msdb
GO
EXEC sp_dbmmonitordropalert @database_name = N'AdventureWorks2008R2', @alert_id = 1
?
性能計數器
性能計數器在可見的將來(個人估計也有2020年之前)都是很重要的監控工具,并且依托強大的功能,可以進行性能分析、警告發送等等,別大量DBA用于日常管理。關于數據庫鏡像,計數器主要集中在:SQLServer:Database Mirroring 對象中,下面列出一些常用的計數器:
?
| 計數器名稱 | 解釋 |
Bytes Received/sec | 每秒收到的字節數。 |
| Bytes Sent/sec | 每秒發送的字節數。 |
| Log Bytes Received/sec | 每秒收到的日志字節數。 |
| Log Bytes Redone from Cache/sec | 在上一秒鐘內從鏡像日志緩存中獲得的重做日志字節數。 |
| Log Bytes Sent from Cache/sec | 在上一秒鐘內從鏡像日志緩存中獲得的發送日志字節數。 此計數器只在主體服務器上使用。 在鏡像服務器上此值始終是 0。 |
| Log Bytes Sent/sec | 每秒發送的日志字節數。 |
| Log Compressed Bytes Rcvd/sec | 在上一秒鐘內所接收日志的壓縮字節數。 |
| Log Compressed Bytes Sent/sec | 在上一秒鐘內所發送日志的壓縮字節數。 |
| Log Harden Time (ms) | 日志塊在上一秒鐘內等待強制寫入磁盤的時間(毫秒)。 |
| Log Remaining for Undo KB | 在故障轉移之后等待由新的鏡像服務器掃描的日志總字節數 (KB)。 此計數器僅可在撤消階段在鏡像服務器上使用。 撤銷階段完成后,計數器會重置為 0。 在主體服務器上此值始終是 0。 |
| Log Scanned for Undo KB | ? 自故障轉移開始已由新的鏡像服務器掃描的日志總字節數 (KB)。 |
| Log Send Flow Control Time (ms) | ? 日志流消息在上一秒鐘內等待發送流控制的時間(毫秒)。 |
| Log Send Queue KB | 尚未發送到鏡像服務器的日志總字節數 (KB)。 |
| Mirrored Write Transactions/sec | 在上一秒鐘內寫入鏡像數據庫并等待日志發送到鏡像數據庫以進行提交的事務數。 |
| Pages Sent/sec | 每秒發送的頁數。 |
| Receives/sec | 每秒收到的鏡像消息數。 |
| Redo Bytes/sec | 每秒在鏡像數據庫中前滾的日志字節數。 |
| Redo Queue KB | 當前仍應用于鏡像數據庫以進行前滾操作的鏡像日志的總字節數 (KB)。 此數據將從鏡像數據庫發送到主體數據庫。 |
| Send/Receive Ack Time | 在上一秒鐘內消息等待伙伴確認的時間(毫秒)。 |
| Sends/sec | 每秒發送的鏡像消息數。 |
| Transaction Delay | 等待未終止的提交確認的延遲時間。 |
?
也可以在SSMS中通過sys.dm_os_performance_counters 這個DMV查詢,如:
SELECT object_name, counter_name, instance_name, cntr_value FROM sys.dm_os_performance_counters WHERE object_name like '%mirror%'通過上面介紹的方法,對數據庫鏡像進行狀態、閾值等方面的監控,可以盡可能快地響應鏡像出現的問題。
總結
以上是生活随笔為你收集整理的第三篇——第二部分——第六文 监控SQL Server镜像的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java学习资料-SimpleFacto
- 下一篇: 《Linux内核分析》MOOC课程之从汇