使用sql server 2019的其他服务器上的只读副本

yzuktlbb  于 2021-08-13  发布在  Java
关注(0)|答案(4)|浏览(643)

通过sql server或供应商工具(包括aws)有哪些选项允许我使用一个具有多个数据库的现有sql server,并在同一服务器上创建另一个非常大(多TB)的数据库的只读副本?
我们的要求是,数据库需要驻留在同一台服务器上,而我们希望驻留在sql server上。
链接服务器在执行复杂联接时会引起性能问题,而分布式始终打开似乎要求复制源数据库上的所有数据库。
例子:


**Server A**

DB1
DB2
DB3
DB4
DB5 *(replicated read only version)*

**Server B**

DB5 *(source, 1tb+)*

我错过了什么选择?

xfyts7mz

xfyts7mz1#

我们公司也有类似的情况。
事务性复制可以解决这个问题,但是让它启动并运行是困难的部分。获取启动复制所需的快照会很难锁定源数据库。
我们找到的解决方案是备份源数据库(服务器b上的db5),然后在目标服务器(服务器a上的db5)上还原它。然后(通过一些公共但不太为人所知的命令),将复制附加到新恢复的db5副本。这样,备份后的所有更改以及所有正在进行的更改都将复制到只读副本。
这样,就可以在服务器b上保持db5正常运行,并在服务器a上拥有一个只读复制副本。
如果你需要实际的命令,我可以去把它们挖出来。

iyzzxitl

iyzzxitl2#

我可以建议退一步,问问自己为什么需要另一个只读数据库吗?这将使用服务器中的一些ram,而您永远不会有足够的ram。。。
如果启用读提交快照隔离级别锁定,则读卡器不会阻止写入程序。
您还可以查看“thegameiswar”建议的数据库快照。这也将节省内存。
这两个建议都使用额外的tempdb,因此您需要确保以最快的存储速度获得它。

hi3rlvi2

hi3rlvi23#

我们的要求是,数据库需要驻留在同一台服务器上,而我们希望驻留在sql server上。
让我们看看sql server默认提供了哪些选项。
1.事务性复制:您可以设置事务性复制,根据定义它是只读的。
默认情况下,事务发布的订阅服务器应视为只读,因为更改不会传播回发布服务器。但是,事务复制确实提供了允许在订阅服务器上进行更新的选项。
2.您可以创建数据库的快照,并可以查询此快照以进行报告。但如果i/o是您的瓶颈,请注意限制和低于性能的问题。
由于每次更新页时对快照执行写时拷贝操作,导致源数据库上的i/o增加,因此性能降低。
据我所知,这些是唯一有帮助的选择。
您还可以使用自定义解决方案,该解决方案如下所示。
先还原数据库的副本
根据您的计划,您可以根据更改更新目标数据库表,但根据您的更改,这可能非常复杂
链接服务器在执行复杂连接时会引起性能问题。您的目标数据库是源的只读副本,不确定为什么需要通过加入sql server来读取它们。

6tqwzwtp

6tqwzwtp4#

我不会使用事务复制,因为数据库不会是只读的
似乎是在服务器b(主服务器)和服务器a之间创建alwayson可用性组的经典用例。在这种情况下,我认为您需要使用一个没有集群的可用性组-请参阅-https://www.sqlshack.com/read-scale-availability-group-in-a-clusterless-availability-group/ 介绍一下。
服务器a将拥有db5的只读副本
当然,这是基于我对您的场景的理解,从您上面给出的几句话来看,详细的优缺点您可以看下面的文章,尽管注意它有点旧了,而且很多东西已经更新了,特别是对于可用性组。当然,如果您只需要来自db5的数据的一个子集,事务性复制看起来就更合适了—移动10%的1tb有很多好处。
https://www.sqlskills.com/blogs/jonathan/availability-group-readable-secondaries-just-say-no/

相关问题