Original: Understanding Caching in Databricks SQL: UI, Result, and Disk Caches
翻訳: junichi.maruyama
キャッシングは、同じデータを何度も再計算またはフェッチする必要性を回避することで、データウェアハウスシステムのパフォーマンスを向上させるために不可欠な技術です。Databricks SQLでは、キャッシングによってクエリの実行を大幅に高速化し、ウェアハウスの使用量を最小限に抑えることができるた め、コストの削減とリソースの効率的な利用が可能になります。
この記事では、キャッシングの利点を探り、DBSQLの3種類のキャッシング:ユーザー インターフェイス キャッシュ、リザルトキャッシュ(ローカルおよびリモート)、ディスク キャッシュ(旧デルタ キャッシュ)を掘り下げて説明します。
キャッシングのメリット
キャッシングは、データウェアハウスにおいて、以下のような多くの利点をもたらします:
- スピード:クエリ結果や頻繁にアクセスするデータをメモリなどの高速な記憶媒体に保存することで、キャッシングはクエリの実行時間を劇的に短縮することができます。このストレージは、システムが再計算する代わりにキャッシュされた結果を素早く取り出すことができるため、繰り返しの多いクエリに特に有効です。
- クラスター使用量の削減: キャッシュは、以前に計算された結果を再利用することで、追加の計算リソースの必要性を最小限に抑えます。倉庫全体の稼働時間が短縮され、追加の計算クラスタの需要が減るため、コスト削減とリソース配分の改善につながります。
DBSQLキャッシュの種類
- Databricks SQL UI キャッシュ
Databricks SQL UI Cache は、最新のクエリやダッシュボードの結果に素早くアクセスすることで、Databricks SQL UI のユーザー体験を最適化することを目的としています。ユーザーがダッシュボードやSQLクエリを最初に開いたとき、キャッシュは最新のクエリ結果を表示し、コンピューティングリソースへの負担を軽減します。これにより、応答時間が短縮され、UIでのシームレスな体験が可能になります。
UI Cacheは、スケジュール実行を管理する上でも重要な役割を担っています。更新がスケジュールされると、キャッシュは更新されたデータを保存し、ユーザーがダッシュボードにアクセスしたときに最新の情報にすぐにアクセスできるようにします。この効率的な処理により、頻繁にアクセスするクエリやビジュアライゼーションに簡単にアクセスできるようになり、ユーザーエクスペリエンスをさらに向上させます。キャッシュのライフサイクルは最大7日間で、基礎となるテーブルが更新されるとキャッシュは無効化されます。
- リザルトキャッシュ
リザルトキャッシュには、ローカルキャッシュとリモートリザルトキャッシュがあり、これらは連携してクエリ結果をメモリやリモートストレージ媒体に保存することで、クエリパフォーマンスを向上させます。
a. ローカルキャッシュ
ローカルキャッシュはメモリ内のキャッシュで、クラスタの寿命、またはキャッシュが一杯になった時のどちらか早い方の期間、クエリ結果を保存します。このキャッシュは、同じ結果を再計算する必要がないため、繰り返し行われるクエリを高速化するのに便利です。ただし、クラスタが停止または再起動されると、キャッシュは消去され、すべてのクエリ結果が削除されます。
b. リモートリザルトキャッシュ *2023年第1四半期に新登場*
リモートリザルトキャッシュ は、クエリ結果をクラウドストレージに永続化することで保持する、サーバーレス専用のキャッシュシステムです。リモートリザルトキャッシュは、クエリ結果をインメモリでキャッシュする際によくあるペインポイントに対処するもので、コンピュートリソースが稼働している間だけ利用可能な状態を維持します。リモートキャッシュは、Databricksワークスペース内のすべてのウェアハウスで共有される永続的なキャッシュです。
リモートキャッシュにアクセスするには、実行中のウェアハウスが必要です。クエリを処理する際、クラスタはまずローカルキャッシュを検索し、必要に応じてリモートリザルトキャッシュを検索します。クエリ結果がどちらにもキャッシュされていない場合にのみ、クエリーが実行されます。
リモートリザルトキャッシュは、ODBC / JDBCクライアントとSQLステートメントAPIを使用したクエリで利用できます(詳細は近日公開予定)
ローカルキャッシュとリモートリザルトキャッシュの両方で、ベースとなるテーブルが更新されると、キャッシュは無効化されます。それ以外の場合、ローカル&リモートキャッシュの最大ライフサイクルは24時間で、キャッシュの入力から始まります。
- ディスクキャッシュ (以前はデルタキャッシュと呼ばれていました)
ディスクキャッシュは、データをディスク上に保存し、データの読み込みを高速化することで、クエリのパフォーマンスを向上させるように設計されています。データは、高速な中間フォーマットを利用して、フ ァイルを取得する際に自動的にキャッシュされます。ファイルのコピーをコンピュートノードに接続されたローカルストレージに保存することで、データがワーカーに近い位置にあることを保証し、クエリパフォーマンスを向上させる。
ディスクキャッシュは、その主要な機能に加えてベースとなるデータファイルの変更を自動的に検出し、キャッシュを最新の状態に保つことができます。しかしDisk CacheはLocal Result Cacheと同じライフサイクル特性を持つことに注意することが重要です。つまり、クラスタが停止または再起動されると、キャッシュはクリーニングされ、再投入が必要になります。
これらのキャッシュ機構は、クエリ要件と利用可能なリソースに基づいて Databricks SQL が自動的に割り当て管理します。ユーザーとして手動で設定を行う必要はありませんが、これらのキャッシュタイプの仕組みを理解することで、クエリのパフォーマンスとリソースの利用を最適化することができます。これらのキャッシュの割り当てと管理は、SQLウエアハウスのサイズに直接依存しません。
結論
キャッシングは、Databricks SQL が顧客のパフォーマンスを向上させるためにすぐに提供する強力な技術です。UI Cache、Query Result Cache、Disk Cache などの様々なキャッシュメカニズムを提供することで、Databricks SQL はユーザーがデータに効率的にアクセスし、シームレスなエクスペリエンスを享受できるようにします。DBSQLチームは、これらのキャッシュ層を改善し、クエリパフォーマンスの向上、リソース消費の削減、そして進化し続けるデータ環境に対するシステム全体の効率を最適化する新 しい戦略を開発するために常に取り組んでいます。