コンテンツに移動
データ分析

BigQuery クエリキューでクエリの動的同時実行を管理

2023年10月5日
https://storage.googleapis.com/gweb-cloudblog-publish/images/aiml2022_PO1vxqJ.max-2500x2500.max-2500x2500.png
Google Cloud Japan Team

※この投稿は米国時間 2023 年 9 月 28 日に、Google Cloud blog に投稿されたものの抄訳です。

BigQuery は、要求の厳しいワークロードにも対応できる強力なクラウド データ ウェアハウスです。BigQuery ユーザーは、ダウンタイムやアップグレードなしで、パフォーマンス、耐久性、効率性、スケーラビリティの継続的な改善というメリットを享受できます。

このたび、BigQuery でのクエリキューの一般提供が始まりましたのでお知らせいたします。

クエリキューの概要とメリット

BigQuery クエリキューは動的同時実行の上限を導入することでキューイングを可能にする機能であり、BigQuery のすべてのお客様においてデフォルトで有効になっています。以前の BigQuery では、プロジェクトあたり 100 クエリという固定の同時実行上限に対応していたため、クエリ数がこの上限を超えると、インタラクティブ ジョブを送信するときに割り当て超過エラーが表示されていました。

クエリキューにより、同時実行数は、利用可能なスロット容量と実行中のクエリ数に基づいて動的に計算されるようになりました。ほとんどの場合、お客様は同時実行数を動的に計算する機能を使用することになりますが、各クエリが実行用の十分なスロット容量を確保できるように、管理者が予約において最大同時実行目標数を設定することも可能です。これにより、すぐに処理できないクエリは、失敗するのではなくキューに追加され、リソースが利用可能になり次第実行されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image2.max-600x600.png

クエリキューを有効にすると以下のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/image3.max-800x800.png

クエリキューの使用

  1. 動的同時実行: BigQuery は利用可能なリソースに基づいて同時実行を動的に決定し、予約サイズと使用パターンに基づいて同時実行を自動的に設定および管理できます。デフォルトの構成では同時実行数がゼロに設定されているため、動的構成が可能です。そのため、経験のある管理者は、同時実行目標数の上限を設定することで、このオプションを手動でオーバーライドできます。管理者が設定する上限は、利用可能なスロット容量に基づく最大同時実行数を超えることができません。管理者であっても、オンデマンドのワークロードに対してはこのような上限を設定できません。
  2. キューイング: クエリキューは、ピーク時のワークロードによりクエリが急増し、最大同時実行数の上限を超えるような場合のシナリオの管理に役立ちます。キューイングを有効にすると、BigQuery では、最大で 1,000 のインタラクティブ クエリと 20,000 のバッチクエリをキューに入れることができます。そのため、以前のように同時実行数の上限により停止するのではなく、実行のスケジュールが設定されるようになり、アイドル時間や使用率の低い時間帯を検索して、ワークロードのリクエストを送信するタイミングを最適化する必要がなくなります。また、BigQuery が、リクエストを自動的に実行するか、現在実行中のワークロードが完了次第すぐに実行するようにキュー内のリクエストをスケジュールします。

主な指標とハイライト

  1. ジョブ同時実行目標数: 予約において target_job_concurrency を低く設定すると、クエリごとに割り当てられるスロットの最小数が増加します。これにより、特に複雑なクエリにおいて、より高速で安定したパフォーマンスが得られることがあります。なお、同時実行の変更は予約レベルでのみ対応しています。
  2. 仕様: 各プロジェクト内で、最大 1,000 のインタラクティブ クエリと 20,000 のバッチクエリを一度にキューに入れることができます。バッチクエリは、インタラクティブ クエリと同じリソースを使用します。
  3. タイムアウト: クエリキュー / ジョブキューそれぞれにタイムアウト値を設定できるようになりました。設定した時間内にクエリの実行を開始できない場合、BigQuery はそのクエリ / ジョブを長時間キューに入れる代わりに、キャンセルを試みます。デフォルトのタイムアウト値は、インタラクティブの場合は 6 時間、バッチの場合は 24 時間であり、組織またはプロジェクト レベルで設定できます。

詳細については、クエリキューのドキュメントをご覧ください。

-データおよび分析担当プロダクト マネージャー Larry Henderson

-ソフトウェア エンジニア Justin Lin

投稿先