SQLServer 主从技术包含:复制、日志传送、镜像、AlwaysOn。其中AlwaysOn是2012版本才增加的机制。
几种技术对比:
读写分离方案 | 实时同步 | 副本数据是否直接可读 | 副本数 | 最小粒度 | 副本建立索引 | 环境 | 缺点 |
镜像 | 是 | 否(需要开启快照,只读) | 1 | 库 | 否 | 域/非域(使用证书) | 在高安全模式下对主库性能有一定影响 |
日志传送 | 否 | 是(只读) | N | 库 | 否 | UNC方式可访问 | 副本库在做resotre时会断开已连接用户连接/可能影响常规日志备份 |
复制(发布订阅) | 是 | 是(读写,但写可能会产生数据不一致) | N | 表(查询) | 是 | 域/非域 | 在主库上有大量DML操作时,对分发服务器会有一定影响,且订阅数据库可能有数据同步延迟 |
always on | 是 | 是(只读) | 4(sql 2012) 8(sql 2014) | 库 | 否 | 域 | 非域环境无法使用 |
读写分离
一般情况下,系统的所有数据表都在同一个数据库中,简单方便的提升性能的方式就是做读写分离,将非实时性数据同步到另外一个数据库中,在此数据库只进行读操作,从而提升系统的并发查询能力。
1.通过将“读”操作和“写”操作分离到不同的数据库服务器上,降低对主服务器的CPU、内存、存储、网络资源的争用;
2.主服务器的增删改进行时,不影响查询服务器的查询,降低阻塞的发生,提高了并发性;
3.在应用程序提交了报表请求、不合理的查询请求时,不会导致长时间的锁表;
4.建立容灾副本甚至实现异地容灾,在发生灾难时,可以减少数据的损失;
绝大部分的企业内部应用,可能不需要上图那么庞大的架构,一台主数据库服务器和一台查询服务器通常能满足读写分离的要求。而且应用程序调整起来非常方便:
1.在应用程序的配置文件中设置两个数据库连接字符串,一个指向主服务器,一个指向查询服务器;
2.增删改或者实时性查询使用指向主服务器的连接字符串;
3.允许非实时的查询及报表请求使用指向查询服务器的连接字符串。