Databricks SQLにおけるキャッシュの理解：UI、結果、ディスクキャッシュ

[Understanding Caching in Databricks SQL: UI, Result, and Disk Caches \- The Databricks Blog](https://www.databricks.com/blog/understanding-caching-databricks-sql-ui-result-and-disk-caches)の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

キャッシュは、同じデータを複数回再計算したり、取得することを避けることで、データウェアハウスシステムのパフォーマンスを改善するための重要なテクニックです。Databricks SQLでは、キャッシュがクエリー実行を劇的に高速化し、ウェアハウスの使用量を最小化し、コストの削減、より効率的なリソース使用率に繋がります。

本書では、キャッシュのメリットを解説し、DBSQLの3つの種類のキャッシュの詳細に踏み込みます：ユーザーインタフェースのキャッシュ、結果のキャッシュ(ローカルとリモート)、ディスクキャッシュ(以前のDeltaキャッシュ)です。

# キャッシュのメリット

キャッシュによって、以下のようなデータウェアハウスにおける数多くのメリットを提供します:

1. **スピード:** メモリーやその他の高速ストレージメディアにクエリー結果や頻繁にアクセスされるデータを格納することで、キャッシュは劇的にクエリー実行時間を削減することができます。システムは再計算するのではなくキャッシュされた結果をクイックに取得できるので、このストレージは特に繰り返されるクエリーにおいてメリットを提供します。
1. **クラスター使用量の削減:** キャッシュは以前計算された結果を再利用するので、追加の計算リソースの需要を最小化します。ウェアハウスの全体的な稼働時間と追加の計算クラスターの需要を削減することで、コスト削減とより良いリソース割り当てを実現します。

# DBSQLキャッシュの種類

![](https://cms.databricks.com/sites/default/files/inline-images/db-532-blog-img-1.png)

1. **Databricks SQL UIキャッシュ**

    Databricks SQL UIキャッシュは、最新のクエリー、ダッシュボード結果への迅速なアクセスを提供することで、Databricks SQL UIにおけるユーザー体験を最適化することを狙いとしています。ユーザーが最初にダッシュボードやSQLクエリーを開いた際、キャッシュは最新のクエリー結果を表示するので、計算リソースへの負荷を削減します。これによって、UIにおけるレスポンス時間の高速化やよりシームレスな体験を提供します。

    また、UIキャッシュはスケジュール実行の管理でも重要な役割を担います。リフレッシュがスケジュールされると、キャッシュストアは更新されたデータを格納し、ユーザーがダッシュボードを訪れた際に最新の情報に即座にアクセスできるようにします。この効率的なプロセスは、頻繁にアクセスするクエリーや可視化に容易にアクセスできるようにすることで、さらにユーザー体験をブーストします。このキャッシュは最大7日間のライフサイクルを持っており、背後のテーブルが更新されると無効化されます。

1. **結果のキャッシュ**

    結果のキャッシュには、クエリー結果をメモリー、リモートのストレージメディアに格納することでクエリー性能を改善するために協働するローカルとリモート結果キャッシュの両方があります。

    1. ローカルキャッシュ

        ローカルキャッシュはクラスター稼働中にクエリーの結果を格納するインメモリーのキャッシュであり、キャッシュが満杯になると古いものから削除されます。このキャッシュは繰り返しのクエリーのスピードアップに有用であり、同じ結果の再計算の必要性を排除します。しかし、クラスターが停止、再起動されるとキャッシュはクリアされ、全てのクエリー結果は削除されます。

    1. リモート結果キャッシュ **2023 Q1に登場**

        リモート結果キャッシュは、クラウドストレージに永続化することでクエリー結果を保持するサーバレスのみで利用できるキャッシュシステムです、リモート結果キャッシュは、計算リソースが稼働中の時のみクエリー結果が保持されるインメモリーキャッシュの一般的なペインポイントに対応するものです。リモートキャッシュは、Databricksワークスペースの全てのウェアハウスにおける永続化共有キャッシュです。

        リモートキャッシュへのアクセスには稼働中のウェアハウスが必要となります。クエリーを処理する際、クラスターは最初にローカルキャッシュを参照し、必要であればリモートキャッシュを参照します。両方にクエリー結果が格納されていない場合にのみクエリーが実行されます。

        リモート結果キャッシュはODBC / JDBCクライアント、SQLステートメントAPIで利用できます(今後対象を拡大予定です)。

        ローカル、リモートキャッシュの両方において、背後のテーブルが更新されると、キャッシュは無効になります。そうでない場合、ローカル&リモートキャッシュには、キャッシュエントリー以降、最大24時間のライフサイクルがあります。

1. **以前はDeltaキャッシュと呼ばれていたディスクキャッシュ**

    ディスクキャッシュは、データをディスクに格納することでクエリーパフォーマンスを強化するために設計されており、データ読み取りを高速化します。ファイルが取得された際に、自動でデータは高速な中間フォーマットを用いてキャッシュされます。計算ノードにアタッチされたローカルストレージにファイルのコピーを格納することで、ディスクキャッシュはワーカーの近くにデータを保存することができ、クエリーパフォーマンスの改善につながります。

    この基本的な機能に加え、ディスクキャッシュは自動で背後のデータファイルの変更を検知し、キャッシュが最新の状態にあるようにします。しかし、ディスクキャッシュはローカル結果キャッシュと同じライフサイクル特性を持っていることに注意することが重要です。これは、クラスターが停止、再起動されるとキャッシュがクリアされ、データの再取得が必要になることを意味します。

これらのキャッシュ機構は、クエリー要件や利用可能なリソースに基づいてDatabricks SQLによって自動で配備、管理されます。ユーザーとしては、手動の設定を行う必要はありませんが、これらのキャッシュタイプがどのように動作するのかを理解することで、ご自身のクエリー性能やリソース使用量を最適化する助けとなります。これらのキャッシュの割り当てや管理は、ウェアハウスのTシャツサイズには直接的には依存しません。

# まとめ

キャッシュは、Databricks SQLが提供するお客様のパフォーマンスをブーストするアウトオブボックスのパワフルなテクニックです。UIキャッシュ、クエリー結果キャッシュ、ディスクキャッシュのようなさまざまなキャッシュ機構を提供することで、Databricks SQLは皆様のデータに対して効率的にアクセスでき、シームレスな体験を楽しむことができます。DBSQLチームはこれらのキャッシュレイヤーを改善し、クエリー性能を引き上げ、リソース消費を削減し、進化し続けるデータランドスケープにおいて全体的なシステムの効率性を最適化するための新たな戦略の立案に日々取り組んでいます。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

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