輔助副本 AlwaysOn AG 上的檢查點
設置
3 節點 Alwayson 群集 - 1 個同步和 1 個非同步輔助副本 - SQL Server 2012
情況
從非同步輔助副本讀取時,我們正在見證 PageIOLatches。這主要是由受到限制的 SAN 的吞吐量引起的。託管合作夥伴告訴我們,由於硬體限制,無法立即緩解此限制。
主副本和同步副本使用具有更高吞吐量的其他 SAN。雖然這種情況遠非理想,但這是一個很快就會解決的臨時情況,而不是我的問題的主題。
在調查 IO 等待時,我們注意到這些等待與檢查點頁面/秒數量的增加同時發生。
我的印像是檢查點不會出現在 AG 中的輔助副本上,正如在此處討論的那樣。
為了驗證這種行為,我設置了一個擴展事件來監視非同步副本上的檢查點事件。正如預期的那樣,沒有為該數據庫擷取任何檢查點,我也沒有從其他數據庫中找到與該模式匹配的任何檢查點。
接下來,我在主副本上創建了相同的擴展事件並啟動了一個 perfmon 來驗證我們是否可以看到相同的行為。在這裡,我們能夠擷取(自動)檢查點,它們大約發生。每分鐘一次。這些檢查點與我們的輔助(和主)副本上的檢查點頁面/秒增加同時發生。似乎在主要副本上生成檢查點並在輔助副本上重做。這意味著檢查點確實隱式發生在 AG 中的輔助副本上。
問題
我的假設是否正確,即在 AG 中,在主副本上生成檢查點並在所有輔助副本上重做?
因此,如果
TARGET_RECOVERY_TIME
未設置數據庫,recovery interval
則主副本的設置將決定這些數據庫的所有輔助副本上的檢查點。
我的假設是否正確,即在 AG 中,在主副本上生成檢查點並在所有輔助副本上重做?
是的。
A
CHECKPOINT
是一個記錄操作,因為它是 SQL Server 恢復策略的一部分。當數據庫啟動時,它需要知道哪些修改過的頁面(在日誌文件中)尚未寫入數據文件——因此它可以在使用者查詢開始訪問數據庫之前重做這些更改。我將從我的部落格文章中截取一個螢幕截圖,查看某些類型的日誌記錄活動:
如您所見,
CHECKPOINT
“開始”和“結束”被寫入事務日誌。AG 工作方式的簡化視圖是它們從所有輔助副本的主副本重做日誌條目。
因此,由於
CHECKPOINT
s 被記錄,它們將在輔助副本上重放。作為旁注,John Eisbrener有用地指出,如果輔助副本上有其他數據庫,則這些
CHECKPOINT
操作也將被此 Perfmon 跟踪拾取。