增強一般複寫效能

適用於:SQL ServerAzure SQL 受控執行個體

透過使用本主題中所述的指導方針,您可以提升應用程式及網路上所有複寫類型的一般效能:

伺服器和網路

  • 設定配置給 Microsoft SQL Server 資料庫引擎的最小和最大記憶體數量。

    依預設,資料庫引擎會根據可用的系統資源來動態地變更其記憶體需求。 若要避免複寫活動執行期間記憶體可用量過低,請使用 min server memory 選項設定最小可用的記憶體。 若要避免作業系統將記憶體分頁至磁碟,您也可以使用 max server memory 選項來設定記憶體上限。 如需詳細資訊,請參閱伺服器記憶體伺服器組態選項。

  • 確保適當配置資料庫資料檔案和記錄檔。 針對複寫相關的所有資料庫交易記錄,使用個別的磁碟機。

    若想縮短寫入交易的時間,請將記錄檔儲存到與儲存資料庫不同的磁碟機上。 如果你需要容錯,可以用冗餘獨立磁碟陣列(RAID)-1 鏡像那顆硬碟。 對其他資料庫檔案請使用 RAID 0 或 0+1 (視您對容錯的需求而定)。 不論是否使用複寫,這都是良好做法。

  • 請考慮為用於複寫的伺服器新增記憶體,尤其是散發者。

  • 使用多處理器電腦。

    複寫代理程式可以利用伺服器上額外的處理器。 如果您執行作業時 CPU 的使用量較高,則可考慮安裝一個更快的 CPU 或安裝多個 CPU。

  • 使用高速網路。

    網路可能會成為顯著的效能瓶頸,特別是對於異動複寫而言。 可藉由使用 100 Mbps 或更快的高速網路而大幅提高將變更傳播到「訂閱者」的速度。 若網路太慢,請指定適當的網路設定與代理程式參數。

資料庫設計

  • 依照資料庫設計的最佳做法。

    一般,複寫資料庫與非複寫資料庫一樣享受效能最佳化帶來的助益。 不過,在「訂閱者」端使用索引時應格外小心:「訂閱者」端的主鍵資料行應建立索引,但建立其他索引可能會影響插入、更新和刪除效能。

  • 請考慮設定 READ_COMMITTED_SNAPSHOT 資料庫選項。

    若要協助減少使用者活動與複寫代理程式活動之間的競爭,請為發行集和訂閱資料庫設定此選項:

    ALTER DATABASE AdventureWorks  
    SET READ_COMMITTED_SNAPSHOT ON  
    

    欲了解更多資訊,請參見 ALTER DATABASE (Transact-SQL)。

  • 請謹慎處理觸發程序中的應用程式邏輯。

    訂閱者端使用者定義觸發程序中的商業邏輯,可能會減慢將變更複寫到訂閱者的速度:

    如果使用觸發程序來維護為合併式複寫發行之資料表中的參考完整性,請指定資料表的處理順序,以減少「合併代理程式」所需的重試次數。 如需詳細資訊,請參閱指定合併式複寫選項。

  • 限制使用大型物件 (LOB) 資料類型。

    LOB 比其他資料行資料類型需要更多儲存空間和處理。 除非您的應用程式有需要,否則請勿在文章中包含這些資料行。 資料類型 text、 ntext和 image 已被取代。 若您納入 LOB,建議您分別依序使用資料類型 varchar(max)、 nvarchar(max)、 varbinary(max)。

    對於異動複寫,請考慮使用稱為 Distribution Profile for OLEDB streaming 的散發代理程式設定檔。 如需相關資訊,請參閱 Replication Agent Profiles。

出版品設計

  • 只發行需要的資料。

    由於複寫很容易設定,因此往往會發佈超出實際需求的資料。 這樣會耗用散發資料庫與快照集內的額外資源,而且可能降低必要資料的處理能力。 請避免發行不必要的資料表,並降低更新發行的頻率。

  • 透過發佈設計和應用程式行為,將衝突降到最低。

    下列複寫類型可讓資料在「訂閱者」端變更:合併式複寫、具有可更新訂閱的異動複寫以及點對點異動複寫。 如果某一資料列在兩次同步處理之間於一個以上的節點被更新,則合併式複寫和具有可更新訂閱的異動複寫都可能發生資料衝突。 對等複寫不支援資料衝突;資料變更必須加以劃分。 無論使用哪種類型的複寫,我們建議您盡可能將變更分區,因為這樣可減少衝突偵測和解決所需的處理作業。

    變更可透過將各個資料子集發佈給各個訂閱者,或由應用程式將特定資料列的變更導向特定節點來加以分割:

    • 合併複寫支援透過單一發行使用參數化篩選來發佈資料子集。 如需詳細資訊,請參閱< 參數化資料列篩選器>。

    • 異動複寫支援使用具有多個發行集的靜態篩選來發行資料子集。 如需更多資訊,請參閱 篩選已發佈的資料。

  • 請謹慎使用列篩選器。

    如果交易式發行集包括一或多個使用資料列篩選的發行項,則「記錄讀取器代理程式」就必須在掃描交易記錄檔時,將篩選套用到受資料表更新影響的每個資料列。 因此,「記錄讀取代理程式」的吞吐量會受到影響。

    同樣地,合併式複寫必須評估變更或刪除的資料列,以判斷哪些「訂閱者」應接收這些資料列。 當使用資料列篩選來減少訂閱者所需的資料時,這項處理會更複雜,而且速度可能比發行資料表中的所有資料列時更慢。 請仔細權衡降低每個訂閱者端的儲存需求與達成最大吞吐量之間的取捨。 如需更多有關篩選的資訊,請參閱篩選已發佈資料。

