MS Sql Server 中主从库的配置和使用介绍

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求;这时候我们可以考虑使用主从库。

主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的查询操作;从库负责查询较旧数据,做一些对实效性要求较小的分析,报表生成的工作。这样做将数据库的压力分担到两台服务器上从而保证整个系统响应的及时性。

SQL Server提供了复制机制来帮我们实现主从库的机制。我们看下如何在sql server 2005中实践:

实践前需要新创建一个Test的数据库,这个库中建一个测试表。

1.       打开sql server企业管理器,在对象资源管理器里面选择复制à本地发布,右键选择新建发布

2.       打开新建发布向导,点下一步,选择发布数据的数据库

3.       我们选择Test数据库,并点击下一步,选择发布类型

这里我们选择的是事务性发布,事务性发布保证数据在做更新之后尽可能快的分发到订阅服务器上。有关其他几种发布类型的使用场景请参考msdn

4.       点击下一步,选择要发布的对象,这里我们只对表进行发布

5.       点击下一步进入筛选数据设置,这里我们要复制表的所有数据所以不做设置

6.       点击下一步,指定何时运行快照,我们选择初始话数据,并选择默认的运行快照频率

7.       继续下一步,设置快照代理的运行账户,我们选择sql server agent账户

8.       点击下一步选择创建发布,再次点击下一步设置发布的名称

9.       点击完成,完成发布的设置,并创建发布,现在在本地发布出新添加了我们创建的发布

现在成功创建了发布,我们还需要创建订阅:在本地订阅文件夹上右击新建订阅,通过向导可以很容易的创建订阅,创建订阅时可以选择以发布者推送或者订阅者主动的方式创建。具体步骤如下:

1.       通过右键菜单打开新建订阅,点击下一步,选择我们刚刚创建的发布作为订阅源

2.       选择是以推送还是以主动请求的方式同步数据,我们选择主动订阅

3.       设置执行分发代理的账户

4.       设置代理请求同步的频率

5.       设定是否立即做数据的初始化操作

6.       完成创建订阅

创建完成之后,我们可以通过在主库表中插入n条数据,然后在从库中查询的方式验证复制是否成功。

在Sql server2005中的复制创建起来很简单,我们需要根据业务需要设定复制的类型和同步的频率。

下面我们具体看下主从库的几个使用场景和一个简单的小例子。

主从库之间是一种发布订阅的关系,发布者和订阅者之间并非实时同步的,通常会有几分钟的延时,更有甚者会有几个小时的延时。所以我们需要通过合理的使用来避开有延时这个问题。

我们希望主库尽可能的少参与查询,来提高写的及时性;同时要让从库在不影响读出数据的准确及时的前提下尽可能的分担主库的压力。

主从两个库需要在配置文件中配置两个连接字符串,CONN_Master和CONN_Slave。我们需要设定一些规则决定当前的查询应该从主库查还是需要从从库查。这个规则没有定式,只能根据业务需要来确定。下面我举几个例子来说明:

1.       以豆瓣读书书的详细页为假定场景,你可以点击 这里看下页面的结构(我不是豆瓣的技术,在这里只是拿这个页面举例)

我们来分析呈现这个页面需要的数据和这些数据的实效性要求

1)  书的详细信息    时效性要求:要求及时

2)  豆瓣成员的常用标签 实效性:不需要很及时

3)  喜欢读这本书的人也喜欢读的书 属于分析数据,不需要很及时

4)  最新书评 要求及时

5)  读这本书的几个用户 及时性不高

6)  喜欢这本书的人常去的小组 属于分析数据不需要很及时

从上面的分析可以看出只有1),4)两项数据需要从主库读,而2),3),5),6)为非及时数据从从库读取即可。当然我们可以对这些实效性不高的数据做缓存处理。

2.       以论坛帖子列表页面为假定场景,玩论坛的人都喜欢顶贴,把自己的帖子顶到第一页让更多的人关注,而对于50页之后的帖子则反读的人很少;我们可以根据这个 业务逻辑特征来决定在用户访问前50页帖子列表数据时从主库读,而当用户访问超过50页之后的数据时则从从库进行查询。

3.       以订单为例,通常超过三个月的订单就不会再有变化了,假定我们把订单号设计为日期格式时,根据订单号去查询订单时就可以根据订单号来决定该访问主库还是从库。

举了几个适用的场景,我们以第三个场景为例,写一段简单的示意代码看下

//orderNo 的格式为 20100528120105000001 即yyyyMMddHHmmss + 序号

public OrderInfo GetOrder(string orderNo) {

    string connString = ConnStringGetter.GetForOrder(orderNo);

    using (SqlConnection conn = new SqlConnection(connString))

    {

        ...

    }

}

public class ConnStringGetter

{

    public static string GetForOrder(string orderNo) {

        int year = int.Parse(orderNo.Substring(0,4));

        int money = int.Parse(orderNo.Substring(4,2));

        int date = int.Parse(orderNo.Substring(6,2));

        DateTime orderTime = new DateTime(year, money, date);

        TimeSpan ts = DateTime.Now - orderTime;

//根据订单的时间决定使用主库还是从库

        if (ts.TotalDays > 30) return ConfigurationManager.ConnectionStrings["CONN_Slave"].ConnectionString;

        return ConfigurationManager.ConnectionStrings["CONN_Master"].ConnectionString;

    }

}

正确的使用主从库,可以很好的提升系统的性能。使用主库还是从库的选择权决定在业务逻辑的手里。


本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/p/3461136.html,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
15天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
25天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0
|
15天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
88 6
|
2天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
6 0
|
4天前
|
SQL XML 数据库
sql导入数据库命令
在SQL Server中,数据库导入可通过多种方式实现:1) 使用SSMS的“导入数据”向导从各种源(如Excel、CSV)导入;2) BULK INSERT语句适用于导入文本文件;3) bcp命令行工具进行批量数据交换;4) OPENROWSET函数直接从外部数据源(如Excel)插入数据。在操作前,请记得备份数据库,并可能需对数据进行预处理以符合SQL Server要求。注意不同方法可能依版本和配置而异。
|
10天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
24 0
|
15天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
19天前
|
SQL 数据安全/隐私保护
SQL Server 2016安装教程
SQL Server 2016安装教程
21 1
|
19天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
17 1
|
1月前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数