SQL Server性能优化之读写分离

理论部分:

数据库读写分离:

主库:负责数据库操作增删改 20%

多个从库:负责数据库查询操作 80%

读写分离的四种模式

1.快照发布:发布服务器按照预定的时间间隔向订阅服务器发送已发布的数据快照

2.事务发布[比较主流常见]:在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器

3.对等发布:对等发布支持多主复制,发布服务器将事务流式传输到拓扑中所有对等方,所有对等节点可以读取和写入更改,且所有更改将传播到拓扑中所有节点

4.合作发布:在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据,更改会定期合并,sqlce只能订阅合并发布

实操部分:

我们演示的是最常使用的事务发布(最下面有发布遇到的问题,如果你有遇到问题,可以先看一下

1.首先我们去创建一个共享文件夹,并且设置为Everyone可读写权限

2.确认Everyone被创建,且有读写权限

3.开启文件共享

4.接下来我们要去把SQL Server的代理服务打开,且设置为自动启动

5.完成以上动作后,我们就可以去配置分发了

我这里因为是本地演示,所以会既是分发服务器也是订阅服务器,所以这里我选择把自己的电脑作为分发服务器

这里的快照文件夹就是我们之前共享出来的文件地址

之后就一直下一步直到完成

成功之后我们在进行发布

6.本地发布

选择要发布的数据库

选择事务发布

选择发布的对象,需要注意的是发布的表是必须包含主键的,不然会不允许发布

可以筛选只有符合要求的数据才分发

如果需要指定时间进行分发的话,也可以配置下面的项,我这边不需要计划时间,所以选择立即初始化

这里我们选择sql server代理账户,这也是前面为什么要将sql server代理服务器保持自动运行的原因之一

名称自定义

发布成功即可

7.本地订阅

完成发布后,我们需要对发布的数据库进行订阅

选择我们刚刚的发布

选择由分发服务器推送,下面那个属于订阅服务器自己去拉取,我们选择推送

选择要跟分发数据库同步的数据库,已经创建了的就选择对应的数据库,我这里没有,我选择创建,创建好的数据库,会有你对应已经分发的表的表结构


接下来一直下一步直到完成

整个事务发布就结束了

踩坑经历

一.SQL Server保存的用户名和本机用户名不一致,这个坑是因为比如你安装sql数据库的时候,电脑用户名是A,但是你修改了电脑用户名为B,这时候可能就会发生这个问题

处理办法:

sql 复制代码
--先查一下当前用户名和计算机用户名是否一致
USE master
SELECT @@SERVERNAME
--删除旧的用户名
sp_dropserver 'DESKTOP-COJGBFG'
GO
--使用现在的用户名
sp_addserver 'DESKTOP-COJGBFG', LOCAL
GO

然后重启sql server的服务,需要注意,需要再去手动启动一下sql server代理服务

需要用到管理员命令符,否则可能提示没有权限

停止服务

启动服务,不含代理服务

接下来,你可以去看看是否正常了,大概率还是有问题,你可以选择

1.去修改登录用户名为当前电脑用户名,我试了修改不了

2.把电脑用户名修改为sql server保存的用户名,这个比较推荐,我试了是完全可以的

二.SQL Server 阻止了对组件"Agent XPs"的 过程"dbo.sp_set_sqlagent_properties

这个我忘记截图了

运行下面的代码即可

sql 复制代码
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE
GO

三.还有一个终极大坑,是sql server的版本,我在公司电脑上装的sql server2016版本,然后我进行上面的操作,解决所有报错,而且所有分布正常之后,数据库依旧不会同步,且共享文档里面没有产生快照,新建的数据库里面也没有发布的表结构,作业里面倒是一直在报错,但是它也不写为什么报错,这种就很鸡贼,然后我就在自己家的时候,使用了sql server2019版本,然后跟上面同样的操作,结果发布是没有任何问题的,两个数据库也成功实现了主从同步,猜测可能是版本问题,或者我数据库没有装好,

或者是文件权限问题,我觉得文件权限问题的可能性比较大,因为我觉得操作没问题就没有再去深度挖了,知道的小伙伴可以给个评论告知一下为什么

四:还要补充一个,如果有些小伙伴提示复制没有安装那就去sql server管理里面去安装一下就行

去添加复制就行,这个电脑我找不到安装路径了,就不演示了

相关推荐
leo_qiu_s1 分钟前
MERGE INTO语句
数据库
未来之窗软件服务7 分钟前
幽冥大陆(六十二) 多数据库交叉链接系统Go语言—东方仙盟筑基期
数据库·人工智能·oracle·golang·数据库集群·仙盟创梦ide·东方仙盟
U-52184F6914 分钟前
【CGAL实战】深入理解二维受约束 Delaunay 网格生成
数据库·算法
rannn_11124 分钟前
【SQL题解】力扣高频 SQL 50题|DAY4
数据库·后端·sql·leetcode·题解
q行25 分钟前
MySQL学习日志--DQL和它的七大字句
数据库·学习·mysql
张人玉35 分钟前
WPF HTTPS 通信示例使用说明
数据库·网络协议·http·c#·wpf
长春小霸王36 分钟前
labview sqlite增删改查
数据库·sqlite·labview
猿小喵39 分钟前
记录一次TDSQL-MySQL数据库主从延迟导致批量报错
数据库·mysql
科技块儿42 分钟前
【深度解析】在响应速度与数据安全上权衡在线IP查询API与本地IP离线库
数据库·网络协议·tcp/ip
别多香了43 分钟前
MySQL 部署安装与核心板块
数据库·mysql