Snowflakeは何千という企業を支えるデータバックボーンであり、ビジネスバリューの実現に必要なデータへのアクセスやガバナンスを提供しています。しかしながらデータアプリケーションや組み込み型アナリティクスの中には、インタラクティブなユースケースに対し、特定の課題が生じる場合があります。従来、このようなソリューションに必要なスループットや速度を確保するには追加のキャッシュレイヤーが必要だったため、コスト増やアーキテクチャの複雑化につながっていました。

このようなインタラクティブなユースケースをサポートするため、本日、当社の伸縮性の高いパフォーマンスエンジンがさらに改善されたことをご報告いたします。同時実行性、スループット、実行速度における大幅な向上も含まれた今回のアップデートが、この度公開プレビューにて利用開始となりました。

プライベートプレビューでは、サイバーセキュリティ会社のHUMANが、同社のアーキテクチャを簡素化し、インタラクティブなダッシュボードのSnowflakeへの移行を可能にしました。これにより、時間単位から分単位へとデータ鮮度が向上し、クエリの最大レイテンシーも1分以上から2秒未満へと低減されました。Snowflake BUILD 2021では、HUMAN社プラットフォームエンジニアリング担当バイスプレジデントであるSwati Baradia氏が、ボットの特定やアドフラウドの防止のために同社のHuman Verification Engineがいかにして何兆ものインタラクションを処理しているのか、また、各顧客がカスタマイズされたインサイトを得られるようにいかにしてダッシュボードにより多くの情報を表示させているか、について話してくれました。

Baradia氏は次のように語っています。「Snowflakeにより、取得したすべてのデータが作成から20分以内に利用可能になるというエコシステムの構築が可能となりました。これは従来より2時間半以上もの時間の短縮になります。データ鮮度が高まったことで、アクティブな脅威をより迅速に検知できるようになりました。」

カリフォルニア州公衆衛生局(CDPH)およびカリフォルニア州技術局(CDT)もまた、Digital COVID-19 Vaccine Record(デジタル新型コロナウイルスワクチン接種記録)ポータルを開設する際、改善された同時実行性やレイテンシーの恩恵を受けており、数百万ものカリフォルニア州住民にワクチン接種電子証明書を迅速に発行することができました。CDTはポータルコードをGitHubで共有しており、コロラド州を始め、他の州での使用につながっています。

同時実行性およびレイテンシーの向上:どのように実現したか

インタラクティブなユースケースのための今回の改善は、以下によって実現されました。

  • クエリの同時実行を扱うコアエンジンの再設計
  • ポイントルックアップやアグリゲーションを含む、頻繁に使用されるデータアクセスパターンの最適化

ポイントルックアップとは、ユーザーが検索キーや他の演算子を使って少数のレコードを検索するクエリのことです。例えば、セッションIDや時間範囲を使用してWebページクリックについて検索する場合です。

一方、アグリゲーションとは、カウント、集計、最大の算出などの実行で、グルーピングと主に実施される場合もあります。アグリゲーションの例としては、特定のセッションIDによるWebページクリック数のカウントする場合や、同じIDについてページURLでのグルーピングを行ったうえでWebページクリック数をカウントする場合などです。

顧客による新たなインタラクティブワークロードの構築や既存ワークロードの改善をサポートするために、私たちはクエリのプロセッシングインフラストラクチャーのあらゆる部分を分析し、レイテンシーや同時実行性の向上に努めました。

Snowflake内のクエリは以下のフェーズで実行されます(図1参照):

  • セットアップ:クライアントアプリケーションがSnowflakeにクエリを送信すると、最初のリソースが割り当てられます。
  • コンパイル:送信されたクエリステートメントを解析し、クエリの実行計画が策定されます。
  • スケジューリング:Snowflakeにより、クエリの実行に必要なリソースが仮想ウェアハウス内に存在するかどうかが確認されます。十分なリソースがあれば、クエリは実行フェーズに進みます。リソースが不足している場合、クエリはキューに入れられます。
  • 実行:このフェーズでは、データへのアクセス、テーブルの結合、演算子によるデータのフィルタリング、アグリゲーションの実行が行われ、リクエストを送信したクライアントアプリケーションに結果が返されます。
  • キューイング:実行に必要なリソースが不足していた場合、クエリは待機状態(キューイング)になる場合があり、実行に向けて再度スケジューリングフェーズに戻されます。

