Reservations の概要

BigQuery Reservations では、オンデマンド料金定額料金を切り替えることができます。定額料金では、専用のクエリ処理容量を購入します。異なるプロジェクト、または組織の異なる部署に容量プールを予約することで、購入した容量を組織全体にを割り当てることができます。また、2 つの課金モデルを組み合わせることで、オンデマンド料金と定額料金の両方のメリットを得ることができます。

概要

BigQuery には、分析用の次の 2 つの料金モデルが用意されています。

  • オンデマンド料金: クエリでスキャンされたデータに対して料金が発生します。費用は、処理されたバイト数に基づいて計算されます。
  • 定額料金: 専用のクエリ処理容量を購入します。

デフォルトでは、オンデマンド料金モデルに沿って請求されます。BigQuery Reservations を使用すると、コミットメントを購入することで定額料金に切り替えることができます。コミットメントは、BigQuery スロットの単位で購入します。処理データの費用はすべて定額料金に含まれます。

BigQuery Reservations を使用すると、次のメリットがあります。

  • 予測可能性。定額料金では、費用が固定で予測可能です。何の費用かを前もって把握できます。

  • 柔軟性。購入する容量を選択できます。容量コミットメントを削除するまで、1 秒あたりの定額料金が請求されます。両方の課金モデルを組み合わせることができます。たとえば、一部のワークロードをオンデマンド料金で実行して、それ以外は定額料金で実行できます。

    BigQuery では、最小限の月間コミットメントまたは年間コミットメントを購入した場合、割引の定額料金が適用されます。

  • ワークロード管理。スロットを購入したら、ワークロードに割り当てることができます。これにより、ワークロードには利用可能な BigQuery 計算リソースの専用プールができます。それと同時に、ワークロードが割り当てられたスロットを一部しか使用していない場合、未使用のスロットは他のワークロード間で自動的に共有されます。

  • 一元購入: スロットをまとめて購入し、組織全体に割り当てることができます。BigQuery を使用するプロジェクトごとにスロットを購入する必要はありません。

コミットメント

Reservations のコンセプト

容量コミットメントは、最小期間の BigQuery コンピューティング容量の購入です。コミットメントは、計算能力の単位である BigQuery スロットで測定されます。スロットは、BigQuery で使用される仮想 CPU を表しています。一般的に、より多くのスロットを購入すると、同時に実行できるクエリの数が増え、複雑なクエリでも高速で実行できるようになります。

BigQuery では、いくつかのコミットメント プランから選択できます。これらは主に、コミットメントの費用と最小使用期間によって異なります。現在の料金に関する情報については、定額料金をご覧ください。

  • 月次契約。最低 30 日間分のコミットメントを購入します。30 日後には、いつでもプランをキャンセルできます。

  • 年間契約。365 日間分のコミットメントを購入します。365 日後に、自動更新、キャンセル、別のプランへの変更のいずれかを選択できます。

  • Flex Slots。60 秒のコミットメントを購入します。60 秒後にいつでもキャンセルできます。Flex Slots は、長期のコミットメントを購入する前に、定額制でワークロードがどのように動作するかをテストするのに適しています。周期的または定期的に使用したい場合や、税務申告など負荷の大きいイベントに使用するのにも便利です。

どのプランを選択しても、コミットメント期間の終了時にスロットは期限切れになりません。スロットは削除しない限り、保持されて課金されます。最小期間後にプランの種類の変更もできます。

スロットは容量の可用性の影響を受けます。スロット コミットメントを購入しようとするとき、その購入が成功するとは限りません。ただし、コミットメントの購入が成功すると、確保した容量はキャンセルするまで保証されます。

これらのプランについて詳しくは、コミットメント プランをご覧ください。

予約

スロットの購入後、予約と呼ばれる別のバケットに割り当てることができます。予約を使用すると、特定の組織に合った方法でスロットを割り当てることができます。

たとえば、本番環境ワークロード用に 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_slotstrue に設定します。ignore_idle_slotstrue に設定された予約では、アイドル状態のスロットを受け取りません。

ignore_idle_slots が false である限り、予約にスロット数 0 の設定が可能で、未使用のスロットに引き続きアクセスできます。default 予約のみを使用する場合は、この方法で設定することをおすすめします。

ML_EXTERNAL 型を割り当てることは、上記動作の例外にあたります。これらのジョブで使用されるスロットはプリエンプティブルではありません。つまり、予約で実行されている他のジョブでは使用できません。また、これらのジョブは、他の予約のアイドル スロットを使用することもありません。

次のステップ