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管理里面去安装一下就行

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

相关推荐
飞翔的佩奇2 分钟前
Java项目: 基于SpringBoot+mybatis+maven课程答疑系统(含源码+数据库+毕业论文)
java·数据库·spring boot·毕业设计·maven·mybatis·课程答疑
OceanSky630 分钟前
Mybatis中sql数组为空判断
数据库·sql·mybatis·数组判空
Data 31740 分钟前
经典sql题(七)查找直播间最大在线人数
大数据·数据库·数据仓库·sql
小怪兽ysl1 小时前
【GBase 8c V5_3.0.0 分布式数据库常用几个SQL】
数据库·postgresql
dwjf3211 小时前
图数据库 neo4j 安装
数据库·neo4j
fengqing55781 小时前
mysql把某一个字段的值中的aa,替换成bb
数据库·mysql
Python大数据分析@2 小时前
一般在写SQL时需要注意哪些问题,可以提高查询的效率?
数据库
DYS_000012 小时前
阿里短信服务+Redis创建定时缓存
数据库·redis·缓存
GG编程3 小时前
Mysql 视图&存储过程&触发器
数据库·mysql
这孩子叫逆3 小时前
25. MyBatis中的RowBounds是什么?如何实现内存分页?
数据库·mybatis