讀寫分離提高 SQL Server 並發性


轉自:http://www.canway.net/Lists/CanwayOriginalArticels/DispForm.aspx?ID=476

在一些大型的網站或者應用中,單台的SQL Server 服務器可能難以支撐非常大的訪問壓力。很多人在這時候,第一個想到的就是一個解決性能問題的利器——負載均衡。遺憾的是,SQL Server 的所有版本,包括2012年3月發布的SQL Server 2012,也未提供該功能。

擴展單台SQL Server 服務器,解決性能瓶頸,有兩種方法:

一、分布式數據庫。擴展和分布數據庫到多台服務器,由多台服務器分布存儲不同的數據,通過將數據和訪問壓力分布到多台服務器來解決性能瓶頸。以一個大型電子商務網站數據庫為例,可以按照業務模塊或功能模塊,將數據分布到多台服務器存儲。這種方法對程序改造難度較大,設計起來較為復雜,本文不作介紹。

二、讀寫分離。讀寫分離是中型規模應用的數據庫系統常見設計方案,通過將數據從主服務器同步到其他SQL Server 服務器,提供非實時的查詢功能,擴展性能並提高並發性。

數據庫的讀寫分離的好處如下:

1.通過將“讀”操作和“寫”操作分離到不同的數據庫服務器上,降低對主服務器的CPU、內存、存儲、網絡資源的爭用;

2.主服務器的增刪改進行時,不影響查詢服務器的查詢,降低阻塞的發生,提高了並發性;

3.在應用程序提交了報表請求、不合理的查詢請求時,不會導致長時間的鎖表;

4.建立容災副本甚至實現異地容災,在發生災難時,可以減少數據的損失;

絕大部分的企業內部應用,可能不需要上圖那么龐大的架構,一台主數據庫服務器和一台查詢服務器通常能滿足讀寫分離的要求。而且應用程序調整起來非常方便:

1.在應用程序的配置文件中設置兩個數據庫連接字符串,一個指向主服務器,一個指向查詢服務器;

2.增刪改或者實時性查詢使用指向主服務器的連接字符串;

3.允許非實時的查詢及報表請求使用指向查詢服務器的連接字符串。

那么主數據庫服務器的數據如何同步到查詢服務器上?同步的間隔又是怎樣的?主服務器發生故障的時候,查詢服務器能否接管用戶的請求呢?有什么技術要求呢?

SQL Server 提供了三種技術,可以用於讀寫分離的實現:日志傳送、事務復制和SQL 2012 中新增的功能Always On 技術。這三種技術的比較如下:

SQL Server 日志傳送示意圖

SQL Server 復制示意圖

SQL Server Always On 示意圖


免責聲明!

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



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