读写分离提高 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 示意图

读写分离提高 SQL Server 并发性的更多相关文章
- 读写分离提高 SQL Server 并发性能
以下内容均非原创,仅作学习.分享!! 在 一些大型的网站或者应用中,单台的SQL Server 服务器可能难以支撑非常大的访问压力.很多人在这时候,第一个想到的就是一个解决性能问题的利器——负载均衡. ...
- 使用内存虚拟硬盘 提高ArcGIS server并发性能的一种方法
1 问题提出 1.1 概述 提高ArcGIS server并发性能的方法很多,本文讨论在用户硬件足够强大的情况下(主要是内存足够大),使用内存模拟硬盘来提高数据的读取效率,以达到提高ArcGIS se ...
- 提高Django高并发性的部署方案(Python)
方案: nginx + uWSGI 提高 Django的并发性 1. uWSGI : uWSGI是一个web服务器,实现了WSGI协议.uwsgi协议.h ...
- 重建索引提高SQL Server性能
大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记录才能找到索要的数据.索引可以分为簇索引和非簇索引,簇索引通过重排表中的数 ...
- DBCC DBREINDEX重建索引提高SQL Server性能
大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记录才能找到索要的数据.索引可以分为簇索引和非簇索引,簇索引通过重排表中的数 ...
- EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录
前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...
- SQL Server数据库读写分离提高并发性
在一些大型的网站或者应用中,单台的SQL Server 服务器可能难以支撑非常大的访问压力.很多人在这时候,第一个想到的就是一个解决性能问题的利器——负载均衡.遗憾的是,SQL Server 的所有版 ...
- SQL Server实现读写分离提高系统并发
转自:http://www.canway.net/Lists/CanwayOriginalArticels/DispForm.aspx?ID=666 在一些大型的网站或者应用中,单台的SQL Serv ...
- MySQL Proxy 实现 MySQL 读写分离提高并发负载
还在学习,学完了在写笔记 (这个先安装lua:https://www.cnblogs.com/fps2tao/p/9163959.html ) 工作拓扑: MySQL Proxy有一项强大功能是实现“ ...
随机推荐
- Delphi编写的Android程序获取Root权限实现(2015.4.15更新,支持Android 4.4)
借助谷歌,并经过本大侠施展坑.蒙.拐.骗.偷五大绝技,终于成功实现在Delphi下获取Root权限并将其扩展为一个完整功能更加完整的TQAndroidShell记录,在华为荣耀2(Android 4. ...
- de4dot命令 v2.0.3.3405
de4dot v2.0.3.3405 Copyright (C) 2011-2013 [email]de4dot@gmail.com[/email] Latest version and source ...
- Flex中如何通过showAllDataTips属性使鼠标移动到图表时显示所有的数据Tips的例子
原文 http://blog.minidx.com/2008/11/10/1616.html 接下来的例子演示了Flex中如何通过showAllDataTips属性,使鼠标移动到图表时显示所有的数据T ...
- mysqldump --master-data
--master-data[=#] This causes the binary log position and filename to be appended to the output. If ...
- 普林斯顿大学算法课 Algorithm Part I Week 3 比较器 Comparators
比较器接口(Comparator interface):用可选顺序(alternate order)进行排序 public interface Comparator<key> int co ...
- Tkinter类之窗口部件类
Tkinter类之窗口部件类 Tkinter支持15个核心的窗口部件,这个15个核心窗口部件类列表如下:窗口部件及说明:Button:一个简单的按钮,用来执行一个命令或别的操作.Canvas:组织图形 ...
- g++编译cpp文件
gdb调试c程序打不到断点的原因可能是编译c文件的时候没有加-g选项,-g选项是编译加debug信息的,不加是打不到断点的 g++编译cpp文件 g++ -g -c *.cpp 编译 g+ ...
- find the safest road
find the safest road Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Othe ...
- Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)
我们依据上一次介绍的触屏事件和事件队列等知识来实现触屏的单击,双击,三连击事件. 下图为我们实现的效果图: 单击精灵跳跃一个高度, 双击精灵跳跃的高度比单击的高 三连击精灵跳跃的跟高 好了,開始动手吧 ...
- Web前端性能优化——高频触发事件的防抖
JS 提供了行为层的支持,为用户提供了交互的操作性. 然而,部分事件却常常有意无意的被频繁触发.比方浏览器窗体的 resize 事件.某个元素的 mouseover 事件,假设处理触发事件的回调函数过 ...