SQLSERVER復制的要點
在論壇里經常有人問:SQLSERVER復制出問題了!!SQLSERVER復制不運行了!!SQLSERVER復制遇到阻塞了!!
然后最后來一句:“怎麼辦???????????????”
大家知道:我們使用SQLSERVER復制功能主要用來讀寫分離,當然還有其他的場景會用到SQLSERVER復制,不過大部分還是用在"讀寫分離"
根據《SQLSERVER數據庫大型應用解決方案總結》里總結的SQLSERVER復制的優缺點
文章地址:http://www.cnblogs.com/dinglang/archive/2012/01/10/2317748.html
優缺點 :
(1) 數據的實時性差:數據不是實時同步到自讀服務器上的,當數據寫入主服務器后,要在下次同步后才能查詢到。
(2) 數據量大時同步效率差:單表數據量過大時插入和更新因索引,磁盤IO等問題,性能會變的很差。
(3) 同時連接多個(至少兩個)數據庫:至少要連接到兩個數據數據庫,實際的讀寫操作是在程序代碼中完成的,容易引起混亂。
(4) 讀具有高性能高可靠性和可伸縮:只讀服務器,因為沒有寫操作,會大大減輕磁盤IO等性能問題,大大提高效率。
只讀服務器可以采用負載均衡,主數據庫發布到多個只讀服務器上實現讀操作的可伸縮性。
------------------------------------------------------華麗的分割線-----------------------------------------------------------
其實我們可以只同步某些表,不需要將整個數據庫里的所有表都同步到訂閱服務器上,而且SQLSERVER還支持只同步一張表里的某些列
有些人就是將整個數據庫里的表都同步,不管哪些表是經常訪問的,哪些表數據量比較大,哪些表不適合加主鍵或者索引
因為同步的一個條件是,表里必須要有主鍵,如果你需要同步所有表,那不是所有表都要加上主鍵??大家知道加上主鍵
相當于給表加了聚集索引,那么肯定影響數據修改的性能,所以大家只需要把需要同步/發布的表發布出來就可以了
沒必要把整個庫都發布出來,還有一些存儲過程、函數、視圖也是一樣,只需要同步經常訪問的或者必須要用到的就可以了
--------------------------------------------------------華麗的分割線---------------------------------------------------------
復制的前提條件:
(1)為了提高執行效率,可以限制訂閱服務器獲得的所有數據,或僅發布訂閱者真正需要的數據或訂閱者有權得到的數據
(2)在實現快照復制之前,為快照復制留出充足的磁盤空間
(3)在實現事務復制之前,分配足夠的日志空間,為分發數據庫留有足夠的磁盤空間
(4)為每一個表創建主鍵
(5)實現合并復制前移去timestamp列,由于訂閱服務器的數據也會傳遞到發布服務器,
應確保數據的完整性在各個訂閱服務器上都能得到保證,維護表之間的關聯參照
(6)在所有IDENTITY屬性字段上加上NOT FOR REPLICATION設置,以保證SQLSERVER在復制代理程序所添加的行上保留起始標識值,
但是繼續在其他用戶所添加的行上增加標識值。當用戶將某個新行添加到表時,標志值以通常的方式增加。當復制代理程序將該新行復制到
訂閱服務器時,再將該行插入到訂閱服務器表中時不更改標識值
----------------------------------------------------------華麗的分割線-----------------------------------------------------
下面附上我寫的一篇文章,關于復制的介紹和復制的注意事項,如果提高復制性能,定制復制標準,定義復制等
1、只發布必要的表或字段
2、定制性能標準
3、提高常規復制的性能
里面有幾個注意點,希望讀者可以詳細認真地讀一下,o(∩_∩)o
希望文章能幫到大家
如有不對的地方,歡迎大家拍磚!!
文章列表