Sql-Server

AlwaysOn 可用性組和數據庫計數限制

  • December 8, 2021

更新:

基本答案:我要求的東西不是 AOAG 設計的一部分。

在我看來,這使得這是一個“不好問的問題”。除非這冒犯了某人,否則我會把它留在這裡,以防萬一有人和我有同樣的壞主意。


請原諒術語,因為我不是 DBA。

我正在就一個很可能需要 700-900 個數據庫的項目進行諮詢。該軟體不能使用多個 SQL 實例,並且必須將所有數據庫託管在同一個 SQL 實例名稱上。

客戶的 DBA 解釋了為什麼在 AlwaysOn 可用性組上託管數百個數據庫可能是不合理的,微軟官方文件雖然沒有說明上限,但確實說明 MS 只測試 100 個數據庫。

AlwaysOn 故障轉移群集不是一個選項,因為數據是共享的而不是複制的。

我的理解是,AOAG 可以作為 SQL 實例進行定址,並且我將無法在多個 AOAG 之間共享實例名稱。

有人向我提到,有可能完全做到這一點 - 添加一個額外的 AG 並將這些額外的數據庫放在相同的 SQL 實例名稱下,但我無法通過搜尋找到該選項的描述。

要麼我用錯誤的術語搜尋這方面的資訊,要麼我假設 AG 是 1:1 與 SQL 實例,甚至可能是 1:m,但不是每個實例有多個 AG。

更新

我(認為我)理解的術語:

  • 主機:執行一個或多個 SQL Server 實例的伺服器。
  • 實例:在主機上執行的 SQL Server 程序的副本,可通過實例名稱訪問。
  • 實例名稱:實例的邏輯地址,由a組成hostname\instance
  • 數據庫 - 實例中的數據容器。

沒有 AOAG 的關係:

Host --1:n--> Instance --1:n--> database

我迷路的地方:

(如果我在這裡錯了,請糾正我)

  • AG - 一組 SQL Server 實例以及用於管理跨多個主機複製的主機數據的邏輯定址的附加服務,這些可在單個邏輯實例名稱下定址。

關係?與 AOAG:

AO Cluster (logical name AO\All)
 +-- AG
       +-- Host A
       |     +-- Instance One
       |           +-- db1
       |           +-- db2
       +-- Host B
             +-- Instance One (replica of A\Instance One)
                   +-- db1
                   +-- db2

dbsHost A/Instance OneHost B/Instance One可通過AO\AllAlwaysOn 服務訪問

問題:

是否可以在單個數據庫實例中的 AlwaysOn 跨數據庫中擁有多個可用性組?如果沒有,您對如何使用 Always On 有效地託管這麼多數據庫有什麼建議嗎?(除了’它應該工作’像這裡

換句話說,這是一種可能的架構嗎?它是否允許我服務/託管更多的數據庫(通過加倍硬體?)

AO Cluster (logical name AO\All)
 +-- AG-1 (as specified above)
 |     +-- Host A
 |     |     +-- Instance One
 |     |           +-- db1
 |     |           +-- db2
 |     +-- Host B
 |           +-- Instance One (replica of A\Instance One)
 |                 +-- db1
 |                 +-- db2
 +-- AG-2 (as specified above)
       +-- Host C
       |     +-- Instance Two
       |           +-- db3
       |           +-- db4
       +-- Host D
             +-- Instance Two (replica of C\Instance Two)
                   +-- db3
                   +-- db4

使用db3db4可使用相同的邏輯實例名稱 ( AO\All) 訪問,就像db1and一樣db2

客戶的 DBA 解釋了為什麼在 AlwaysOn 可用性組上託管數百個 DB 可能是不合理的

$$ … $$

這是正確的,雖然如果你有硬體,那麼它可以工作,但在大多數情況下,數據庫同時處於活動狀態,擁有數百到數千個數據庫將是一場災難。

$$ … $$微軟官方文件,雖然沒有說明上限,但確實說明 MS 只測試 100 個數據庫。

這是對特定硬體的特定測試,並不表示一般性能水平、最大值或最小值。這只是一個數據點,在測試中具有給定負載的 100 個數據庫將在測試中的硬體上執行良好。這意味著您的硬體會有所不同,CPU 數量,記憶體等,因此甚至可能無法以 100 執行。沒有最大數量(除了 SQL Server 的數據庫數量之外,這是一個硬上限),唯一知道的方法是測試您的特定設置(基礎設施和工作負載)以了解上限存在的位置。隨著使用者、工作負載等被添加到系統中並且不是靜態的,這也可能隨著時間而改變。

我的理解是,AOAG 可以作為 SQL 實例進行定址,並且我將無法在多個 AOAG 之間共享實例名稱。

我不確定我是否完全理解這裡的語句,但是一個實例(SQL Server 執行的執行檔)可以有一個或多個 AG。這些 AG 可以跨越一個或多個實例。

有人向我提到,有可能完全做到這一點 - 添加一個額外的 AG 並將這些額外的數據庫放在相同的 SQL 實例名稱下,但我無法通過搜尋找到該選項的描述。

可以有多個 AG,但是一個數據庫只能存在於一個 AG 中。所以一個實例承載 AG,一個 AG 是一個數據庫的邏輯容器。當該邏輯容器(AG)“移動”到可以託管 AG 的任何其他實例時,它會移動其中的所有資源(數據庫)。AG 邏輯容器中的所有數據庫必須全部在一起並且不能拆分,因為您無法選擇 AG 中的哪些數據庫進入每個副本,僅此而已。

要麼我用錯誤的術語搜尋這方面的資訊,要麼我假設 AG 是 1:1 與 SQL 實例,甚至可能是 1:m,但不是每個實例有多個 AG。

取決於您如何看待它,但一個實例可以託管 1:m AG。一個 AG 跨越 1:8 個實例。

是否可以在單個數據庫實例中的 AlwaysOn 跨數據庫中擁有多個可用性組?

實例不是數據庫,實例託管數據庫。AG 是數據庫資源的邏輯容器,無論它們被要求去哪裡,它們都“一起去”(無論 SQL Server 的哪個實例被允許託管它們並且數據庫在物理上可用)。因此,AG 中的單個數據庫將在 AG 跨越的所有其他實例上擁有其自身的精確副本。

但是,您不能跨多個 AG 獲取多個數據庫並使它們看起來都像一個實例。它們都需要託管在單個實例上才能正常工作(這是可能的),但是您又回到了最初的問題“硬體無法處理的數據庫太多”。

引用自:https://dba.stackexchange.com/questions/303655