図1:クエリ実行の5つのフェーズ

今回はスケジューリングフェーズに大幅な変更を実施し、メタデータアクセスを迅速化し、実行リソースの割り当てアルゴリズムをきめ細かく調整しました。これにより、特にマルチクラスタウェアハウスでの同時実行性が大幅に向上しました。また、クエリの開始時間も短縮しました。これは、とりわけ100ミリ秒に満たない短時間タスクに大きく影響します。ほとんどのクエリについてコンパイル時間が最大15%短縮され、IF-THEN-ELSEステートメントの実行やString比較も最適化し、これらの実行時間を最大50%短縮しました。このような改善により、Snowflakeで実行されるあらゆるタイプのクエリやワークロードがメリットを享受していますが、特に、短時間クエリや同時実行性の高いインタラクティブなユースケースで非常に有効となっています。

レイテンシーと同時実行性の向上により、Snowflakeの検索最適化サービスによるメリットも拡大します。検索最適化サービスでは、ポイントルックアップクエリのレイテンシーが大幅に低減され、さらに同時進行性の向上が加わったことで、ウェアハウス内の同時実行レベルが高い場合でもルックアップの高速処理が可能となります。

定量化:性能の詳細な分析

インタラクティブなユースケースにおける向上点を検証するために、変更の前後でSnowflakeの性能を評価しました。検証には、店舗での売上、返品、在庫の情報を含むテーブルが格納された10TBのTPC-DSデータセットを使用し、性能評価のために3つのタイプ(グローバルアグリゲーション、グルーピング、アグリゲーション)のクエリを定義しました。Snowflakeの結果セットのキャッシュの再利用を防ぎ、より厳しい検証を実施できるように、これらのクエリは、日付、店舗、その他のパラメータをさまざまに変更して実行されました。10TBデータセットに格納された最大サイズのテーブルは、290億のレコードが格納されたStore_Sales(店舗売上)です。

実際のインタラクティブなユースケースで一般的であるように、クエリは、5年の全期間より狭められた時間範囲の店舗売上データにアクセスしました。そのため、Snowflakeは、以前にアクセスしたデータのいくつかをローカルデータキャッシュにキャッシュすることができるため、クエリのライフサイクルを部分的に高速化できます。結果として、約3億2000万のStore_Salesのレコードがローカルにキャッシュされました。

クエリ1:グローバルカウント(アグリゲーション)

クエリの動作:1日の全店舗の売上を合計。

select sum(ss_quantity), sum(ss_list_price), sum(ss_sales_price), sum(ss_net_profit)

from store_sales, date_dim

where ss_sold_date_sk = d_date_sk

and d_date = $randomDate 

クエリ2:グルーピングおよびカウンティング(アグリゲーション)

クエリの動作:30日間にわたる100店舗の売上を店舗別に集計。

select ss_store_sk, sum(ss_quantity), sum(ss_list_price), sum(ss_sales_price), sum(ss_net_profit)

from store_sales, date_dim

where ss_sold_date_sk = d_date_sk

and d_date between $randomDate and ($randomDate + 30)

and ss_store_sk between $randomStore and ($randomStore +100)

group by ss_store_sk

クエリ3:ポイントルックアップ

クエリの動作:特定の製品およびチケット番号に対応する売上レコードの検索。

select ss_ticket_number, ss_store_sk, ss_quantity, ss_list_price, ss_sales_price, ss_net_profit

from store_sales

where ss_ticket_number = $randomTicketNumber

and ss_item_sk = $item_sk

性能の向上および検索最適化サービスの有効化前後に、同じテストスイートを実行しました。両方のケースにおいて、8人から始まったクライアント接続が80人まで増え続けた際のレイテンシーとスループットを検証しました。実際のインタラクティブダッシュボードでは、これは、何百人ものユーザーによるダッシュボードの同時使用に相当します。

レイテンシー改善の定量化

