Reservations 简介

通过 BigQuery Reservations,您可以在按需价格固定价格之间切换。使用固定价格,您可以购买专用的查询处理能力。通过为不同项目或组织的不同部分预留容量池,您可以在整个组织中分配此能力,您还可以结合使用两种结算模式,同时利用按需价格和固定价格的优势。

概览

BigQuery 为分析提供了两种价格模式:

  • 按需价格:您需要为查询扫描的数据付费。费用根据处理的字节数计算。
  • 固定价格:您可以购买专用的查询处理能力。

默认情况下,系统以按需价格模式结算。借助 BigQuery Reservations,您可以通过购买承诺使用合约切换到固定价格。承诺使用合约以 BigQuery 槽为单位进行购买。处理的所有字节的费用都包含在固定价格中。

使用 BigQuery Reservations 的优势包括:

  • 可预测性。固定价格提供可预测且一致的费用。你会提前知道自己的支出是多少。

  • 灵活性。您可以选择购买的容量。在删除容量承诺之前,您需要按每秒固定费率支付费用。您可以结合使用这两种计费模式。例如,您可以运行一些采用按需价格的工作负载,在搭配使用一些采用固定价格的工作负载。

    如果您购买最低月度或年度承诺,BigQuery 将以折扣价提供固定费率。

  • 工作负载管理购买槽后,您可以将其分配给工作负载。这样,工作负载就有可用的专用 BigQuery 计算资源池。同时,如果工作负载没有用完其分配的所有槽,则所有未使用的槽会自动与其他工作负载共享。

  • 集中式购买:您可以为整个组织购买和分配槽。您无需为使用 BigQuery 的每个项目购买槽。

承诺

预留概念。

容量承诺是在一段最短的时间内购买的 BigQuery 计算容量。承诺以计算容量的单位 BigQuery 槽度量。槽代表 BigQuery 使用的虚拟 CPU。通常情况下,您购买的槽数量越多,运行的并发查询数量也可更多,并且复杂查询的运行速度会更快。

BigQuery 提供了几个承诺方案供您选择。它们的区别主要在于成本和承诺的最短期限。如需了解当前的价格信息,请参阅固定价格

  • 包月。您购买了至少 30 天的承诺。30 天后,您可以随时取消该方案。

  • 包年。您购买了 365 天的承诺使用合约。您可以在 365 天后选择自动续订、取消或者转换为其他方案。

  • 灵活槽:您购买了 60 秒的承诺使用合约。60 秒后,您可以随时取消。在购买长期承诺使用合约之前,灵活槽是测试固定费率结算模式下工作负载执行情况的好方法。它们也适用于处理周期性或季节性需求,或者处理负载较高的事件(例如报税季)。

无论您选择哪种方案,您的槽都不会在承诺使用合约结束时到期。这些槽将一直保留并计费,直到您将其删除。您还可以在最短时长后更改方案类型。

槽受可用容量的限制。当您尝试购买槽承诺时,不保证购买一定会成功。但是,一旦承诺购买成功,系统就会保证您的容量,除非您将其取消。

如需详细了解这些方案,请参阅承诺方案

预留

购买槽后,您可以将其分配给不同的存储分区,称为预留。通过预订,您可以通过对特定组织有意义的方式分配槽。

例如,您可以为生产工作负载创建名为 prod 的预留,以及为测试创建一个名为 test 的单独预留。这样,您的训练作业就不会因生产工作负载所需的资源而展开竞争。或者,您可以为组织的不同部门创建预留。

购买槽时,系统会自动创建名为 default 的预留。default 预留没有什么特别之处;它只是为了方便使用。您可以决定是否需要其他预留,或者仅使用默认预留。

分配

如要使用购买的槽,您需要将项目、文件夹或组织分配给预留。除非您替换,否则资源层次结构中的每一级别都会继承上一级别的分配。换句话说,项目继承其父文件夹的分配,而文件夹则继承其组织的分配。如需详细了解 Google Cloud 资源层次结构,请参阅资源层次结构

从分配给预留的项目启动作业时,该作业将使用该预留的槽。如果项目未分配到预留(直接分配或通过其父级文件夹或组织继承),则该项目中的作业将使用按需价格。

None 分配表示缺少分配。分配给 None 的项目使用按需价格模式。None 分配常见的使用场景是将某个组织分配给预留,并通过将该预留中的特定项目或文件夹分配给 None 来停用这些项目或文件夹。如需了解详情,请参阅将项目分配给 None

创建分配时,请为该分配指定作业类型:

  • QUERY:此预留用于 SQL、DDL、DML 和 BigQuery ML 查询在内的查询作业,。

  • PIPELINE:将此预留用于加载,导出和其他流水线作业。

    默认情况下,加载和导出作业是免费的,并可使用槽的共享池。BigQuery 并不保证此共享池的可用容量,也不保证您能实现的吞吐量。如果您要加载大量数据,则作业可能需要等待槽变为可用。在这种情况下,您可能需要购买专用槽并为其分配流水线作业。我们建议另外创建一个专用预留,并停用其闲置槽共享功能。

    将加载作业分配给预留时,他们将失去对免费池的访问权限。监控性能以确保作业有足够的容量。否则,与使用免费池相比,性能可能会降低。

  • ML_EXTERNAL:此预留适用于使用 BigQuery 外部服务的 BigQuery ML 查询。

    某些 BigQuery ML 查询使用 BigQuery 外部服务。若要使用带有这些外部服务的预留槽,请创建作业类型为 ML_EXTERNAL 的分配。如需了解详情,请参阅为 BigQuery ML 工作负载分配槽

槽调度

槽在项目之间均匀分布,然后在项目中的作业内分布。

BigQuery 调度器会强制先在一个预留中正在运行的查询所属的各项目之间均匀共享槽,然后再在给定项目的作业内进行共享。调度程序提供最终公平性。因此,某些作业可能会在短期内获得不成比例的槽,但调度器最终会纠正此情况。调度器的目标是针对正在运行的任务,在过于严格的逐出规则(导致浪费槽时间)和过于宽松的逐出规则(导致包含长时间运行的任务的作业获得不成比例的槽时间)之间找到一个折中点。

如果某个重要的作业需要的槽数始终比它从调度器接收到的槽数多,请考虑创建一个具有保证槽数的额外预留,并将该作业分配给该预留。如需了解详情,请参阅工作负载管理

空闲槽

在任何给定时间,某些槽都可能处于空闲状态。这可能包括:

  • 未分配给任何预留的槽。
  • 分配给预留但当前未使用的槽。

默认情况下,在预留中运行的查询自动使用其他预留的空闲槽。这意味着只要有容量,作业就可以一直运行。空闲容量会根据需要立即抢占回原始分配的预留,而不管需要资源的查询的优先级是什么。此操作会自动实时进行。

如要停用此功能并强制预留仅使用已预配的槽位,请将 ignore_idle_slots 设置为 true。将 ignore_idle_slots 设置为 true 的预留不会收到空闲槽。

只要 ignore_idle_slots 为 false,即使预留的槽数为 0,也仍然可以访问未使用的槽。如果您仅使用 default 预留,我们建议您采用这种方式进行设置。

上述行为不适用于 ML_EXTERNAL 类型的分配。这些作业使用的槽不是抢占式的;也就是说,它们不适用于预留中运行的其他作业。此外,这些作业不使用其他预留中的空闲槽。

后续步骤