次の方法で共有


Microsoft Fabric のインテリジェント キャッシュ

インテリジェント キャッシュ機能はバックグラウンドでシームレスに動作し、ショートカットを使用して OneLake または Azure Data Lake Storage (ADLS) Gen2 ストレージから読み取るときに、Microsoft Fabric での Apache Spark ジョブの実行を高速化するためにデータをキャッシュします。 また、基礎となるファイルへの変更を自動的に検出し、キャッシュ内のファイルを自動的に更新して、最新のデータを提供します。 キャッシュ サイズが上限に達すると、キャッシュは読み取りが最も少ないデータを自動的に解放して、より新しいデータ用の領域を確保します。 この機能により、使用可能なキャッシュに格納されているファイルの後続の読み取り時のパフォーマンスは最大 60% 向上し、総保有コストが削減されます。

Microsoft Fabric の Apache Spark エンジンは、レイクハウスからファイルまたはテーブルにクエリを実行するときに、リモート ストレージを呼び出して、基礎となるファイルを読み取ります。 同じデータを読み取るクエリ要求ごとに Spark エンジンは毎回リモート ストレージを呼び出す必要があります。 この冗長なプロセスにより、合計処理時間に待機時間が追加されます。 Spark にはキャッシュ要件があり、待機時間を最小限に抑えて全体的なパフォーマンスを向上させるために、キャッシュを手動で設定および解放する必要があります。 ただし、この要件により、基礎となるデータが変更された場合に、データが古くなる可能性があります。

インテリジェント キャッシュは、データ ファイルが SSD にキャッシュされている各 Spark ノードに割り当てられたキャッシュ ストレージ領域内への各読み取りを自動的にキャッシュすることで、プロセスを簡素化します。 ファイルに対する要求が行われるたびに、ファイルがローカル ノード キャッシュに存在するかどうかを確認し、リモート ストレージからのタグを比較してファイルが古いかどうかを判断します。 ファイルが存在しない、またはファイルが古い場合は、Spark によってファイルが読み取られてキャッシュに格納されます。 キャッシュがいっぱいになると、より新しいファイルを格納できるように、最終アクセス時刻の最も古いファイルがキャッシュから削除されます。

インテリジェント キャッシュはノードごとに 1 つ用意されます。 中規模のノードを使用し、その単一ノード上で 2 つの小さな Executor を実行している場合、その 2 つの Executor は同じキャッシュを共有します。 また、このデータ ファイル レベルのキャッシュにより、複数のクエリが同じデータまたはデータ ファイルにアクセスしている場合に、同じキャッシュを使用できるようになります。

動作方法

Microsoft Fabric (ランタイム 1.1 および 1.2) では、キャッシュ サイズが 50% のすべてのワークスペースのすべての Spark プールに対して、既定でインテリジェント キャッシュが有効になっています。 使用可能なストレージの実際のサイズと各ノードのキャッシュ サイズは、ノード ファミリとノード サイズによって異なります。

インテリジェント キャッシュを使用するタイミング

この機能は次の場合にメリットがあります。

  • ワークロードでは、同じファイルを複数回読み取る必要があり、ファイル サイズはキャッシュに収まっています。

  • ワークロードは、Delta Lake テーブル、Parquet、または CSV ファイル形式を使用します。

次の場合には、インテリジェント キャッシュの利点がわかりません。

  • キャッシュ サイズを超えるファイルを読み取っています。 その場合、ファイルの先頭が削除される可能性があり、後続のクエリでリモート ストレージからデータを再フェッチする必要があります。 この場合、インテリジェント キャッシュを使うメリットはないため、キャッシュ サイズやノード サイズを増やす必要があるかもしれません。

  • ワークロードに大量のシャッフルが必要です。 ストレージ領域の不足によってジョブが失敗しないように、インテリジェント キャッシュを無効にして使用可能な領域を解放します。

インテリジェント キャッシュの有効化と無効化

セッション内でインテリジェント キャッシュを無効または有効にするには、ノートブックで次のコードを実行するか、この構成をワークスペースまたは Environment 項目レベルで設定します。

spark.conf.set("spark.synapse.vegas.useCache", "false/true")