Compartilhar via

Azure Analysis Services横向扩展

通过横向扩展,客户端查询可分布在查询池的多个查询副本中,从而在高查询工作负载期间缩短响应时间 。 也可将处理与查询池分开,确保客户端查询不受处理操作的负面影响。 可以通过Azure门户或使用Analysis Services REST API来配置横向扩展。

标准定价层的服务器可以实现横向扩展(Scale-out)。 每个查询副本按照与服务器相同的费率计费。 将在服务器所在的同一区域中创建所有查询副本。 你可以配置的查询副本数量受服务器所在区域限制。 若要了解详细信息,请参阅 “可用性”(按区域)。 横向扩展不会增加服务器的可用内存量。 要增加内存,需升级套餐。

为什么横向扩展?

在典型的服务器部署中,一台服务器同时用作处理服务器和查询服务器。 如果服务器上针对模型的客户端查询数量超过服务器计划的查询处理单元 (QPU),或模型处理与高查询工作负载同时发生,就会导致性能降低。

通过横向扩展,可以创建一个查询池,其中包含最多七个查询副本资源(总共 8 个,包括 服务器)。 可以缩放查询池中的副本数目以满足关键时刻的 QPU 需求,并且随时可以从查询池中隔离处理服务器。

不论查询池中查询副本的数量如何,处理工作负载都不会分布在查询副本中。 主服务器充当处理服务器。 查询副本仅为针对查询池中主服务器与每个副本之间同步的模型数据库发出的查询提供服务。

横向扩展时,最长可能需要花费五分钟时间来以增量方式将新的查询副本添加到查询池。 所有新的查询副本正常运行后,新的客户端连接将在查询池中的资源之间进行负载均衡。 现有的客户端连接不会从它们目前连接的资源中更改。 横向缩减时,所有与正在被移出查询池的查询池资源的现有客户端连接将被终止。 客户端可以重新连接到剩余的查询池资源。

工作原理

首次配置横向扩展时,主服务器上的模型数据库 会自动 与新查询池中的新副本同步。 自动同步只发生一次。 在自动同步期间,主服务器的数据文件(在 Blob 存储中静态加密)将复制到另一个位置,并且也会在 Blob 存储中静态加密。 然后,查询池中的副本将被第二组文件中的数据填充。

只能在首次横向扩展服务器时执行自动同步,不过,也可以执行手动同步。 同步可确保查询池中的副本数据与主服务器的数据相匹配。 处理(刷新)主服务器上的模型时,必须在处理操作完成之后执行同步。 这种同步会将更新的数据从 Blob 存储中的主服务器文件复制到第二组文件。 然后,查询池中的副本将从 Blob 存储中的第二组文件获取已更新的数据。

当您执行后续的横向扩展操作时,例如将查询池中的副本数从两个增加到五个,新副本将从 Blob 存储中的第二组文件加载数据。 不会发生同步。 如果在横向扩展后执行同步操作,查询池中新副本的数据将被填充两次 - 这是多余的数据填充。 执行后续的横向扩展操作时,请务必记住:

  • 在执行横向扩展操作前执行同步,以免多余地初始化添加的副本。 不允许同时执行并行同步和横向扩展操作。

  • 将处理操作和横向扩展操作自动化时,必须先处理主服务器上的数据,再执行同步,然后执行横向扩展操作。 遵循此顺序可确保尽量减轻对 QPU 和内存资源造成的影响。

  • 在横向扩展操作期间,查询池中的所有服务器(包括主服务器)都暂时处于脱机状态。

  • 即使查询池中没有副本,也允许同步。 如果在主服务器上通过处理操作需要从零扩展为一个或多个包含新数据的副本,应该先在查询池中不包含任何副本的情况下进行同步,然后再进行扩展规模。在扩展之前进行同步可以避免新添加副本的冗余数据填充。

  • 从主服务器中删除模型(数据库)时,不会自动从查询池中的副本内删除该数据库。 必须使用 Sync-AzAnalysisServicesInstance PowerShell 命令执行同步操作,该命令从复制体的共享 Blob 存储位置中删除该数据库的文件,然后删除查询池中复制体上的模型数据库。 若要确定某个模型数据库是否存在于查询池中的副本上,但不存在于主服务器上,请确保“从查询池分离处理服务器”设置为“是”。 然后使用 SQL Server Management Studio (SSMS) 通过 :rw 限定符连接到主服务器,以查看数据库是否存在。 然后,在没有 :rw 限定符的情况下连接到查询池中的副本,看同一数据库是否还存在。 如果该数据库存在于查询池中的副本上,但不存在于主服务器上,请运行同步操作。

  • 重命名主服务器上的数据库时,需要执行另一个步骤来确保数据库正确同步到所有副本。 重命名后,使用 Sync-AzAnalysisServicesInstance 命令执行同步,并用旧数据库名称指定 -Database 参数。 这种同步会从所有副本中删除使用旧名称的数据库和文件。 然后,使用新数据库名称指定 -Database 参数,来执行另一次同步。 第二次同步会将新命名的数据库复制到第二组文件,并初始化所有副本。 无法在门户中使用“同步模型”命令执行这些同步。

