Sql-Server

輔助副本 AlwaysOn AG 上的檢查點

  • July 16, 2019

設置

3 節點 Alwayson 群集 - 1 個同步和 1 個非同步輔助副本 - SQL Server 2012

情況

從非同步輔助副本讀取時,我們正在見證 PageIOLatches。這主要是由受到限制的 SAN 的吞吐量引起的。託管合作夥伴告訴我們,由於硬體限制,無法立即緩解此限制。

主副本和同步副本使用具有更高吞吐量的其他 SAN。雖然這種情況遠非理想,但這是一個很快就會解決的臨時情況,而不是我的問題的主題。

在調查 IO 等待時,我們注意到這些等待與檢查點頁面/秒數量的增加同時發生。

在此處輸入圖像描述

我的印像是檢查點不會出現在 AG 中的輔助副本上,正如在此處討論的那樣。

為了驗證這種行為,我設置了一個擴展事件來監視非同步副本上的檢查點事件。正如預期的那樣,沒有為該數據庫擷取任何檢查點,我也沒有從其他數據庫中找到與該模式匹配的任何檢查點。

接下來,我在主副本上創建了相同的擴展事件並啟動了一個 perfmon 來驗證我們是否可以看到相同的行為。在這裡,我們能夠擷取(自動)檢查點,它們大約發生。每分鐘一次。這些檢查點與我們的輔助(和主)副本上的檢查點頁面/秒增加同時發生。似乎在主要副本上生成檢查點並在輔助副本上重做。這意味著檢查點確實隱式發生在 AG 中的輔助副本上。

問題

我的假設是否正確,即在 AG 中,在主副本上生成檢查點並在所有輔助副本上重做?

因此,如果TARGET_RECOVERY_TIME未設置數據庫,recovery interval則主副本的設置將決定這些數據庫的所有輔助副本上的檢查點。

我的假設是否正確,即在 AG 中,在主副本上生成檢查點並在所有輔助副本上重做?

是的。

ACHECKPOINT是一個記錄操作,因為它是 SQL Server 恢復策略的一部分。當數據庫啟動時,它需要知道哪些修改過的頁面(在日誌文件中)尚未寫入數據文件——因此它可以在使用者查詢開始訪問數據庫之前重做這些更改。

我將從我的部落格文章中截取一個螢幕截圖,查看某些類型的日誌記錄活動:

日誌文件活動的螢幕截圖

如您所見,CHECKPOINT“開始”和“結束”被寫入事務日誌。

AG 工作方式的簡化視圖是它們從所有輔助副本的主副本重做日誌條目。

因此,由於CHECKPOINTs 被記錄,它們將在輔助副本上重放。


作為旁注,John Eisbrener有用地指出,如果輔助副本上有其他數據庫,則這些CHECKPOINT操作也將被此 Perfmon 跟踪拾取。

引用自:https://dba.stackexchange.com/questions/242962