簡體   English   中英

使用 SQL Server 2019 在不同服務器上的只讀副本

[英]Read only replica on a different server using SQL Server 2019

通過 SQL 服務器或包括 AWS 在內的供應商工具存在哪些選項,可以讓我使用現有的 SQL 服務器和多個數據庫,並在同一台服務器上創建不同的超大型(多 TB)數據庫的只讀副本?

我們的要求是數據庫需要位於同一台服務器上,並且我們希望留在 SQL 服務器上。

鏈接服務器在執行復雜連接時會引起性能問題,並且始終在線似乎需要復制源數據庫上的所有數據庫。

例子:

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

**Server B**
DB5 *(source, 1tb+)*

我錯過了什么選項?

我們的要求是數據庫需要位於同一台服務器上,並且我們希望留在 SQL 服務器上。

讓我們看看 SQL 服務器默認提供哪些選項。

1. 事務復制:您可以設置事務復制,根據定義它是只讀的。

默認情況下,事務發布的訂閱者應被視為只讀,因為更改不會傳播回發布者。 但是,事務復制確實提供了允許在訂閱服務器上進行更新的選項。

2.您可以創建數據庫的快照,並且可以查詢此快照以進行報告。 但如果 I/O 是您的瓶頸,請注意限制和性能問題。

由於每次更新頁面時對快照的寫時復制操作導致源數據庫上的 I/O 增加,性能會降低。

據我了解,這些是唯一可以提供幫助的選擇。

您還可以使用自定義解決方案,如下所示。

  1. 首先恢復數據庫的副本
  2. 根據您的計划,您可以根據更改更新目標數據庫表,但根據您的更改,這可能非常復雜

鏈接服務器在執行復雜連接時會引起性能問題。 您的目標數據庫是源的只讀副本,不知道為什么需要通過加入 SQL 服務器來讀取它們。

在我的公司,我們也遇到過類似的情況。

事務復制可以解決這個問題,但啟動並運行它是困難的部分。 獲取啟動復制所需的快照會相當困難地鎖定源數據庫。

我們找到的解決方案是備份源數據庫(服務器 B 上的 DB5),然后在目標服務器(服務器 A 上的 DB5)上恢復它。 然后(通過一些公共但鮮為人知的命令),將復制附加到新恢復的 DB5 副本。 這樣,自備份以來的所有更改以及所有正在進行的更改都將復制到只讀副本。

這樣,您可以讓 DB5 在服務器 B 上正常運行,並在服務器 A 上擁有只讀復制副本。

如果您需要實際的命令,我可以 go 挖掘它們。

我可以建議退后一步,問問自己為什么需要另一個只讀數據庫? 這將使用服務器中的一些 RAM,並且您永遠不會有足夠的 RAM ...

如果啟用 Read Committed SnapShot Isolation Level Locking,則reader 不會阻止 writer

您還可以查看“TheGameiswar”建議的數據庫快照。 這也將節省 RAM。

這兩個建議都使用了額外的 TempDB,因此您需要確保在您可以獲得的最快存儲上獲得它。

我不會使用事務復制,因為數據庫不會是只讀的

似乎是在服務器 B(主)和服務器 A 之間創建 AlwaysOn 可用性組的經典用例。在這種情況下,我認為您將希望使用沒有集群的可用性組 - 請參閱 - https://www 上的文章。 sqlshack.com/read-scale-availability-group-in-a-clusterless-availability-group/進行介紹。

然后服務器 A 將擁有 DB5 的只讀副本

當然,這是基於我從您上面給出的幾句話中對您的場景的理解,有關詳細的利弊,您可以查看下面的文章,盡管請注意它已經有點老了,而且很多東西已經更新,特別是為了可用性團體。 當然,如果您只需要 DB5 中的數據子集,那么事務復制看起來會更合適——移動 1TB 的 10% 有很多優勢。

https://www.sqlskills.com/blogs/jonathan/availability-group-readable-secondaries-just-say-no/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM