使用预留管理工作负载
本页介绍了如何使用槽预订来管理 BigQuery 工作负载。
预留槽
在 BigQuery 中,槽在名为reservations的池中分配。使用预留,您可以按照适合组织的方式管理容量和隔离工作负载。例如,您可以为生产工作负载创建名为 prod
的预留,并为测试创建另一个名为 test
的预留,以使测试作业不会与生产作业争用资源。或者,您可以为组织的不同部门创建预留,以分配计算费用。
尽管名称为“预留”,但预留中的容量并不一定是预留的。使用自动扩缩预留时,系统会根据需求自动扩容和缩容。此外,空闲槽可跨预留共享。
预留分配
如需使用预留中的已分配槽位,您必须将其分配给一个或多个项目、文件夹或组织。当项目中的作业运行时,它会使用其分配预留中的槽。资源可以在 Google Cloud 资源层次结构中从其父级继承分配。如果项目未分配到预留,则会继承父级文件夹或组织的分配(如果存在)。
项目会使用它们所分配到的资源层次结构中最具体的单个预留。文件夹分配会覆盖组织分配,而项目分配会覆盖文件夹分配。
如果项目没有已分配或继承的预留,则作业将使用按需价格。如需详细了解资源层次结构,请参阅整理 BigQuery 资源。
资源可以分配给 None
,表示缺少分配。分配给 None
的项目始终使用按需价格模式。None
分配常见的应用场景是将某个组织分配给预留,然后使用 None
从预留中排除某些项目或文件夹。如需了解详情,请参阅将项目分配给 None
。
创建分配时,请为该分配指定作业类型:
QUERY
:此预留用于非持续查询作业,包括 SQL、DDL、DML 和 BigQuery ML(内置模型)查询。BACKGROUND
:当您选择使用您自己的预留运行 BigQuery 搜索索引管理作业、BigQuery 变更数据捕获 (CDC) 或 BigLake 元数据缓存后台作业时,请使用此预留。在通过 Datastream 的后台应用操作将来源数据库复制到 BigQuery 时,也需要使用此预留。标准版中不提供BACKGROUND
预留。ML_EXTERNAL
:此预留适用于使用 BigQuery 外部服务的 BigQuery MLCREATE MODEL
查询。如需了解详情,请参阅为 BigQuery ML 工作负载分配槽。标准版不提供ML_EXTERNAL
预留。PIPELINE
:将此预留用于加载和提取作业。默认情况下,加载和提取作业是免费的,并可使用槽的共享池。BigQuery 并不保证此共享池的容量可用性,也不保证您能实现的吞吐量。如果您要加载大量数据,则作业可能需要等待槽变为可用。在这种情况下,您可能需要购买专用槽并为其分配
PIPELINE
作业。最佳实践是另外创建一个专用预留,并启用忽略空闲槽。如需详细了解空闲槽,请参阅空闲槽。将加载和提取作业分配给预留后,它们将失去对免费池的访问权限。您应该监控资源利用率和作业数量,以确保您的预留具有足够的容量,从而比使用空闲池执行得更好。
您不能将单个槽分配给特定作业。BigQuery 调度器会处理使用预留的作业的槽分配。如需详细了解槽的使用方式,请参阅 BigQuery 中的公平调度。
将预留与按需结算相结合
您可以在一个区域使用基于容量的结算,而在另一个区域使用按需结算。默认情况下,所有项目都使用按需结算模式。在同一区域内,您可以将项目、文件夹或组织分配到预留,从而选择基于容量的结算。例如,如果您在美国多区域购买了槽承诺并为您的组织分配了默认预留,则您的组织将在美国多区域中基于容量结算,但在所有其他区域中仍按需结算。
在同一区域内,您可以通过将项目明确分配到预留来组合使用基于容量的结算和按需结算。任何未分配给预留的项目仍会采取按需结算。您还可以通过分配预留 ID none
来明确将项目分配为使用按需结算。如果您将文件夹或组织分配到预留,但希望该文件夹或组织中的部分项目使用按需结算,这将非常有用。如需了解详情,请参阅将项目分配给“None”。
采用按需结算方式的项目所使用的容量独立于您承诺的容量。这些项目不会影响您承诺的容量的可用性。
指定管理项目
在您创建承诺和预留时,它们与一个 Google Cloud 项目相关联。此项目管理 BigQuery 预留资源,并且是这些资源的主要结算来源。此项目不一定得是 BigQuery 作业或数据集所在的项目。
最佳实践是为预留资源创建一个专用项目。此项目称为“管理”项目,因为它将承诺的结算和管理集中到一处。为此项目提供一个描述性名称,例如 bq-COMPANY_NAME-admin
。然后创建一个或多个单独的项目来保存 BigQuery 作业。
只能将管理项目所在的组织资源中的项目分配给预留。如果管理项目不属于组织,则只有该项目才能使用槽。
管理项目按承诺的槽付费。使用槽的项目需要支付存储费用,但无需支付槽费用。您可以购买多种方案(例如,一年期和三年期),并将槽放在同一个管理项目中。
最佳实践是限制管理项目的数量。这有助于简化结算管理和槽分配。建议在可行的情况下,为组织的所有预留创建一个管理项目。复杂的组织可能需要更多管理项目来满足管理或结算要求。
使用多个管理项目
在某些情况下,建议您创建多个管理项目,以实现以下目的:
- 将多个预留和承诺的费用分离到不同的组织部门。
- 将一个或多个槽承诺映射到不同的预留集。
空闲槽容量不会在不同管理项目中的预留之间共享。
如果您位于 Google Cloud 控制台的 BigQuery 容量管理页面中,则只能查看所选管理员项目的预留和承诺。
调整槽预留大小
BigQuery 的架构支持以更多的资源进行线性扩缩。增加容量可能会为您带来更多益处,具体取决于工作负载的实际情况。不过,增加容量也会增加费用。因此,选择最佳的槽购买数取决于您对性能、吞吐量和效用的要求。
您可以使用基准槽和自动扩缩槽进行实验,以确定最佳槽配置。例如,您可以依次使用 500 个基准槽、1,000 个槽、1,500 个槽和 2,000 个槽来测试工作负载,并观察这些槽数量对性能的影响。
分配槽并运行工作负载至少七天后,您可以使用槽估算器来分析性能并模拟添加或减少槽的效果。
您还可以检查项目当前的槽使用量以及您每月希望支付的费用。按需结算工作负载存在 2,000 个槽的软上限,但重要的是使用 INFORMATION_SCHEMA.JOBS*
视图、Cloud Logging、Jobs API 或 BigQuery 审核日志检查您的项目目前实际使用了多少个槽。如需了解详情,请参阅监控预留。
使用预留管理工作负载
您可以使用 BigQuery 预留功能来在各种工作负载、团队或部门之间分配容量,具体方法是创建更多预留并将项目分配到这些预留。预留是一个独立的资源库,它具备一项额外的优势,即可以利用整个组织的闲置容量。
例如,假设您拥有 1,000 个槽的总承诺容量和 3 种工作负载类型:数据科学、ELT 和 BI。
- 您可以创建包含 500 个槽的
ds
预留,并将所有相关的 Google Cloud 项目分配给ds
预留。 - 您可以创建包含 300 个槽的
elt
预留,并将用于 ELT 工作负载的项目分配到elt
预留。 - 您可以创建包含 200 个槽的
bi
预留,并将与 BI 工具关联的项目分配到bi
预留。
您可以选择为各个团队或部门创建预留,而不是跨工作负载类型划分容量。
管理不同区域中的预留
预留是区域级资源。在一个区域购买的槽和创建的预留不能在其他任何区域中使用。项目、文件夹和组织可以分配到一个区域中的预留,还可在其他区域以按需结算的方式运行。为了管理其他区域中的预留,您必须在 BigQuery 容量管理页面中更改区域:
- 在 BigQuery 控制台中,点击预留。
- 点击位置选择器,然后选择您要管理预留的区域。
- 选择地区后,您可以购买槽、创建预留以及将项目分配到预留。
在复杂组织中管理预订
预留是一种组织级资源。创建预订时,您可以向同一 Google Cloud组织中的任何项目分配容量。大多数 BigQuery 用户使用单个管理项目来进行预留和承诺使用合约。此管理项目将与一个 Cloud Billing 账号关联,并且将由该账号为容量付费。
不过,如果贵组织结构复杂,有多个部门各自管理自己的账单,您可能需要使用多个管理项目。请注意,空闲槽只能在同一管理项目中创建的预留中共享。您应了解预订和管理项目的配额和限制。
如果您使用多个 Google Cloud 组织,则必须为每个组织至少创建一个管理项目,然后在每个组织的相关管理项目中管理其预订和承诺。您无法跨组织共享容量。
槽用量承诺
槽承诺是指在指定时间段内购买的槽。您可以按 50 个槽的增量购买槽,最高可达地区性槽配额。容量承诺是可选的,但可以可以节省稳定状态的工作负载的费用。您可以创建的承诺数量不受限制。承诺购买成功之时您便支付了费用。如需了解当前的价格信息,请参阅容量承诺价格。
包年。您购买了 365 天的承诺使用合约。您可以在 365 天后选择是继续续订,还是转换为其他类型的承诺方案。
三年期承诺。您购买了三年期承诺。您可以在 3 年(1,095 天)后选择是继续续订,还是转换为其他类型的承诺方案。
在承诺期结束时,您的承诺将根据所选的续订方案续订。
年度或三年期承诺方案的计费方式为按月计费。但是,财务承诺适用于整个承诺期限,不能按月取消。您的用量每天都会在结算报告中更新,并且您可以随时查看。
槽承诺受可用容量的限制。当您尝试购买槽承诺时,不保证购买一定会成功。但是,在承诺购买成功后,在承诺到期之前,该容量将一直可用。
如果您在创建预留之前购买槽承诺,为方便起见,系统会自动创建名为 default
的预留。default
预留没有任何特殊行为。您可以根据需要创建其他预留,也可以使用默认预留。
续订承诺
购买承诺时,您可以选择续订方案。在承诺到期之前,您可以随时更改承诺的续订方案。您可以使用以下续订方案:
- 无。合约期结束后,承诺将被移除。预留不受影响。
- 包年。合约期结束后,您的承诺将再续订一年。
- 3 年。合约期结束后,您的承诺将再续订三年。
如需了解如何购买和续订承诺,请参阅创建容量承诺。
例如,如果您在 2019 年 10 月 5 日下午 6:00 购买了一份年度承诺,则我们从那一刻起开始向您收费。您可以在 2020 年 10 月 4 日下午 6:00 之后删除或更新承诺,注意 2020 年是闰年。您可以在 2020 年 10 月 4 日下午 6:00 之前更改续订方案,如下所示:
- 如果您选择续订年度承诺,则在 2020 年 10 月 4 日下午 6:00,您的承诺将续订一年。
- 如果您选择续订三年承诺,则在 2020 年 10 月 4 日下午 6:00,您的承诺将续订三年。
注意:在承诺到期后,续订过程最多可能需要一小时。例如,如果某项承诺在 2020 年 10 月 4 日下午 6:00 到期,则系统中会在 2020 年 10 月 4 日大约下午 6:00 到 7:00 之间显示续订的承诺记录。在此数据更新期间,系统不会收取按需费用,因为创建的承诺的有效开始时间为下午 6 点。
承诺到期
承诺一经创建便无法删除。如需删除年度或三年期承诺,请将其续订方案设置为 NONE
。
承诺到期后,系统会自动将其删除。如需详细了解承诺到期,请参阅承诺到期。
如果您无意中购买了承诺或配置承诺时出错,请与 Cloud Billing 支持团队联系以获取帮助。
预留限制
- 一个组织中的预订无法与其他组织共享。
- 您必须为每个组织使用单独的预留和单独的管理项目。
- 每个组织在单个位置最多可以有 10 个具有有效预留的管理项目。
- 空闲容量无法在组织之间或单个组织内的不同管理项目之间共享。
- 承诺和预留属于区域级资源。在一个区域或多区域购买的承诺无法用于任何其他区域或多区域的预留,即使单区域位置与多区域位置共存也是如此。例如,您无法将在
EU
多区域购买的承诺用于europe-west4
中的预留。 - 承诺和预留无法从一个区域或多区域移动到另一个区域或多区域。
- 在一个管理项目中购买的承诺无法转移到另一个管理项目。
- 使用一个版本购买的承诺使用合约不能与其他版本的预留一起使用。
- 不同版本的预留之间不共享空闲槽。
- 自动扩缩的槽不可共享,因为它们不再需要时,它们会缩减。