Sql-Server-2012

可用性組中的記錄可以無序複製嗎?

  • September 8, 2016

數據倉庫 ETL 程序正在查詢可用性組中的只讀輔助節點。ETL 過程使用一分鐘的日期時間範圍標準和已送出的讀取隔離級別以增量方式查詢單個表。在執行時,滿足條件的 5 條記錄在主數據庫上送出,但另外 3 條時間戳比前 5 條稍早(但在條件範圍內)仍在打開的事務中。可用性組的性質是否要求按 LSN 順序應用所有事務(延遲所有 8 條記錄的可見性,直到全部送出)或延遲的 3 條記錄是否獲得較晚的 LSN 並在送出後立即應用,可能在ETL 流程是否已調整其日期標準?

在執行時,滿足條件的 5 條記錄在主數據庫上送出,但另外 3 條時間戳比前 5 條稍早(但在條件範圍內)仍在打開的事務中。可用性組的性質是否要求所有事務都以 LSN 順序應用…

REDO 要求 LSN 按順序應用,這在 AG 內部或外部都不會改變。當REDO執行緒工作時,它必須按順序做日誌記錄。

…(延遲所有 8 條記錄的可見性,直到全部送出)或者延遲的 3 條記錄是否獲得稍後的 LSN 並在送出後立即應用,可能在 ETL 過程調整其日期標準之後?

沒有延遲。在可用性組中,我們不發送單個交易。我們也不會等待他們送出。

傳輸單元是一個 LOG BLOCK,它是按順序排列的 LOG RECORDS 的集合。這些日誌塊保存來自數據庫中許多不同事務的日誌記錄,而不僅僅是您正在進行的 ETL 事務。此外,日誌塊在關閉並刷新到磁碟時發送,這有幾個不同的原因發生,不一定需要來自送出。

這意味著輔助節點接收有關數據庫中正在進行的所有更改的事務的資訊。在這種情況下,輔助節點擁有部分(如果不是全部)關於仍然打開的早期交易的資訊。

現在,這涉及到另一點。可讀輔助伺服器沒有使用read committed隔離級別,實際上它被映射到幕後的快照隔離。這就是您看不到與前 3 筆交易有關的輔助資訊的原因。您不能添加nolock到查詢中,它不會讓您看到數據。

由於使用了快照隔離,我們將使用版本儲存。這意味著如果您在輔助節點上啟動了一個事務以讀取資訊,並且當主節點上的打開事務被送出時它仍在執行,那麼在事務結束之前它不會“看到”它們。這是快照隔離的一部分。

總結一下:

  1. 發送日誌塊,而不是日誌記錄,而不僅僅是送出的事務
  2. 是的,關於這些交易的二級資訊已經在
  3. 可讀輔助伺服器已將已送出讀(預設)隔離級別自動映射到快照隔離級別
  4. 如果您需要輔助節點上的數據,請避免大型長時間執行的事務

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