Partager via

弹性池有助于管理和扩展 Azure SQL 数据库中的多个数据库

适用于:Azure SQL 数据库

Azure SQL 数据库弹性池是一种简单且经济高效的解决方案,用于管理和缩放具有不断变化且不可预测的使用需求的多个数据库。 同一弹性池中的所有数据库位于单个服务器上,并以固定价格共享固定数量的资源。 SQL 数据库中的弹性池可使软件即服务 (SaaS) 开发人员能够在规定的预算内优化一组数据库的价格性能,同时为每个数据库提供性能弹性。

什么是 SQL 弹性池?

SaaS 开发人员在由多个数据库组成的大规模数据层上构建应用程序。 常见的应用程序模式是为每位客户设置单一数据库。 但不同的客户通常有不同的和不可预测的使用模式,并且很难预测每个数据库用户的资源需求。 传统上,有两个选择:

  • 根据高峰期的使用情况过度预配资源,并超额支付费用。
  • 为了节省成本而预配不足,牺牲高峰期的性能和客户满意度。

弹性池通过确保数据库获取需要时所需的性能资源来解决这个问题。 它们提供了一个可预测预算内的简单的资源分配机制。

重要

弹性池没有单个数据库的收费。 对于池存在的每个小时,需要支付最高的 eDTU 或 vCore 费用,无论使用量是多少,也不管池处于活动状态的时间是否小于一小时。

使用弹性池,您可以为多个数据库共享的池购买资源,以适应各个数据库使用时段不可预测的情况。 可以根据基于 DTU 的购买模型基于 vCore 的购买模型为池配置资源。 其数据库的聚合使用量决定了池的资源要求。

你的预算控制了资源池中的可用资源。 你需要做的就是:

  • 将数据库添加到池。
  • 可选择在 DTU 或 vCore 购买模型中设置数据库的最小和最大资源。
  • 根据预算设置资源池。

你可以使用资源池顺畅地扩大服务,从精益创业公司发展到成熟企业,并以更大的规模运营。

在池中,各个数据库可以灵活地在设置参数中使用资源。 高负荷下的数据库可能会消耗更多的资源以满足需求。 低负荷下的数据库消耗较少的资源,没有任何负荷的数据库不会消耗任何资源。 配置整个池(而非单个数据库)的资源,可以简化你的管理任务。 此外,您对该池的预算是可预测的。

可以向现有池添加更多资源,而且停机时间最少。 如果不再需要额外的资源,可以在任何时候从现有的池中删除。 还可以从池中添加或删除数据库。 如果可以预测到数据库的资源利用率不足,可以将其移出。

注意

将数据库移入或移出弹性池时,除了在操作结束删除数据库连接时有短暂的停机时间(大约为几秒)外,几乎没有停机时间。

何时应当考虑使用 SQL 数据库弹性池?

池非常适合大量具有特定使用模式的数据库。 对于给定的数据库,此模式的特征是低平均使用量与不频繁的使用高峰。 相反,具有持久性中-高利用率的多个数据库不应放在同一弹性池中。

能加入到池中的数据库越多,节省的金额就越大。 可能只需两个 S3 数据库就可以节省开支,具体取决于应用程序使用模式。

以下各部分帮助您了解如何评估您特定的数据库集合是否可以通过置于池中而受益。 这些示例使用标准池,不过这些原则也适用于其他服务层级中的弹性池。

评估数据库使用模式

下图显示了一个数据库示例,该数据库有大量的闲置时间,但也会定期出现活动高峰。 此利用模式适合资源池。

图表显示适用于池的单一数据库。

该图显示了从 12:00 到 1:00 的 1 小时内的 DTU 使用情况,其中每个数据点的粒度为 1 分钟。 在 12:10,DB1 使用的 DTU 数达到峰值(90 个),但其整体平均使用量低于 5 个 DTU。 在单一数据库中运行此工作负载需要 S3 计算大小,但在低活动期间,此大小可使大多数资源处于未使用状态。

池可让这些未使用的 DTU 跨多个数据库共享。 一个池可以减少所需的DTU数量,从而降低总体成本。

以上一个示例为基础,假设有其他数据库具有与 DB1 类似的使用模式。 在接下来的两张图中,4 个数据库和 20 个数据库的使用量分层放在同一图形中,以演示在使用基于 DTU 的购买模型时数据库使用量在整个时间段上的非重叠性质:

展示 4 个具有适合于池的使用模式的数据库的图表。

显示 20 个数据库的图表,其使用模式适合用于池化。

在上图中,用黑线表示跨所有 20 个数据库的聚合 DTU 使用量。 该线表明聚合 DTU 使用量永远不会超过 100 个 DTU,并指出 20 个数据库可以在这段期间共享 100 个 eDTU。 相比于将每个数据库放入单一数据库的 S3 计算大小,这会导致 DTU 减少 20 倍和价格降低 13 倍。

此示例很理想,因为:

  • 每一数据库之间的高峰使用量和平均使用量有相当大的差异。
  • 每个数据库的高峰使用量在不同时间点发生。
  • eDTU 会在多个数据库之间共享。

在 DTU 购买模型中,池的价格是池中 eDTU 的函数。 尽管池的 eDTU 单位价格比单一数据库的 DTU 的单位价格多 1.5 倍,但池 eDTU 可由多个数据库共享,所需的 eDTU 总数更少。 这些定价和 eDTU 共享的差异构成了池提供成本节省潜力的基础。

在 vCore 购买模型中,弹性池的 vCore 单价与单一数据库的 vCore 单价相同。

