web-dev-qa-db-ja.com

クエリキャッシュまたはクエリストアからプルされた実行プランに「実際の行」数を含める方法は?

明らかに、実際の実行プランを見ることはチューニングの際に重要であり、通常は SET STATISTICS XML ON そして、何らかのTLCを必要とするクエリを実行しますが、プランの履歴実行や手動で簡単に実行できない(またはテスト環境でシミュレートできない)プロセスの実際のレコード数を確認するにはどうすればよいですか?

この情報をクエリキャッシュからプルするとき sys.dm_exec_query_plan または sys.dm_exec_text_query_plan 推定された行数のみが表示されます。クエリストアDMVを使用する場合にも同じ動作が存在します sys.query_store_plan 。これらのDMVはすべて、使用された実際の計画を取得しているため、計画のグラフィック表現に実際の行の実行カウントが含まれていると思いますが、彼らはそこにいません。

sys.dm_exec_query_stats DMVはステートメントの合計数を返すため、多少便利ですが、計画内の詳細な演算子数は履歴計画では隠されているようです。 2014年には sys.dm_exec_query_profiles 使用するDMV。これは、現在実行中の計画に役立ちますが、これは履歴実行を確認する場合にも役立ちません。

この情報は他の場所に保存されていますか?推定行数を実際の数として処理する必要がありますか(疑問ですが、質問しているので...)?この機能をリクエストする接続アイテムはありますか?

5
John Eisbrener

計画キャッシュには推定行数とコンパイルされたパラメーター値を含む推定計画が格納されるため、計画キャッシュから実際の行数は表示されません。

パフォーマンスソリューションを作成するために実際の行数が必要であると本当に確信している場合は、実際にクエリを実行するか、ProfilerまたはEEを使用して、具体的に Showplan XML Eventクラス

3
George K