4

SQL Server のアドホック クエリに対して、単純なパラメーター化ではなく強制的なパラメーター化を有効にすることを選択しない理由は何ですか?

パフォーマンスのオーバーヘッドはありますか? もしそうなら、再利用されたクエリプランによって得られる(可能な)利益によって相殺されませんか?

4

1 に答える 1

6

プラン キャッシュを分析して、多数の使い捨てプランがあるかどうかを確認しましたか?

SELECT usecounts, COUNT(*), SUM(size_in_bytes) 
  FROM sys.dm_exec_cached_plans
  GROUP BY usecounts
  ORDER BY usecounts;

プランが 2 回以上使用されるまで、少なくともプランのスタブのみを保存する「アドホック ワークロードの最適化」設定を検討しましたか? これは非常に効果的であることがわかりました。

アドホック SQL が多く、プラン キャッシュの膨張が見られる場合は、強制的なパラメーター化を試しても問題ありません。ただし、オーバーヘッドがメリットを上回る場合があるため、ワークロード全体を徹底的にテストする必要があります(特に、インデックス付きビュー、永続化された計算列、またはパーティショニングを頻繁に使用する場合は、計画が悪化する可能性があります)。この設定をオンにすると、自動的に実行されることに注意することが重要DBCC FREEPROCCACHEです。そのため、次に必要になったときに既存のすべての計画を再コンパイルする必要がある場合、少し問題が発生することを想定してください。(もちろん、すでに「アドホックに最適化」を多くの使い捨てプランと組み合わせている場合、再利用する前におそらくフラッシュされる可能性のあるスタブをほとんど削除しているため、これによる影響ははるかに少なくなります。

また、この設定が個々のクエリに影響しない場合が多いことにも注意してください (オンライン ブックのトピックを参照してください)。

于 2012-04-24T12:33:05.337 に答える