Databricks SQLにおけるパフォーマンスの新たな改善

[New Performance Improvements in Databricks SQL \- The Databricks Blog](https://databricks.com/blog/2021/09/08/new-performance-improvements-in-databricks-sql.html)の翻訳です。

Data + AIサミット2020ヨーロッパで[発表](https://databricks.com/blog/2020/11/12/announcing-the-launch-of-sql-analytics.html)された[Databricks SQL](https://databricks.com/product/databricks-sql)は、データレイクの経済性でデータウェアハウスのパフォーマンスを提供するマルチクラウド[レイクハウス](https://qiita.com/taka_yayoi/items/1ebbce9b76fb923d5e21)アーキテクチャを実現します。我々のビジョンは、データアナリストが目的に特化したSQL UIと人気のBIツールに対する世界クラスのサポートを用いて、レイクハウスから洞察を得て、共有できるように、シンプルかつ使い心地の良いツールを提供するというものです。

この記事は、このビジョン(パフォーマンス、使いやすさ、ガバナンス)を達成するために定期的にもたらしているイノベーションをカバーすることを目的とした一連のブログシリーズの最初の記事です。この記事では、Databricks SQLの一部として行われた最新のパフォーマンス最適化を説明します。

- 同時実行性の高い分析ワークロード
- インテリジェントなワークロード管理
- 並列性の高い読み込み
- Cloud Fetchによるビジネスインテリジェンス(BI)結果取得の改善

# 大規模クエリーの先にある現実世界のパフォーマンス

Databricks SQLの最初のリリースにおいては、劇的なパフォーマンスのメリットから提供をスタートしました。以下に示すように、30TBのTPC-DSにおいて従来のクラウドデータウェアハウスと比較して、最大6倍のコストパフォーマンスを示しました。TPC-DSはデータウェアハウスベンダーによってい定義された業界標準のベンチマークなので、我々はこの結果に非常に誇りを持ちました。

![sql-perf-blog-img-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/27cb28b7-7272-6e3d-fc83-1c5b255a706b.png)
*30TB TPC-DSコストパフォーマンス(低いほど優れています)*

このベンチマークは、ETLワークロードや深い分析ワークロードのような大規模クエリーを良くシミュレートしたものですが、我々のお客様が実行しているものをカバーしていません。だからこそ、我々は現実世界のワークロード、SQLデータクエリーに対して高速かつ予測可能なパフォーマンスを提供するために、この数ヶ月間お客様と密接に作業してきました。

本日プレビューを正式に公開することで、これまでに我々が達成したパフォーマンス改善の結果を共有できることを非常に嬉しく思っています。

# シナリオ1: 同時実行性の高い分析ワークロード

お客様と作業する中で、我々は小規模のデータセットに対して同時実行性の高い分析ワークロードが行われることが一般的であることに気づきました。直感的にこれは納得できることです。アナリストは通常過去のデータよりもより最新のデータにフィルタリングを適用し、作業をする傾向があります。我々は、この一般的なユースケースをより高速にすべきと決断しました。同時実行性を最適化するために、より小規模のスケールファクター(10GB)と32の同時実行ストリームで同じTPC-DSベンチマークを用いました。ここでは、ボットはクエリーの間で休まないので、よりリアルな大規模ユーザーをシミュレートして、システムに継続的にクエリーを送信する32のボットを用いました。

ボトルネックを特定し除外するために結果を分析し、このプロセスを複数回繰り返しました。数百の最適化を行うことで、同時実行性を3倍改善しました！今やDatabricks SQLは、大規模クエリー、多くのユーザーによる小規模クエリー両方に対して、ベストなクラウドデータウェアハウスのいくつかの性能を上回ることができました。

![Databricks-SQL-Perf-Gain-Blog-img-2-1024x588.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6bc9ef30-4870-5f3d-1e29-e64d09a11cee.png)
*32同時実行ストリームにおける10GBのTPC-DSの時間当たりクエリー数(高いほど優れています)*

# シナリオ2: インテリジェントなワークロード管理

しかし、現実世界のワークロードは大規模か小規模なクエリーかという話だけではありません。多くの場合、大規模、小規模なクエリーが混じり合っています。このため、Databricks SQLにおいては、キューイング、ロードバランシングの機能も必要となります。多くのお客様においては、大規模クエリーよりも小規模クエリーのレーテンシーを気にするため、Databricks SQLは大規模クエリーよりも小規模の優先度を上げるデュアルキューイングシステムを使用しています。

![Databricks-SQL-Perf-Gain-Blog-img-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4403ea26-68df-2061-b76e-fe1936bad810.png)
*デュアルキューによる混成クエリーのキューイング、ロードバランス*

# シナリオ3: 並列性の高い読み込み

データが連続的に到着するIoTデータ取り込みのようなストリーミングシナリオにおいて、レイクハウスのいくつかのテーブルが数多くのファイルから構成されることは一般的なことです。レガシーシステムにおいては、実行エンジンがクエリーを実行するよりもこれらのファイルの一覧を取得するのにより多くの時間を要することがあります！また、我々のお客様はデータの新鮮にするために性能を犠牲にしたくないと話をされました。

Databricks SQLにおいて非同期かつ並列性の高いIOを導入できたことを我々は誇りに思っています。クエリーを実行する際、Databricksは現在のブロックを処理している間に、クラウドストレージから次のブロックのデータを自動で読み込みます。これは、小規模ファイル(1MBファイルに対して12倍の性能)や「コールドデータ(キャッシュされていないデータ)」ユースケースに対するクエリー性能を劇的に改善します。
![sql-perf-blog-img-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/62c5e5eb-09b0-ff81-5f08-011f1f95cedb.png)
*小規模ファイルに対する高並列性の読み込み(秒当たりスキャンされる行数)(高いほど優れています)*

# シナリオ4: Cloud FetchによるBI結果取得の改善

クエリー結果が計算された後の最後のマイルは、システムがPowerBIやTableauのようなクライアントにデリバリーするスピードを改善することです。レガシーなクラウドデータウェハウスは、多くの場合リーダーノード(ドライバーノード)に結果を集め、クライアントに結果を返却します。これは、数メガバイト以上の結果を取り込んでいる際、BIツールにおけるエクスペリエンスを大きくスローダウンさせます。

このため、我々は[Cloud Fetch](https://qiita.com/taka_yayoi/items/04c983f20fe5b2e600a6)と呼ばれる新たなアーキテクチャによるアプローチを検討しました。大規模な結果に対しては、Databricks SQLは全ての計算ノードで並列にクラウドストレージに書き込み、クライアントに対して事前サイン済みのURLを用いてファイルのリストを送信します。クライアントはデータをクラウドストレージから並列でダウンロードすることができます。我々は、現実世界のお客様のシナリオにおいて、10倍もの性能改善を報告できることを嬉しく思います！この機能を自動で有効化するために、最も人気のあるBIツールとともに作業しています。

![Databricks-SQL-Perf-Gain-Blog-img-4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/64568c3d-2e38-4eb0-95a4-d02448894fd7.jpeg)
*Cloud Fetchによって高速・広帯域の接続を実現*

# Databricks SQLの内部

これらは、我々がオープンなアプローチを維持しつつ、お使いのデータレイクにベストクラスのSQLパフォーマンスを提供するために、Databricks SQLにもたらした性能改善およびイノベーションのほんの一例です。
![Databricks-SQL-Perf-Gain-Blog-img-5.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5bcbf892-fdb4-2de1-773f-fd13c895a029.jpeg)
*Databricks SQLの内部*

オープンソースの[Delta Lake](https://delta.io/)はDatabricks SQLの基盤となっています。これは、データレイクに対して、ACIDトランザクション、データリネージュ、バージョン管理、[データ共有](https://qiita.com/taka_yayoi/items/f93f1b70fef0f75585be)などデータウェアハウスのメリットをもたらすオープンストレージフォーマットです。

Databricks SQLのコアは、SQLワークロードを高速に実行するために開発されたDatabricks上の新たなネイティブベクトル化エンジンである[Photon](https://databricks.com/product/photon)です。詳細に関しては、こちらの[ブログ記事](https://qiita.com/taka_yayoi/items/a22a45dcda8ac1a42936)、あるいは[Radical Speed for SQL Queries on Databricks: Photon Under the Hood](https://databricks.com/session_na21/radical-speed-for-sql-queries-on-databricks-photon-under-the-hood)をご覧ください。

そして、最後になりますが、我々は、データチーム、アナリスト、データサイエンティスト、SQL開発者がDatabricks SQLでお使いのツールを容易に活用できるように、数々のソフトウェアベンダーと協働してきています。これまでに説明した同時実効性の高い短時間のクエリー性能をブーストしつつも、シングルサインオンを用いて認証を行い、容易に接続してデータを取り出せるようにしました。

# 次のステップ

これは始まりに過ぎません。我々はヒアリングを行い、サービスに対してさらにイノベーションを追加していく予定です。すでに、Databricks SQLは[Atlassian](https://youtu.be/Xo1U617T-mU)や[Comcast](https://databricks.com/session_na21/sql-analytics-powering-telemetry-analysis-at-comcast)のような数多くのお客様に数多くの価値を提供しております。皆様からのフィードバックも心待ちにしています！

すでにDatabricksをお使いのユーザーであれば、スタートガイド([Azure Databricks](https://docs.microsoft.com/en-us/azure/databricks/scenarios/sql/)/[AWS](https://docs.databricks.com/sql/get-started/index.html))を参考に、すぐにDatabricks SQLを利用いただけます。まだ、Databricksをお使いでないのであれば、[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)からフリートライアルをスタートしてみてください。

最後に、Databricksのレイクハウスプラットフォームをより学びたいのであれば、我々のウェビナー[Data Management, the good, the bad, the ugly](https://databricks.com/p/webinar/data-management-the-good-the-bad-the-ugly)をご覧ください。さらに、ハンズオンで体験いただけるように、我々はDatabricks SQLのオンライン[トレーニング](https://academy.databricks.com/)を提供しています。詳細はDatabricks担当にお問い合わせください。どのようにDatabricks SQLを活用したいのか、データレイクにおけるBI、データ分析をどのようにシンプルにできるのかを是非聞かせていただければと思います。

<iframe width="560" height="315" src="https://www.youtube.com/embed/oz7XNx0YUw8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)