ストアド プロシージャのパフォーマンスに対するパラメーター スニッフィングの影響
日付パラメーター (@MyDate) を利用するストアド プロシージャは、次の基準に基づいてパフォーマンスに重大な矛盾を示します。コンパイル時のパラメータの初期値。 @MyDate が最初に NULL として渡されると、実際の入力値に関係なく、その後のプロシージャの実行のパフォーマンスが低下します。ただし、コンパイル中に @MyDate を日付または現在の日付で初期化すると、後続のすべての呼び出しで最適なパフォーマンスが保証されます。
この動作は、保存中にクエリ パラメータの値を評価する SQL Server のパラメータ スニッフィング メカニズムに起因している可能性があります。手順のコンパイル。この場合、@MyDate が最初に NULL であると、オプティマイザーは後で @MyDate に非 NULL 値が含まれる場合でも持続する非効率的な実行プランを生成します。
この問題を解決するには、次のコピーを使用してパラメータ スニッフィングを無効にします。 @MyDate パラメーター (@MyDate_Copy)。これにより、SQL Server は実行時に @MyDate の現在の値に基づいてクエリ プランを最適化し、初期パラメータ値の影響を排除します。
SQL Server 2005 では、パラメータ スニッフィングに重大なバグがあることが知られています。パフォーマンスのボトルネックや、クエリの不完了につながる可能性があります。したがって、これらの問題を回避するには、ストアド プロシージャ パラメータをマスクすることをお勧めします。 SQL Server 2008 には、パラメータ スニッフィング関連のパフォーマンスの問題に対処するために使用できる OPTIMIZE FOR UNKNOWN 句が用意されています。
以上がパラメーター スニッフィングはストアド プロシージャのパフォーマンスにどのような影響を与えますか?また、それを軽減するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。