使用預計算分割槽優化引數化
預計算分割槽是一種效能優化方法,可用於已篩選的合併釋出。 預計算分割槽也是在已篩選的釋出上使用邏輯記錄的一項要求。 有關邏輯記錄的詳細資訊,請參閱通過邏輯記錄對相關行的更改進行分組。
訂閱伺服器與釋出伺服器同步時,釋出伺服器必須計算訂閱伺服器的篩選器,以確定哪些行屬於該訂閱伺服器的分割槽或資料集。 我們將為接收已篩選資料集的每個訂閱伺服器確定釋出伺服器上的更改的分割槽成員身份這一過程稱為“分割槽計算”。 如果沒有預計算分割槽,那麼,自上次為特定訂閱伺服器執行合併代理之後,對釋出伺服器上已篩選列每進行一次更改都必須執行分割槽計算,而且對與該釋出伺服器同步的每個訂閱伺服器都要重複這一過程。
但是,如果釋出伺服器和訂閱伺服器在 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL優化案例-分割槽索引之無字首索引(六)SQL優化索引
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- Sklearn GridSearchCV 引數優化優化
- Linux 分割槽和格式化Linux
- win10系統下如何分整數分割槽_windows10怎樣計算硬碟分割槽整數Win10Windows硬碟
- linux系統swappiness引數在記憶體與交換分割槽間最佳化LinuxAPP記憶體
- 對一條基於分割槽的簡單SQL的優化SQL優化
- MySQL百分位數計算(優化版)MySql優化
- 重建Windows引導分割槽Windows
- Spark RDD的預設分割槽數:(spark 2.1.0)Spark
- linux核心引數優化重要項Linux優化
- swoole優化核心引數調整優化
- Greenplum計算能力估算-暨多大表需要分割槽,單個分割槽多大適宜
- 雲端計算:交換分割槽管理 Swap
- Spark運算元:統計RDD分割槽中的元素及數量Spark
- linux fdisk 分割槽、格式化、掛載!Linux
- MySQL百分位數計算(再優化版)MySql優化
- CANN訓練:模型推理時資料預處理方法及歸一化引數計算模型
- 5.pytest 引數化使用
- SOLIDWORKS引數化設計方法Solid
- PostgreSQL11preview-索引優化。filter智慧消除、分割槽索引智慧合併SQLView索引優化Filter
- linux磁碟分割槽格式化-fdisk命令工具Linux
- 大盤分割槽格式化及掛載
- Linux 格式化擴充套件分割槽(Extended)Linux套件
- 簡單聊聊Golang中defer預計算引數Golang
- spark RDD textFile運算元 分割槽數量詳解Spark
- mysql分割槽表佔用大量容量處理(最佳化)及歸檔分割槽表MySql
- VNPY 批量優化引數,並輸出到excel優化Excel
- 介紹tomcat Connector 引數優化說明Tomcat優化
- MySQL調優之分割槽表MySql
- SOLIDWORKS引數化設計工具講座預約 免費參與Solid
- Laravel 數量統計優化Laravel優化
- MySQL 配置InnoDB配置非持久優化器統計資訊引數MySql優化
- 簡單探討Golang中defer預計算引數Golang
- spark-運算元-分割槽運算元Spark
- 利用粒子群優化演算法(PSO)來優化vnpy的量化策略引數優化演算法
- lr引數化
- RocketMQ 4.2.0 broker JVM優化引數深入刨析MQJVM優化
- 實用TCP協議(2):TCP 引數優化TCP協議優化