文章出處

SQLSERVER復制優化之一《改變包大小》

自從搭了復制之后以為可以安枕無憂了,誰不知問題接踵而來

這次遇到的問題是丟包,不知道情況的讀者可以先看一下我之前寫的一篇《SQLSERVER監控復制并使用數據庫郵件功能發告警郵件

因為機房C和機房A不在一個局域網,網絡狀況不是太好

 

分發積壓的命令經常處于20W+條,復制并沒有報錯,每次傳遞的事務都是少于30個,正常來講SQLSERVER默認每次會傳輸100個事務

 

 

后來測試了一下網絡情況

 

從分發服務器ping一下訂閱服務器,ping  4096Byte大小的包,ping100次,因為分發默認傳輸的包大小是4096Byte,中間偶爾會超時

ping  訂閱服務器ip  -l 4096 -n 100

參數l是指包的大小, 參數n是指ping的次數,不加 -l 參數的話默認ping的包大小為32Byte

100個包有21個丟包

ping  訂閱服務器ip  -l 1024 -n 100

 

100個包有5個丟包

 

后來又繼續ping  512Byte256Byte128Byte大小的包,發現越小的包,丟包率就越低

從當前的網絡測試情況來看,需要調整一下分發代理的包大小,在分發代理配置文件里有一個參數  -PacketSize packet_size 

這個參數是設置分發代理發送到訂閱服務器的包大小的。

環境:發布和分發都在同一臺機器

 


設置

我們將分發代理的包大小設置1024Byte,那么怎么設置呢?

有兩種方法:

方法一修改分發agent 的作業

(1)打開分發代理作業

(2)轉到步驟

(3)雙擊“運行代理”,然后添加參數  -PacketSize 1024 ,點擊確定,退出作業屬性

(4)停止分發代理作業

(5)開始分發代理作業

 

這樣設置過后,分發代理就會以新的參數運行

 

但是代理配置文件是看不出來當前分發代理的運行參數的,還是顯示4096Byte

 

 

方法二新建一個代理配置文件,然后直接修改參數

(1)默認的代理配置文件是修改不了的

(2)新建一個代理配置文件

(3)選擇默認代理配置文件(新代理的默認值)

(4)輸入配置文件名:testprofile,把“僅顯示此配置文件的參數”的勾去掉,修改-PacketSize參數為1024,然后點擊確定

(5)勾選testprofile,然后點擊確定

 

(6)跟分發作業一樣,點擊“停止分發代理”,然后點擊“啟動分發代理”,使設置生效
 

驗證
那么我怎么知道究竟當前分發代理是否使用1024Byte大小的包來傳送呢?
這時候可以借助Microsoft Process Monitor 3.10這個工具
 
在發布端使用這個工具來監測一下


復制分發代理
復制分發代理是一個可執行文件,它能將快照(對于快照復制和事務復制)和保存在分發數據庫表中的事務(對于事務復制)移動到訂閱服務器上的目標表中。

若要啟動分發代理,請從命令提示符下執行 distrib.exe

 

打開任務管理器,查看分發代理進程的進程ID(PID),然后打開Microsoft Process Monitor 3.10,設置篩選條件
使用process monitor來監控分發代理傳輸的包大小
 

看一下length,最大的包也不會超過1024,說明設置生效了
 
 未分發命令降下來了
 





注意:
當你的服務器中當前多個數據庫是做了復制的,一個數據庫只有一個logread進程,多個數據庫就對應多個logread進程
分發代理也是,一個數據庫可以有多個分發代理,每個分發代理對應他們各自的進程(distrib進程)
所以一定要看清楚,你當前查看的distrib進程是不是你剛才設置的那個分發代理
 
總結
 
這篇文章只是闡述了復制的過程當中出現問題的其中一個原因,當然還有很多原因,例如 發布庫的日志文件VLF太多等等。。。
 
在分析的時候一定要多個角度分析,不能死磕一個方面,因為復制涉及到的方面比較多
 
有可能是發布端的問題,有可能是分發端的問題,也有可能是訂閱端的問題
 
 
感謝菠蘿兄的熱心幫助o(∩_∩)o 
 
如有不對的地方,歡迎大家拍磚o(∩_∩)o 

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()