SQL Server提高事務復制效率優化(四)修改數據同步過程優化


1、原理
      我說的數據修改同步過程指的是在快照生成完畢,分發代理將快照應用於訂閱服務器完成訂閱服務器初始化后,發布服務器后續的更改同步到訂閱服務器過程,這也就是我們常常關注的延遲。此過程主要涉及兩個代理,分發代理和日志讀取代理,因為我們使用的是推送訂閱,所以這兩個代理都工作在分發數據庫上。首先,日志讀取代理讀取發布事務日志,並表示任何INSERT、UPDATE以及DELETE語句,然后將這些事務定時將批量復制到分發服務器的分發數據庫中。分發庫中存儲着事務和命令,每個事務以多條命令組成。分發代理順序分發分法庫中的事務,以邏輯命令(SQL語句)方式在訂閱庫上執行。流程圖見下:
     優化這兩個代理主要考慮從兩方面考慮,一方面是縮短每個批次的間隔,一方面需要在小間隔的情況下增加代理處理的性能,這兩個方面是相關聯的,所以要一起修改才能起作用。
2.復制延遲測試
  • 查看日志讀取代理配置文件的默認參數:
  • 查看分發代理配置文件的默認參數:
SELECT * FROM msdb.dbo .MSagent_profiles WHERE agent_type =3
SELECT * FROM MSagent_parameters WHERE profile_id= 4

  • 通過跟蹤令牌方式測試復制延遲時間

3.代理參數優化測試
  • 新建日志讀取代理參數配置文件,命名為“日志讀取代理參數優化參數 ”
  • 日志讀取代理參數優化
-- 查詢該代理的profile_id   
SELECT * FROM msdb.dbo .MSagent_profiles WHERE agent_type =2
  
EXEC sp_change_agent_parameter @profile_id = 20,
    @parameter_name = 'ReadBatchSize', @parameter_value = 2000    
   
EXEC sp_change_agent_parameter @profile_id = 20,
    @parameter_name = 'PollingInterval', @parameter_value = 1
新建分發參數配置文件,命名為“分發代理參數優化參數”
EXEC sp_change_agent_parameter @profile_id = 18,
    @parameter_name = 'PollingInterval', @parameter_value = 1
   
EXEC sp_change_agent_parameter @profile_id = 18,
    @parameter_name = 'CommitBatchSize', @parameter_value = 1000
   
EXEC sp_change_agent_parameter @profile_id = 18,
    @parameter_name = 'CommitBatchThreshold', @parameter_value = 10000 
  • 優化參數后測試結果(記得更改代理配置文件后要重啟代理生效),效果立竿見影,但是不是峰值情況。我們在生產上應用的效果很好,高峰值時也能保證很低的延遲。對於CommitBatchSize和CommitBatchThreshold的參數設置評估方法,CommitBatchThreshold取DML操作數/s上限作為設置,CommitBatch就是CommitBatchThreshold/10~CommitBatchThreshold/5。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM