Snowflake の仮想ウェアハウスの概念・機能まとめ #SnowflakeDB

2019.10.28

こんにちは。大場です。

Snowflake では、これから触れる方向けに Getting Started Videos が用意されています。

この記事では、3つめの「Introduction to Virtual Warehouses」の動画に沿って、仮想ウェアハウスの基本的な概念と機能をまとめて紹介したいと思います。

仮想ウェアハウス

仮想ウェアハウスは、クエリの処理や DML 操作の実行に使用されるコンピュートリソースです。Snowflake では、データのロードや分析など、さまざまな用途に応じた複数のウェアハウスを作成して使用します。例えば、複数のウェアハウスを使用して、本番環境とは別に開発環境とテスト環境を維持することもできます。

ウェアハウスでは extra small, small, medium などさまざまなサイズがあり、このサイズによって内部サーバーの数が決まっています。各クラスターとウェアハウスは、Web インターフェイスまたは SQL を使用して作成および管理ができます。

手順の紹介

ウェアハウスの作成

ウェアハウスページの Web インターフェースから Create ボタンをクリックして実際に作成してみます。

ウェアハウスに意図した目的を特定できるわかりやすい名前を付けてサイズを選択します。基本的にはこれでおしまいです。ウェアハウスを作成するために必要な操作はこれだけです。

クラスタの数の設定

利用中のアカウントにおいてマルチクラスターウェアハウスが有効になっている場合には、ウェアハウスにおけるクラスターの最大数と最小数が設定できます。

Auto Suspend と Auto Resume

Auto Suspend および Auto Resume を使用してウェアハウスの動作を制御できます。ウェアハウスは稼働時間に応じた従量課金となりますので、これらの機能は、クレジットの節約とコストの管理に役立ちます。

  • Auto Suspend
    • 指定された期間アイドル状態になった際ににウェアハウスを停止します。
  • Auto Resume
    • クエリが送信されると、一時停止したウェアハウスを開始します。

作成において

このビデオでは、デフォルト設定で、X-Large のマルチクラスターウェアハウスを作成、Auto Suspend の時間設定を10分、Auto Resume を有効という設定で作成が進められます。設定をしてFinish ボタンをクリックすると Snowflake がウェアハウスを作成されてサーバーのプロビジョニングを開始します。

サーバーがプロビジョニングされると、ウェアハウスを使用する準備が整います。プロビジョニングには通常数秒しかかかりませんが、大きなウェアハウスでは最大5分ほどかかる場合があります。

どのサイズのウェアハウスをどのように選択するかですが、データサイズやクエリの複雑さなどの要因がクエリのパフォーマンスに影響します。medium から Large など、ウェアハウスのサイズを1つ大きくするとサーバーの数が2倍になります。基本的に、クエリはウェアハウスのサイズ変更によって線形的にスケールしますが、利用の際には、異なるサイズのウェアハウスを使用して Snowflake にデータをロードし、代表的なクエリセットを実行してみることをお勧めします。これにより、独自のデータを使用してクエリのパフォーマンスを直接評価できます。

なお、ウェアハウスに同時に処理できる十分なリソースがない場合、送信されたすべてのクエリはキューに入れられ、リソースが使用可能になると完了します。

リサイズ or マルチクラスタ構成

Snowflakeは、以下の2つのオプションを提供します。

  • ウェアハウスのリサイズ
  • マルチクラスタ

クエリの処理に時間がかかりすぎる、大量のファイルのロードなどでデータのロードが遅くなる、といったケースではウェアハウスのサイズを大きくします。Web インターフェース、あるいは SQL を使用していつでもウェアハウスのサイズを変更できます。リサイズ中に処理されているクエリは追加されたリソースを利用しませんが、新しいクエリは、プロビジョニングされるとすぐに追加のサーバーリソースを使用します。

マルチクラスターウェアハウスは、複数のサーバークラスターを使用して、ピーク時や営業時間外など、変動する同時クエリ数を処理します。負荷が増加すると、ウェアハウスはより多くのクラスターを自動的に開始し、クエリのキューイングを防ぎます。追加のクラスターが不要になったら、シャットダウンします。

なお、マルチクラスタウェアハウスは、Snowflake Enterprise Editionの機能です。※ 確かにトライアルアカウントでウェアハウス作成の画面を見るとクラスタ数の選択画面はありませんでした(以下はトライアルアカウントでの設定画面です)。

ざっくりまとめると以下のアプローチとなります。

  • 実行速度の遅いクエリ、データロード時間への対応 → リサイズ
  • クエリの実行数への対応 → マルチクラスタ(動的にクラスタ数を調整できる)

負荷のモニタリング

Snowflakeでは、クエリの負荷を監視できます。Webインターフェースで、ウェアハウスの名前をクリックして、過去2週間のすべてのクエリプロセスおよびキューに対するウェアハウスの平均負荷を表示します。ページには、クエリの負荷と、表示ウィンドウの長さに応じて5分または1時間の間隔が表示されます。

ウェアハウスのクレジット

ウェアハウスのコストは、クレジットというものを用いていて、稼働時のみこのクレジットを消費する、そして消費したクレジット分のみ費用を支払う形になります。稼働中のウェアハウスが消費するクレジットの数は、そのサイズとクラスター数、および稼働時間に基づいています。

ウェアハウスが再開されるか、サイズが大きくなるたびに1分間の使用と考えます。最初の1分後からは、課金が1秒あたりに計算されます。1秒あたりの請求と自動サスペンドにより、クレジットの消費を心配することなく、クエリのロードに最適なウェアハウスサイズを選択できます。Large または X-Large などのウェアハウスから始めてクエリの実行方法に基づいてサイズを増減することをお勧めします。

さいごに

ということで、動画に沿って仮想ウェアハウスの基本的な概念と機能をご紹介しました。仮想ウェアハウスの詳細については Virtual Warehouse | Snowflake Documentation に記載がありますので参考にしていただければと思います。それではまた。