レイテンシーの改善は絶大なものでした。改善前は、仮想ウェアハウスへのロードが増えると3つのクエリすべてでレイテンシーも増加する傾向が見られました。改善後は、同じ仮想ウェアハウス(追加リソースなし)で、最大の同時実行レベルにおいても、同じ処理速度を維持することができました。

最大の同時実行レベル(80スレッド)の「グローバルカウント」クエリ1のレイテンシーは1.1秒から0.25秒(4倍)まで短縮されました(図2参照)。「グルーピングおよびカウンティング」アグリゲーションクエリ2のレイテンシーは、1.25秒から0.5秒(2.7倍)まで短縮されました(図3参照)。

図2:異なる同時実行レベルにおけるアグリゲーションクエリ1のレイテンシー(2021年5月と2021年11月の比較)

図3:異なる同時実行レベルにおけるアグリゲーションクエリ2のレイテンシー(2021年5月と2021年11月の比較)

最新の最適化を実施する以前は、同時実行レベルが高いときのポイントルックアップクエリ3は5秒以上要していました。同時実行最適化の実施後は、すべての同時実行レベルにおいてクエリ処理時間は20%短縮されました。Store_Salesテーブル上で検索最適化サービスを有効化すると、個々のクライアントにおいてほとんど一貫した0.5秒のレイテンシーを達成することができました(図4参照)。

図4:同時実行および検索最適化サービス有効/無効時の、異なる同時実行レベルにおけるポイントルックアップクエリ3のレイテンシー(2021年5月と2021年11月の比較)


スループット向上の定量化

改善されたエンジンおよび検索最適化サービスの双方を実装することによりスループットの向上という効果も得られました。これらの改善前では、多くのクライアントがクエリを送信した際も、ウェアハウスのスループットは緩やかに増加するのみでした(図5参照)。

アップデート後のアグリゲーションクエリ1および2のスループットは、クエリを送信するクライアントの増加し従ってスループットもほぼ直線的に増加しました。クエリ1は時間当たり317,000クエリのスループット(QPH)を実現し、これは3.7倍の増加となります(図5参照)。クエリ2は176,000QPHのスループットを実現し、これは以前の2.1倍となります(図6参照)。

図5:異なる同時実行レベルにおけるアグリゲーションクエリ1のスループット(2021年5月と2021年11月の比較)

図6:異なる同時実行レベルにおけるアグリゲーションクエリ2のスループット(2021年5月と2021年11月の比較)

レイテンシーと同様に、同時実行の改善だけでもポイントルックアップクエリ3のスループットにおいても最大30%の向上が見られ、ピーク時には40,000QPHを達成できました。検索最適化サービスの有効により効果が最大化し、スループットは180,000QPHまで増加し、2021年5月時点の6.3倍となりました(図7参照)。

図7:同時実行および検索最適化サービス有効/無効時の、異なる同時実行レベルにおけるポイントルックアップクエリ3のスループット(2021年5月と2021年11月の比較)

公開プレビューに参加する:今すぐ始めましょう

2021年6月の最初の発表以来、100名近い顧客にレイテンシーおよび同時実行改善のプライベートプレビューをお試しいただきました。本日より、これらの改善の最初のセットを公開プレビューにて広くご利用いただけます。

これらのコアエンジン改善の効果を実感するためには、改善点がデフォルトで有効となっている次の4つのデプロイメントのうちのどれかで運用する必要があります。

  • AWS ap-southeast-1(シンガポール)
  • AWS eu-west-1(アイルランド)
  • AWS eu-central-1(フランクフルト)
  • Azure 西ヨーロッパ 

その他のデプロイメントにおける仮想ウェアハウスは、2022年上旬に自動的にアップグレードされ、これらの改善によるメリットを享受できるようになります。異なるデプロイメント内の仮想ウェアハウスで有効化したい場合、Snowflakeアカウントチームにご連絡ください。

これらの改善点を有効化する前後での性能を比較したい場合、当社のガイドのアカウントの使用ビューのクエリの項をご参照ください。

私たちは、Snowflakeの性能を向上し、顧客の皆様のメリットにつながるよう、今後も尽力して参ります。Snowflakeの今後のアップデートにご注目ください。