ホームページ >データベース >mysql チュートリアル >SQL Server でのパラメーター スニッフィングによって引き起こされるストアド プロシージャのパフォーマンスの低下を解決するにはどうすればよいですか?
パラメータ スニッフィングによるストアド プロシージャのパフォーマンスの低下
入力パラメータ (@MyDate) が使用されるストアド プロシージャでパフォーマンスの問題が発生しています。 NULL または日付を指定できます。 @MyDate を NULL として最初にプロシージャをコンパイルすると、実際のパラメータ値に関係なく、その後の実行ではパフォーマンスが低下します。
パラメータ スニッフィング動作
SQL Server は「パラメータ」を実行しますスニッフィング」を使用して、コンパイル中のパラメータ値に基づいて実行計画を最適化します。これらの値をプロシージャ キャッシュにキャプチャし、将来の実行を推定するために使用します。
この場合、@MyDate が最初に NULL である場合、パラメータ スニッフィングはすべてのパラメータ値に対して次善の実行プランを生成するため、問題が発生しています。実行時に @MyDate が明示的に NULL に設定されている場合でも、キャッシュされたプランは残ります。
パラメーター スニッフィングの無効化
「パラメーター スニッフィング」という古典的な症状が発生しました。問題が発生しました。」では、初期パラメータ値に対して生成された計画が、実際の実行を表していない場合でも使用されます。パラメータ スニッフィングを無効にするには、@MyDate_Copy を使用してパラメータをスプーフィングしました。
根本原因と解決策
この問題は、パラメータ スニッフィングが誤動作する可能性がある SQL Server 2005 のバグに起因しています。 SQL Server 2008 では、OPTIMIZE FOR UNKNOWN オプションを使用することでこの問題を軽減できます。これにより、オプティマイザはプランのコンパイル中にパラメータのすべての可能な値を強制的に考慮します。
追加の洞察
以上がSQL Server でのパラメーター スニッフィングによって引き起こされるストアド プロシージャのパフォーマンスの低下を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。