同步模式

默认情况下,查询副本会完全解除冻结,而不是以增量方式解除冻结。 水合过程分阶段进行。 它们被每次两个地拆卸和安装(假设至少有三个副本),以确保在任何时刻查询时,至少有一个副本保持在线状态。 某些情况下,当此过程正在进行时,客户端可能需要重新连接到其中一个联机副本。 使用 ReplicaSyncMode 设置,现在就可以指定以并行方式进行查询副本同步。 并行同步有以下优势:

  • 大大减少了同步时间。
  • 跨副本数据更可能在同步过程中保持一致。
  • 所有副本上的数据库在整个同步过程中都保持联机状态,因此客户端无需重新连接。
  • 内存缓存采用增量方式更新,只更新已更改的数据,这可能比完全重新加载模型更快。

设置 ReplicaSyncMode

使用 SSMS 在“高级属性”中设置 ReplicaSyncMode。 可能的值为:

  • 1(默认值):将副本数据库分阶段(以增量方式)完全解除冻结。

  • 2:并行方式的优化同步。

    ReplicaSyncMode 设置

设置 ReplicaSyncMode=2 时,根据需要更新多少缓存,查询副本可能会消耗更多内存。 为了使数据库始终处于联机状态并可供查询使用,该操作在极端情况下可能需要在副本上将内存加倍(具体取决于数据的更改量),因为旧段和新段同时保存在内存中。 副本节点与主节点有相同的内存分配,而主节点上通常有额外的内存用于刷新操作,因此,副本不太可能用尽内存。 另外,数据库通常在主节点上进行增量更新,因此通常不会要求内存加倍。 如果同步操作遇到内存不足错误,它将使用默认方法(每次附加/分离两个)重试。

从查询池分离处理

为了最大限度地提高处理和查询操作的性能,可以选择将处理服务器与查询池分开。 分离后,新的客户端连接仅会分配给查询池中的查询副本。 如果处理操作仅占用一小段时间,则可以选择将处理服务器与查询池分开仅执行处理和同步操作所需的时间,然后将其包含回查询池中。 将处理服务器从查询池分离时,或者将其添加回查询池中时,可能需要长达五分钟的时间来完成操作。

监视 QPU 使用情况

若要确定是否需要横向扩展服务器,请在 Azure 门户中监视服务器指标。 如果 QPU 经常超过上限,则表示针对模型的查询数量超出了计划的 QPU 限制。 查询线程池队列中的查询数量超过可用的 QPU 时,查询池作业队列长度指标也会增加。

另一个值得关注的良好指标是按 ServerResourceType 分类的平均 QPU。 此指标将主服务器的平均 QPU 与查询池的进行比较。

查询横向扩展指标

通过 ServerResourceType 配置 QPU

  1. 在“指标”折线图中,单击“添加指标”。

  2. 资源中选择你的服务器,然后在指标命名空间中选择Analysis Services 标准指标,然后在指标中选择QPU,最后在聚合中选择平均值

  3. 单击「执行拆分」。

  4. 中选择ServerResourceType

详细的诊断日志记录

