AlwaysOn 可用性组和数据库计数限制

Loc*_*ith 0 sql-server availability-groups sql-server-2016 sql-server-2017 sql-server-2019


更新:

基本答案:我要求的东西不属于 AOAG 设计的一部分。

在我看来,这“不是一个好问题”。除非这冒犯了某人,否则我会将其保留在这里,以防万一有人有和我一样的坏主意。


请原谅我使用的术语,因为我不是 DBA。

我正在咨询一个很可能需要 700-900 个数据库的项目。该软件无法利用多个 SQL 实例,并且必须将所有数据库托管在同一 SQL 实例名称上。

客户的DBA解释了为什么在AlwaysOn可用性组上托管数百个以上的数据库可能是不合理的,并且微软官方文档虽然没有说明上限,但确实声明微软仅使用100个数据库进行测试。
AlwaysOn 故障转移群集不是一个选项,因为数据是共享的而不是复制的。

我的理解是,AOAG 可以作为 SQL 实例进行寻址,并且我无法在多个 AOAG 之间共享实例名称。

有人向我提到,也许可以做到这一点 - 添加一个额外的 AG 并将这些额外的数据库放在同一 SQL 实例名称下,但我无法通过搜索找到此选项的描述。

要么我使用错误的术语搜索相关信息,要么我假设 AG 与 SQL 实例是 1:1,甚至可能是 1:m,但每个实例都不是多个 AG。

更新

我(认为我)理解的术语:

  • 主机:运行一个或多个 SQL Server 实例的服务器。
  • 实例:在主机上运行的 SQL Server 进程的副本,可通过实例名称进行访问。
  • 实例名称:实例的逻辑地址,由hostname\instance
  • 数据库 - 实例中数据的容器。

没有 AOAG 的关系

Host --1:n--> Instance --1:n--> database
Run Code Online (Sandbox Code Playgroud)

我迷路的地方:

(如果我这里说错了,请纠正我)

  • 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
Run Code Online (Sandbox Code Playgroud)

dbs onHost 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
Run Code Online (Sandbox Code Playgroud)

使用db3db4可通过相同的逻辑实例名称 ( AO\All) 进行访问,就像db1和 一样db2

Sea*_*ser 5

客户的 DBA 解释了为什么在 AlwaysOn 可用性组上托管数百个以上的数据库可能是不合理的 [...]

这是正确的,尽管如果您有硬件,那么它就可以工作,但在大多数情况下,数据库同时处于活动状态,拥有数百到数千个数据库将是一场灾难。

[...] Microsoft 官方文档,虽然没有说明上限,但确实指出 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 与 SQL 实例是 1:1,甚至可能是 1:m,但每个实例都不是多个 AG。

取决于您如何看待它,但一个实例可以托管 1:m AG。AG 跨越 1:8 的实例。

单个数据库实例中的 AlwaysOn 跨数据库中是否可以有多个可用性组?

实例不是数据库,实例托管数据库。AG 是数据库资源的逻辑容器,无论它们被要求去往何处,它们都“聚集在一起”(无论允许哪个 SQL Server 托管它们并且数据库在物理上可用)。因此,AG 中的单个数据库将在 AG 跨越的所有其他实例上拥有其自身的精确副本。

但是,您无法跨多个 AG 使用多个数据库并使它们看起来像一个实例。它们都需要托管在单个实例上才能工作(这是可能的),但是您又回到了最初的问题“硬件无法处理太多的数据库”。