誤區10.數據庫鏡像在故障發生後,馬上就能發現
錯誤
市面上大肆宣傳數據庫鏡像技術可以在故障發生後,立即檢測到錯誤並進行故障轉移。
但事實並不是這樣,檢測到故障發生的速度要取決於故障的類型。
檢測故障發生的最快的情況是,鏡像中的主體實例崩潰,從而鏡像服務器每秒一次的PING就無法返回值,從而知道主體服務器上不再有這個進程偵聽相應的TCP端口,這種情況下,鏡像服務器幾乎瞬間就能發現故障。
檢測到故障發生第二快的情況是主體服務器的操作系統崩潰。此時主體服務器不再響應鏡像服務器的PING,從而在鏡像服務器PING超時後發現錯誤。這個超時的阈值默認是10秒。但你也可以延長這個時間,這時,故障發生時間完全取決於PING的超時時間。
檢測到故障第三快的情況是是主體的日志磁盤不可用,此時SQL SERVER仍然會發起IO請求,但20秒IO等待無法寫入日志後發現日志磁盤不可用,最終40秒後宣告磁盤日志不可用,從而讓鏡像服務器上線。SQL SERVER是十分有耐心的,比如拿鎖來說,SQL SERVER對於鎖會無限等待,除非遇到死鎖才進行干預。
還有,損壞頁有可能完全不會引發故障,如果查詢報了823或是824錯誤,鏡像技術完全不會關注(SQL SERVER 2008之後這個問題得到修復: SQL Server 2008: Automatic Page Repair with Database Mirroring),如果數據回滾的過程中遇到823錯誤或是824錯誤,數據庫立刻會變為質疑狀態,也就是日志和數據不統一。這也會導致鏡像失敗。
你在聖經上學習到的那些教條也不是需要完全遵循的嘛:-)