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。
hostname\instance
没有 AOAG 的关系:
Host --1:n--> Instance --1:n--> database
Run Code Online (Sandbox Code Playgroud)
(如果我这里说错了,请纠正我)
关系?与 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 One
或Host B/Instance One
可通过AO\All
AlwaysOn 提供的服务进行访问
单个数据库实例中的 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)
使用db3
和db4
可通过相同的逻辑实例名称 ( AO\All
) 进行访问,就像db1
和 一样db2
。
客户的 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 使用多个数据库并使它们看起来像一个实例。它们都需要托管在单个实例上才能工作(这是可能的),但是您又回到了最初的问题“硬件无法处理太多的数据库”。