如何选择正确的池大小?

池的最佳大小取决于池中所有数据库所需的聚合资源。 需要确定:

  • 池中所有数据库使用的最大计算资源。 计算资源根据所选的购买模型,分别由 eDTUs 或 vCores 进行索引。
  • 池中所有数据库使用的最大存储字节。

有关每种购买模型中的服务层级和资源限制,请参阅基于 DTU 的购买模型基于 vCore 的购买模型

以下步骤可帮助你评估池是否比单一数据库更具成本效益:

  1. 估算池所需的 eDTU 或 vCore:

    1. 对于基于 DTU 的购买模型:
      1. MAX(<DB 的总数目 × 每 DB 的平均 DTU 使用率, 同时达到峰值的 DB 数目 × 每 DB 的峰值 DTU 使用率>)
    2. 对于基于 vCore 的购买模型:
      1. MAX(<DB 的总数目 × 每 DB 的平均 vCore 使用率, 同时达到峰值的 DB 数目 × 每 DB 的峰值 vCore 使用率>)
  2. 通过添加池中所有数据库所需的数据大小,估计池所需的总存储空间。 对于 DTU 购买模型,确定提供此存储量的 eDTU 池大小。

  3. 对于基于 DTU 的购买模型,请取步骤 1 和步骤 2 中 eDTU 估算值中较大的那个。

    1. 对于基于 vCore 的购买模型,请取步骤 1 中的 vCore 估算值。
  4. 请参阅 SQL 数据库定价页

    1. 找到比步骤 3 中估计的值大的最小池大小。
  5. 将步骤 4 的池价格与使用单一数据库适当计算大小的价格相比较。

重要

如果池中的数据库数量接近所支持的最大值,请确保考虑密集弹性池中的资源管理

针对数据库的属性

可以选择设置每个数据库的属性,以修改弹性池中的资源消耗模式。 有关详细信息,请参阅 DTUvCore 弹性池的资源限制文档。

将其他 SQL 数据库功能与弹性池一起使用

可以将其他 SQL 数据库功能与弹性池一起使用。

弹性作业和弹性池

借助池,通过在 elastic jobs 中运行脚本,管理任务得以简化。 弹性作业可消除与大量数据库有关的大部分麻烦。

有关用于操作多个数据库的其他数据库工具的详细信息,请参阅使用 Azure SQL 数据库进行扩展

超大规模弹性池

Azure SQL 数据库中的超大规模弹性池概述已正式发布。

实例横向扩展(只读)

不能对弹性查询使用 Azure SQL 数据库的只读横向扩展实例

弹性池中的数据库的业务连续性选项

共用数据库通常支持与可用于单一数据库相同的业务连续性功能

  • 时间点还原:时间点还原使用自动数据库备份将池中的数据库恢复到特定的时间点。 请参阅时间点还原
  • 异地还原:当数据库因其所在的区域发生事故而不可用时,异地还原会提供默认的恢复选项。 请参阅异地还原
  • 活动异地复制:对于具有异地还原无法提供的更强烈的恢复要求的应用程序,请配置活动异地复制故障转移组

有关上述策略的详细信息,请参阅 灾难恢复指南 - Azure SQL 数据库

使用 Azure 门户创建新的 SQL 数据库弹性池

在 Azure 门户中可以通过两种方法创建弹性池:

  • 创建弹性池并选择现有服务器或新服务器。
  • 从现有服务器创建弹性池。

若要创建弹性池并选择现有服务器或新服务器,请执行以下操作:

  1. 转到 Azure SQL 中心

  2. 在资源菜单中,展开 Azure SQL 数据库 并选择 弹性池

  3. 在工具栏中,选择“ + 创建”。

    Azure 门户中的屏幕截图,其中显示了“Azure SQL 数据库”菜单、“弹性池”页和“创建”按钮。

  4. 选择 订阅资源组弹性池名称和主机逻辑 服务器,可以是现有服务器或新服务器。

  5. 若要配置池的资源和定价,请选择“配置池”。 然后选择服务层级,将数据库添加到池,并配置池及其数据库的资源限制。

  6. 配置池后,选择“应用”,为池命名,然后选择“确定”以创建池。

  7. 然后,通过 Azure 门户、PowerShell、Azure CLI、REST API 或 T-SQL 管理弹性池

若要从现有服务器创建弹性池,请执行以下操作:

  1. 转到现有服务器并选择“新建池”,直接在该服务器中创建池。

    注意

    可以在服务器上创建多个池,但不能将数据库从不同的服务器添加到同一个池中。

    该池的服务层级决定了池中弹性数据库的可用功能,以及每个数据库可用的最大资源量。 有关详细信息,请参阅 DTU 模型中弹性池的资源限制。 有关弹性池的基于 vCore 的资源限制,请参阅基于 vCore 的资源限制 - 弹性池

  2. 若要配置池的资源和定价,请选择“配置池”。 然后选择服务层级,将数据库添加到池,并配置池及其数据库的资源限制。

  3. 配置池后,选择“应用”,为池命名,然后选择“确定”以创建池。

  4. 然后,通过 Azure 门户、PowerShell、Azure CLI、REST API 或 T-SQL 管理弹性池

监视弹性池及其数据库

在 Azure 门户中,可以监视弹性池和该池中的数据库的利用率。 还可以对弹性池进行一组更改,并同时提交所有更改。 这些更改包括添加或删除数据库、更改弹性池设置或更改数据库设置。

可以将内置的性能监视警报工具与性能等级组合使用。 SQL 数据库还可以发出指标和资源日志,以方便进行监视。