你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

弹性池有助于在 Azure SQL 数据库中管理和缩放多个数据库

适用于:Azure SQL 数据库

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

什么是 SQL 弹性池?

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

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

弹性池通过确保数据库获取需要时所需的性能资源来解决这个问题。 它们提供了一个可预测预算内的简单的资源分配机制。 若要详细了解如何通过弹性池设计 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 单价相同。

如何选择正确的池大小?

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

  • 池中所有数据库使用的最大计算资源。 计算资源由 eDTU 或 vCore 编制索引,具体取决于所选的购买模型。
  • 池中所有数据库使用的最大存储字节。

有关每种购买模型中的服务层级和资源限制,请参阅基于 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 。 弹性作业可消除与大量数据库有关的大部分麻烦。

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

超大规模弹性池

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

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

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

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

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

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

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

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

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

  1. 转到 Azure 门户,创建弹性池。 搜索“Azure SQL”并将其选中。

  2. 选择“创建”以打开“选择 SQL 部署选项”窗格。 若要查看有关弹性池的详细信息,请在“数据库”磁贴上选择“显示详细信息”。

  3. 在“数据库”磁贴上的“资源类型”下拉列表中,选择“弹性池”。 然后选择“创建”。

    显示创建弹性池的屏幕截图。

  4. 然后,通过 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 数据库还可以发出指标和资源日志,以方便进行监视。

客户案例研究

  • SnelStart:SnelStart 使用 SQL 数据库的弹性池以每月 1,000 个新 SQL 数据库的速度快速扩展其业务服务。
  • Umbraco:Umbraco 使用 SQL 数据库的弹性池为云中数千个租户快速预配和缩放服务。
  • Daxko/CSI:Daxko/CSI 使用 SQL 数据库的弹性池加速其开发周期,增强其客户服务与性能。