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,如需转载请自行联系原作者
相关文章
|
24天前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
161 11
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
261 0
|
4月前
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
278 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
|
8月前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
10月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
407 4
|
11月前
|
SQL 关系型数据库 Shell
SQL整库导出语录及其实用技巧与方法
在数据库管理和备份恢复过程中,整库导出是一项至关重要的任务
|
11月前
|
SQL Oracle 关系型数据库
SQL整库导出语录:全面解析与高效执行策略
在数据库管理和维护过程中,整库导出是一项常见的需求,无论是为了备份、迁移还是数据分析,掌握如何高效、准确地导出整个数据库至关重要
|
11月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
1234 1
|
11月前
|
SQL 存储 数据库
使用SQL_语句创建,使用,删除第一个数据库
使用SQL_语句创建,使用,删除第一个数据库
63 1
|
12月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")