適用対象:✅ Microsoft Fabric の SQL 分析エンドポイントおよびウェアハウス
結果セットのキャッシュ (プレビュー) は、読み取り待ち時間を短縮する Fabric Data Warehouse および Lakehouse SQL 分析エンドポイントの組み込みのパフォーマンス最適化です。
結果セットのキャッシュは、該当する SELECT
T-SQL クエリの最終的な結果セットを保持することによって機能します。そのため、後続の "ヒット" キャッシュの実行では最終的な結果セットだけが処理されます。 これにより、元のクエリの複雑なコンパイルとデータ処理をバイパスし、後続のクエリをより高速に返すことができます。
通常、データ ウェアハウスのシナリオには、大量のデータを処理して比較的小さな結果を生成する分析クエリが含まれます。 たとえば、複数の結合を含み、数百万行のデータに対して読み取りとシャッフルを実行する SELECT
クエリでは、集計の長さがわずか数行になる場合があります。 同じ分析クエリを繰り返しトリガーする傾向があるレポートやダッシュボードなどのワークロードでは、最終的な結果が変わらない場合でも、同じ重い計算を複数回トリガーできます。 結果セットのキャッシュにより、このシナリオと同様のシナリオでのパフォーマンスが向上します。
Von Bedeutung
この機能は プレビュー段階です。
キャッシュの自動管理
結果セットキャッシュは透過的に動作します。 有効にすると、キャッシュの作成と再利用がクエリに対して日和見的に適用されます。
結果セットのキャッシュは、ウェアハウス テーブルの SELECT
T-SQL クエリ、OneLake ソースへのショートカット、Azure 以外のソースへのショートカットに適用されます。 キャッシュの管理は自動的に処理され、必要に応じてキャッシュが定期的に削除されます。
さらに、データが変更されると、前に作成したキャッシュを無効にすることで結果の整合性が確保されます。
結果セットのキャッシュを構成する
結果セットのキャッシュは、項目レベルで構成できます。
有効にすると、必要に応じて、項目レベルまたは個々のクエリで無効にすることができます。
プレビュー期間中は、すべてのアイテムに対して結果セットのキャッシュが既定でオフになっています。
項目レベルの構成
ALTER DATABASE SET T-SQL コマンドを使用して、レイクハウスまたはウェアハウスの結果セットのキャッシュを有効にします。 Lakehouse の SQL 分析エンドポイントを使用して、T-SQL クエリに接続して実行します。
ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING ON;
設定値は sys.databases で確認できます。たとえば、Fabric Warehouse または Lakehouse SQL 分析エンドポイントの現在のコンテキストの値を確認できます。
SELECT name, is_result_set_caching_on
FROM sys.databases
WHERE database_id = db_id();
結果セットのキャッシュを無効にするには:
ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING OFF;
クエリ レベルの構成
アイテムに対して結果セットのキャッシュを有効にすると、個々のクエリに対して無効にすることができます。
これは、クエリのデバッグや A/B テストに役立ちます。
SELECT
の最後に次のヒントを添付して、クエリの結果セットのキャッシュを無効にします。
OPTION ( USE HINT ('DISABLE_RESULT_SET_CACHE') );
結果セットのキャッシュの使用状況を確認する
結果セットのキャッシュの使用状況は、メッセージ出力と queryinsights.exec_requests_history システム ビューの 2 つの場所で確認できます。
クエリのメッセージ出力 (Fabric クエリ エディターまたは SQL Server Management Studio に表示されます) では、クエリが既存の結果セット キャッシュを使用できた場合、クエリの実行後に "結果セット キャッシュが使用されました" というステートメントが表示されます。
queryinsights.exec_requests_historyでは、result_cache_hit
列に、クエリ実行ごとの結果セットキャッシュの使用状況を示す値が表示されます。
-
2
: クエリで使用された結果セット キャッシュ (キャッシュ ヒット) -
1
: クエリによって作成された結果セット キャッシュ -
0
: クエリは、結果セットのキャッシュの作成または使用に適用されませんでした
例えば次が挙げられます。
SELECT result_cache_hit, command, *
FROM queryinsights.exec_requests_history
ORDER BY submit_time DESC;
クエリが結果セット キャッシュの対象でないとシステムが判断できるさまざまな理由があります。 その理由には、次のようなものがあります。
- キャッシュが存在しなくなったか、データ変更によって無効になり、再利用のために無効になりました。
- クエリは決定論的ではなく、キャッシュ作成の対象ではありません。
- クエリは
SELECT
ステートメントではありません。