使用Azure Monitor日志来更详细的诊断横向扩展服务器资源。 使用日志,您可以借助 Log Analytics 查询,按照服务器和副本来划分 QPU 和内存。 有关详细信息,请参阅 Log Analytics 工作区中的 Analyze 日志。 有关示例查询,请参阅 示例 Kusto 查询

配置横向扩展

在 Azure 门户中

  1. 在门户中,单击“扩展”。使用滑块选择查询副本服务器的数量。 所选择的副本数量是基于已有服务器之外的。

  2. 在“从查询池分离处理服务器”中,选择“是”以将处理服务器和查询服务器分开。 使用默认连接字符串(不含:rw)的客户端连接被重定向到查询池中的副本。

    横向扩展滑动器

  3. 单击“保存”以预配新的查询副本服务器

首次配置服务器的横向扩展时,主服务器上的模型将自动与查询池中的副本同步。 自动同步仅在您首次配置横向扩展为一个或多个副本时发生一次。 对同一服务器上副本数的后续更改 不会触发另一次自动同步。 即使将服务器设置为零个副本,然后再次横向扩展为任意数目的副本,也不会再次发生自动同步。

同步

必须手动或使用 REST API 执行同步操作。

在 Azure 门户中

在“概述”>模型>同步模型

“同步”图标

REST API

使用同步操作。

同步模型

POST https://<region>.asazure.chinacloudapi.cn/servers/<servername>:rw/models/<modelname>/sync

获取同步状态

GET https://<region>.asazure.chinacloudapi.cn/servers/<servername>/models/<modelname>/sync

返回状态代码:

Code DESCRIPTION
-1 无效
0 正在复制
1 正在解冻
2 完成
3 已失败
4 正在完成

PowerShell

注释

建议使用 Azure Az PowerShell 模块与Azure交互。 若要开始,请参阅 Install Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 Migrate Azure PowerShell从 AzureRM 迁移到 Az

在使用 PowerShell 之前,安装或更新最新的Azure PowerShell模块

若要运行同步,请使用 Sync-AzAnalysisServicesInstance

若要设置查询副本数,请使用 Set-AzAnalysisServicesServer。 指定可选的 -ReadonlyReplicaCount 参数。

若要将处理服务器与查询池分开,请使用 Set-AzAnalysisServicesServer。 将 -DefaultConnectionMode 可选参数指定为使用 Readonly

若要了解详细信息,请参阅将 服务主体与 Az.AnalysisServices 模块配合使用

连接

服务器的“概述”页上有两个服务器名称。 如果尚未对服务器配置扩展规模,则这两个服务器名称都相同地运作。 为服务器配置横向扩展之后,需要根据连接类型指定适当的服务器名称。

对于最终用户客户端连接(如 Power BI Desktop、Excel 和自定义应用),请使用 Server 名称

对于 PowerShell、Azure 函数应用和 AMO 中的 SSMS、Visual Studio 和连接字符串,请使用 Management 服务器名称。 管理服务器名称包含特殊限定符 :rw(读取-写入)。 所有处理操作均在管理服务器(主服务器)上发生。

服务器名称

向上扩展、向上缩减与向外扩展

可以在具有多个副本的服务器上更改定价层。 同一定价层适用于所有副本。 缩放操作首先会同时关闭所有副本,然后在新的定价层重新启动所有副本。

故障排除

问题: 用户收到在连接模式“ReadOnly”中找不到服务器“<名称>”实例的错误

解决方案:选择从查询池中分离处理服务器选项时,使用默认连接字符串(不含:rw)的客户端连接将被重定向到查询池副本。 如果查询池中的副本因尚未完成同步而尚未联机,则重定向的客户端连接可能会失败。 若要防止连接失败,执行同步时查询池中必须至少有两个服务器。 每个服务器单独同步,而其他服务器保持联机。 如果在处理期间选择在查询池中没有处理服务器,则可以选择将其从池中删除以进行处理,然后在处理完成后但在同步之前将其添加回池中。 可以使用内存和 QPU 指标来监视同步状态。

Monitor Azure Analysis ServicesManage Azure Analysis Services