使用預計算分割槽優化引數化
預計算分割槽是一種效能優化方法,可用於已篩選的合併釋出。 預計算分割槽也是在已篩選的釋出上使用邏輯記錄的一項要求。 有關邏輯記錄的詳細資訊,請參閱通過邏輯記錄對相關行的更改進行分組。
訂閱伺服器與釋出伺服器同步時,釋出伺服器必須計算訂閱伺服器的篩選器,以確定哪些行屬於該訂閱伺服器的分割槽或資料集。 我們將為接收已篩選資料集的每個訂閱伺服器確定釋出伺服器上的更改的分割槽成員身份這一過程稱為“分割槽計算”。 如果沒有預計算分割槽,那麼,自上次為特定訂閱伺服器執行合併代理之後,對釋出伺服器上已篩選列每進行一次更改都必須執行分割槽計算,而且對與該釋出伺服器同步的每個訂閱伺服器都要重複這一過程。
但是,如果釋出伺服器和訂閱伺服器在 Microsoft SQL Server 2005 或更高版本上執行並且您使用了預計算分割槽,那麼釋出伺服器上所有更改的分割槽成員身份在進行更改時即已預計算並持久化。因此,當訂閱伺服器與釋出伺服器同步時,它可以立即開始下載與其分割槽相關的更改,而不必執行分割槽計算過程。 當釋出中有大量更改、訂閱伺服器或專案時,這樣可以顯著提高效能。
除了使用預計算分割槽外,預先生成快照和/或允許訂閱伺服器在第一次同步時還請求生成快照和應用快照。 使用以上選項中的一個或兩個可以為使用引數化篩選器的釋出提供快照。 如果未指定任一選項,將使用一系列的 SELECT 和 INSERT 語句初始化訂閱,而不是使用 bcp 實用工具;此過程的速度將更慢。 有關詳細資訊,請參閱帶有引數化篩選器的合併釋出的快照。
使用預計算分割槽
預設情況下,在遵循上述指導原則的所有新發布和現有釋出上均啟用了預計算分割槽。 可通過 SQL Server Management Studio 或通過程式設計方式更改此設定。 有關詳細資訊,請參閱以下主題:
SQL Server Management Studio: 如何優化引數化行篩選器 (SQL Server Management Studio)
複製 Transact-SQL 程式設計:如何優化引數化行篩選器(複製 Transact-SQL 程式設計)
使用預計算分割槽的要求
如果滿足下列要求,預設情況下建立新的合併複製時將啟用預計算分割槽,而現有的釋出將自動升級以使用此功能。 如果釋出不滿足下列要求,可對其先進行更改,然後即可啟用預計算分割槽。 如果有些專案滿足這些要求而有些不滿足,請考慮建立兩個釋出,為其中一個釋出啟用預計算分割槽。
篩選器子句的要求
引數化行篩選器中使用的任何函式(如 HOST_NAME() 和 SUSER_SNAME()),都應直接出現在引數化篩選器子句中,而不能巢狀在檢視或動態函式內。 有關這些函式的詳細資訊,請參閱 HOST_NAME (Transact-SQL)、SUSER_SNAME (Transact-SQL) 和引數化行篩選器。
建立分割槽後,不應更改為每個訂閱伺服器返回的值。 例如,如果在篩選器中使用 HOST_NAME()(且不覆蓋 HOST_NAME() 值),請不要更改訂閱伺服器上的計算機名稱。
聯接篩選器不應包含動態函式(如 HOST_NAME() 和 SUSER_SNAME(),此類函式會根據正在同步的訂閱伺服器計算出不同的值)。 只有引數化行篩選器可以包含動態函式。
篩選器子句中不能使用不確定性函式。 有關不確定性函式的詳細資訊,請參閱確定性函式和不確定性函式。
在聯接篩選器子句或引數化篩選器子句中引用的檢視不應包含動態函式。
釋出中不應有迴圈聯接篩選器關係。
資料庫排序規則
如果使用了預計算分割槽,進行比較時始終使用資料庫的排序規則,而不使用表或列的排序規則。 請考慮下列方案:
具有區分大小寫排序規則的資料庫包含一個具有不區分大小寫排序規則的表。
該表包含一個 ComputerName 列,它與引數化篩選器中的訂閱伺服器的主機名相比較。
該表在此列中包含一個值為“MYCOMPUTER”的行和一個值為“mycomputer”的行。
如果訂閱伺服器與主機名“mycomputer”同步,則訂閱伺服器只能收到一行,因為比較是區分大小寫的(資料庫的排序規則)。 如果未使用預計算分割槽,訂閱伺服器會收到這兩行,因為該表具有不區分大小寫的排序規則。
預計算分割槽的效能
在將更改從訂閱伺服器上載到釋出伺服器時,儘管使用預計算分割槽會產生少量的效能開銷,但大部分合並處理時間用於計算分割槽以及將更改從釋出伺服器下載到訂閱伺服器上,所以淨的效能收益仍然很顯著。 根據併發同步的訂閱伺服器的數目以及將行從一個分割槽移動到另一分割槽的每個同步的更新數目的不同,效能收益也會有所不同。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-520820/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JOB、分割槽表、效能優化方面優化
- SQL優化思路&結果集重用優化、分割槽索引優化測試SQL優化索引
- linux系統swappiness引數在記憶體與交換分割槽間優化LinuxAPP記憶體優化
- 通過分割槽進行優化(轉)優化
- ActiveMQ 引數優化MQ優化
- 大分割槽表的手工並行優化並行優化
- Myisam & InnoDB 優化引數優化
- MySQL引數配置優化MySql優化
- Mysql優化系列(1)--Innodb重要引數優化MySql優化
- MySQL 效能優化之快取引數優化MySql優化快取
- 【SQL優化器】初始化引數SQL優化
- [zt] 收集基於成本的優化統計資料 - 分割槽表優化
- COUNT(*)計算行數有哪些優化手段優化
- SQL優化案例-分割槽索引之無字首索引(六)SQL優化索引
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- SQL Server SQL效能優化之引數化SQLServer優化
- Sklearn GridSearchCV 引數優化優化
- MySQL百分位數計算(優化版)MySql優化
- 雲端計算:交換分割槽管理 Swap
- swoole優化核心引數調整優化
- Nginx實戰(六) 引數優化Nginx優化
- Linux 核心引數優化(for oracle)Linux優化Oracle
- Elasticsearch效能優化引數註解Elasticsearch優化
- spark job執行引數優化Spark優化
- OpenCV中的SVM引數優化OpenCV優化
- Mysql 效能優化--基礎引數MySql優化
- 【SQL 效能優化】引數設定SQL優化
- Oracle可變引數的優化Oracle優化
- weblogic幾個優化引數Web優化
- win10系統下如何分整數分割槽_windows10怎樣計算硬碟分割槽整數Win10Windows硬碟
- Android效能優化篇之計算效能優化Android優化
- MySQL 資料庫效能優化之快取引數優化MySql資料庫優化快取
- 分割槽表中的maxvalue引數設定
- MySQL百分位數計算(再優化版)MySql優化
- linux系統swappiness引數在記憶體與交換分割槽間最佳化LinuxAPP記憶體
- 對一條基於分割槽的簡單SQL的優化SQL優化
- Linux 分割槽和格式化Linux
- Spark RDD的預設分割槽數:(spark 2.1.0)Spark