訂閱考量因素

  • 當訂閱者數量眾多時,請使用拉式訂閱。

    「散發代理程式」與「合併代理程式」在發送訂閱的「散發者」端和提取訂閱的「訂閱者」端執行。 使用提取訂閱可透過將代理程式處理從「散發者」移動到「訂閱者」來提升效能。 如需詳細資訊,請參閱訂閱發行集。

  • 對於遠端且網路延遲較高的用戶,可以考慮使用拉取式訂閱。

    • 在推送訂閱中,散發代理程式 運行於 Distributor 上,並使用兩個緩衝區來讀寫資料。 當兩個緩衝區都滿時,代理必須等待網路來回確認後再發送更多,這會產生閒置時間,且隨著延遲增加而增加。

    • 拉取訂閱時,散發代理程式 會在訂閱者上執行,因此寫入會在本地執行,緩衝區也能快速釋放。 此過程允許從分散式資料庫持續讀取,當延遲高時吞吐量顯著提升。

  • 若訂閱者嚴重落後,將考慮訂閱重新初始化。

    當需要將大量變更傳送給訂閱者時,使用新的快照集重新初始化這些訂閱者,可能比使用複寫來傳送個別變更還要快。 如需詳細資訊,請參閱 重新初始化訂閱。

    對於異動複寫,「複寫監視器」在 [未散發的命令] 索引標籤上顯示以下資訊:在散發資料庫中尚未散發到「訂閱者」的交易數量;散發這些交易的估計時間。 如需詳細資訊,請參閱使用複寫監視器來檢視資訊及執行工作。

快照注意事項

  • 僅在必要時,並於離峰時間執行快照代理程式。

    「快照集代理程式」會將發行者上的已發行資料表中的資料大量複製到散發者上快照集資料夾中的檔案。 建立快照可能是相當耗用資源的作業,因此最好安排在離峰時段執行。

  • 除非必須使用字元模式快照,否則請使用原生模式快照。

    除了非 SQL Server 訂閱者和執行 SQL Server Compact 的訂閱者 (這兩者都需要字元模式快照集) 以外,會對所有訂閱者使用預設的原生模式快照集。

  • 為發行集使用單一快照資料夾。

    指定與快照集位置有關的發行集屬性時,您可以選擇讓快照集檔案產生於預設的快照集資料夾、替代的快照集資料夾、或是兩者皆採用。 同時在兩個位置上產生快照集檔案,則執行「快照集代理程式」時需要額外的磁碟空間和更多的處理。

  • 將快照資料夾放置在 Distributor 本機上的磁碟機,且該磁碟機不可用於儲存資料庫或記錄檔。

    「快照集代理程式」將資料循序寫入快照集資料夾。 將快照集資料夾放置在與任何資料庫或記錄檔不同的磁碟機上,會減少磁碟之間的競爭,有助於更快地完成快照集處理。

  • 在訂閱者端建立訂閱資料庫時,考慮指定簡單或大量記錄復原模式。 這可讓在訂閱者端套用快照時,對所執行的大量插入作業僅進行最少記錄。 在將快照集套用到訂閱資料庫之後,如有必要,可變更為另一個復原模式 (複寫的資料庫可使用任何復原模式)。 如需選取復原模式的相關詳細資訊,請參閱還原和復原概觀 (SQL Server)。

  • 對於低頻寬網路,請考慮在卸除式媒體上使用替代快照資料夾和壓縮快照。

    壓縮替代快照集資料夾中的快照集檔案,可減少磁碟儲存需求,使在抽取式媒體上傳送快照集檔案更容易。

    在某些情況下,壓縮的快照集可以改善網路之間傳送快照集檔案的效能。 不過,壓縮快照集時,需要由快照集代理程式在產生快照集檔案時進行額外處理,並在套用快照集檔案時由散發代理程式或合併代理程式進行額外處理。 如此可能會減緩快照集的產生且在某些情況下會增加套用快照集的時間。 此外,若發生網路失敗,則無法繼續壓縮快照集;因此並不適合不穩定的網路。 透過網路使用壓縮快照集時,仔細考量這些權衡問題。 如需詳細資訊,請參閱 修改快照集選項。

  • 考慮手動初始化訂閱。

    在某些情況下,例如涉及大型初始資料集的情況,使用快照以外的方法來初始化訂閱會較為合適。 如需詳細資訊,請參閱不使用快照初始化交易式訂閱。

代理程式參數

  • 減少複寫代理程式的詳細資訊層級,僅初始化測試、監視或偵錯時除外。

    減少散發代理程式和合併代理程式的 –HistoryVerboseLevel 參數和 –OutputVerboseLevel 參數。 如此可減少為追蹤代理程式歷程與輸出而插入的新資料列數量。 反之,具有相同狀態的先前記錄訊息會更新為新的記錄資訊。 提高測試、監視及偵錯的詳細資訊層級,以便您能盡可能多地獲得代理程式活動的相關資訊。

  • 使用快照集代理程式、合併代理程式以及散發代理程式的 –MaxBCPThreads 參數 (指定的執行緒數目不應超過電腦上的處理器數目)。 此參數指定在建立和套用快照集時可平行執行的大量複製作業數目。

  • 使用散發代理程式和合併代理程式的 –UseInprocLoader 參數 (如果發行的資料表包括 XML 資料行,則不可使用此參數)。 這個參數會讓代理程式在套用快照時使用該 BULK INSERT 指令。

可於代理程式設定檔和命令列中指定代理程式參數。 如需詳細資訊,請參閱