次の方法で共有


式に対するカーディナリティ推定 (CE) のフィードバック

適用対象:適用対象: SQL Server 2025 (17.x) Preview Azure SQL DatabaseMicrosoft Fabric の SQL データベース

カーディナリティの推定が不正確な場合、クエリの最適化中にパフォーマンスが低下することがよくあります。 式のカーディナリティ推定 (CE) フィードバックは、CE フィードバック機能によって開始されるフレームワークを拡張します。 目標は、繰り返し式のカーディナリティ推定を改善することです。 式機能のフィードバックは、クエリ間での式の以前の実行から学習し、適切な CE モデルの選択肢を見つけ、それらの式の将来の実行に学習した内容を適用します。 CE フィードバックと同様に、モデルの推奨事項はテストされ、今後のクエリ実行に自動的に適用されます。

式機能のフィードバックは、特定のクエリの式とデータ分散に適した モデル の仮定を識別して使用します。その結果、クエリ実行プランの品質が向上します。 現在、式機能のフィードバックでは、推定行数と実際の行数が大きく異なるプラン演算子を特定できます。 重要なモデル推定エラーが発生し、実行可能な代替モデルがある場合は、クエリ内の式にフィードバックが適用されます。

データベース エンジンのバージョンが異なると、データの分散方法とクエリ方法に基づいて、 異なる CE モデルの前提条件が使用されます。

動作方法

指紋は SQL Server データベース エンジンの新しい概念ではありませんが、式のフィードバック機能のコンテキストでの 指紋 とは、式内からの計算されたシグネチャの組み合わせを指します。 たとえば、架空のビジネスのビジネス アナリストは、顧客が 10,000 ドルを超える金額を費やした顧客の注文に関する情報を取得できます。 Orders テーブルにも結合されている Customers テーブルからデータを収集する select ステートメントは、この種類のデータを表示する 1 つの方法です。

SELECT *
FROM Customer AS C
     INNER JOIN Orders AS O
         ON C.custkey = O.o_custkey
WHERE O.o_totalprice > 10000;

このクエリでは、クエリ オプティマイザーは、各テーブルからデータを取得することを選択できます(Customer、その後にOrders、両方のテーブルから関連付けられているすべての列を選択し、注文のが $10,000 を超えるデータを (フィルターを使用して) totalpriceします。 このプロセスの各手順には、式機能のフィードバックで使用される指紋を構成する署名が生成されています。

この機能は、クエリ全体で一貫したカーディナリティの過剰推定/推定不足を持つ式に焦点を当てています。 現在 CE フィードバックの対象ではない 2 つの異なるワークロード パターンが分析されます。

  • 繰り返し実行せずに、繰り返し式パターンを持つワークロード。 たとえば、一般的に使用される結合パターンなどです。

  • クエリの一部が、同じクエリの別の部分とは異なる CE モデルの恩恵を受ける可能性があるクエリ。 たとえば、テーブル A と B の間の結合には単純な包含が必要な場合があり、テーブル C と D の間の結合には基本コンテインメントが必要な場合があります。

式機能のフィードバックは、フィルターと結合の前提条件を適用して、次のような誤った問題を修正します。

フィルター:

  • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
  • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
  • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES

結合:

  • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS
  • 基本的な封じ込めの仮定 (ヒントを渡す必要がない)

「CE フィードバック」を表現に使用する

データベースの式機能のフィードバックを有効にするには、次の前提条件が必要です。

  • データベースは互換性レベル 160 以降を使用する必要があります。

  • CE_FEEDBACK_FOR_EXPRESSIONSデータベース スコープの構成を有効にする必要があります。

CE_FEEDBACK_FOR_EXPRESSIONSデータベース スコープの構成は、既定で有効になっています。

次のステートメントを実行することで、データベースで SQL Server 2025 (17.x) Preview の式機能に対するフィードバックが使用されていることを確認できます。

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = ON;

データベースの式機能のフィードバックを無効にするには、 CE_FEEDBACK_FOR_EXPRESSIONS データベース スコープの構成を無効にします。

ALTER DATABASE SCOPED CONFIGURATION SET CE_FEEDBACK_FOR_EXPRESSIONS = OFF;
  • 式アクティビティの CE フィードバックは、拡張イベント adhoc_ce_feedback_query_level_telemetryquery_adhoc_ce_feedback_expression_hint、および query_adhoc_ce_feedback_hint を介して表示されます。 CE フィードバックの拡張イベントの query_ce_feedback_begin_analysisquery_ce_feedback_telemetry は、機能のアクティビティを追跡するときにも役立ちます。

  • 指紋データがキャッシュされる AdHocCEFeedbackCache と呼ばれる新しいメモリ クラークがあります。 キャッシュには、新しいシステム カタログ ビュー ( sys.dm_exec_ce_feedback_cache) を使用してアクセスできます。

制限事項

式機能の CE フィードバックには、現在、次の機能は含まれません。

  • 永続化: 指紋テーブルのクエリ ストアの永続化と式レベルのヒントは、後の CTP で使用できるようになります。 SQL Server の再起動時に、式機能のフィードバックを再学習し、現在のワークロードにヒントを適用する必要があります。