Snowflakeのアーキテクチャとしては、3層レイヤーで構成されていますが、その中のクエリの実行を担当している「仮想ウェアハウス」について今回は解説していきます。
仮想ウェアハウス概要
Snowflakeのクエリの実行を担当する仮想ウェアハウスですが、Snowflakeの課金体系としては、この仮想ウェアハウスの稼働時間が大きな割合をしめています。基本的には、このウェアハウスの稼働時間に応じて費用が請求される、という仕組みとなっています(その他にもストレージやデータ転送部分でも費用が発生しますが、占める割合としては大きくありません)。
仮想ウェアハウスは、常に起動状態にすることもできますが、普段は停止しておいて、クエリを実行しようとすると、自動的に起動するような設定が可能です。また、クエリを実行し終えれば、仮想ハウスは可及的速やかに停止したいところです。ここも費用低減のために、仮想ウェアハウスを自動で停止する機能が備えられています。
次に、仮想ウェアハウスは作成する際に、自動停止時間やサイズ、マルチクラスタの設定などを行うことができます。この「サイズ」によってコンピューティングリソースが割り当てられますが、これには「CPU」「メモリ」「SSD」が含まれています。CPUは、処理に必要な頭脳の役目を担い、メモリやSSDは処理情報のキャッシュや一次データの保管場所などの役目を担います。つまり、このコンピューティングリソースが大きくなれば、処理性能も向上する、ということになります。
なお、このウェアハウスサイズを大きくすることを「スケールアップ」、マルチクラスタ設定を行うことを「スケールアウト」と呼びます。
まず、仮想データウェアハウスの中心となるウェアハウスのサイズについて解説します。
ウェアハウスのサイズ
Snowflakeのウェアハウスサイズは「Tシャツ」のサイズと同じようにXSから4XLに向けて性能が向上していきます。
ウェアハウスサイズ | クレジット/時間 |
---|---|
XS | 1 |
S | 2 |
M | 4 |
L | 8 |
XL | 16 |
2XL | 32 |
3XL | 64 |
4XL | 128 |
ここで、「クレジット」は、Snowflakeを使用する際に課金される単位のことです。
ウェアハウスのサイズを上げることで、処理する時間は短くなりますが、その分消費されるクレジット数も上がり、費用がかさみます。どのくらいの処理に対して、どのウェアハウスサイズが適切か、というベストプラクティスはないため、実際の処理に応じたウェアハウスサイズを選択する必要があります。ただし、どのような考え方で選定して行くか、というベストプラクティスはありますので、別途ご紹介致します。
仮想ウェアハウスの処理能力をアップさせるスケールアップとスケールアウト
Snowflakeでは、スケールアップは明示的に行う必要がありますが、スケールアウトは事前に設定しておけば、自動的に行うことが可能です。
スケールアップ
スケールアップとは、複雑なクエリや大規模なデータセットに対するパフォーマンスの向上を図るためにウェアハウスサイズを変更させることです。
ウェアハウスのサイズが大きくなるとうことは、1クラスタ内に含まれるCPU、メモリ、SSDの数が増えるため大規模データセットや複雑なクエリに対する処理時間が短縮されます。
例えば、XSサイズで一時間かけて読み込んだデータを、Sサイズでは30分、Mサイズでは15分で読み込むことができる。(ただし、必ずしも1サイズ上がることに読み込み時間が半減するわけではありません)
複雑なクエリを実行する際は、スケールアップが有効です。つまり、スケールアップにより使用できるメモリの量などが多くなるため、メモリの使用量が多くなるような複雑なクエリでは高速化を図ることができます。
スケールアップを行っても、同時に処理できるクエリの数は変わりません。増えるのは、単位時間あたりのクエリの処理数、となります。つまり、複数のクエリを同時に実行したい、といった場合は「マルチクラスタウェアハウス」の設定を行う必要があります。
なお、自動スケールアップ機能はないため、最適なウェアハウスサイズへのスケールアップは、実際の環境に応じて決めていく必要があります。
スケールアウト
スケールアウトは、マルチクラスタウェアハウスの設定を行うことで対応できます。スケーリングする際の最小クラスタ数、最大クラスタ数、ポリシーなどの設定が可能です。実際に立ち上がっているクラスタの数分のクレジットを消費するため、利用の際は慎重に設定してください。多くのSQL処理を行う際は、スケールアップよりスケールアウトが有効です。
ウェアハウスのタイプ
ウェアハウスのタイプには2種類あります。通常はスタンダードで十分ですが、特殊なワークロードを実行する場合は「Snowpark最適化」を選択します。
スタンダード
標準的なワークロードを実行するためのウェアハウスです。
Snowpark最適化
メモリを多く積んだコンピューティングリソースです。主に、機械学習などのメモリを多く必要とするワークロードに最適化されています。非常に多くのクレジットを消費するため、設定および利用する際は慎重に利用してください。
終わり
仮想ウェアハウスの概要について説明してきました
仮想ウェアハウスはコンピューティングリソースのクラスターを示し、CPU、メモリ、SSDの一つの集合体になります。仮想ウェアハウスのサイズはTシャツサイズのようにサイズが上がることに性能が向上していきます。仮想ウェアハウスの性能を向上させる方法はサイズを上げる方法とマルチクラスタ化させる2種類あります。性能向上に対するベストプラクティスはありません。トライアンドエラーで自身にあった仮想ウェアハウス構成をみつけてください。
以上です。