sql >> データベース >  >> RDS >> Sqlserver

SQL Server でのキャリアのある時点で、パラメータ スニッフィングが飛び出して攻撃したことがありますか?

    完全な答えではありませんが、私の経験を共有します。

    パラメータ スニッフィングは、主に DBA の本番環境の仕事に移った後、開発者 DBA に戻ったときに、SQL Server の数年をかけて私を悩ませました。エンジン、SQL の仕組み、クライアントに任せるのが最善の方法などについて理解が深まり、より優れた SQL コーダーになりました。

    たとえば、動的な SQL や CURSOR、または単純に不適切な SQL コードは、おそらくパラメーター スニッフィングを受けることはありません。ただし、プログラミングを設定するか、動的 SQL を回避する方法やより洗練された SQL を使用する方がよいでしょう。

    複雑な検索コード (多数の条件) と、パラメーターの既定値が計画に影響を与える複雑なレポートで、これに気付きました。経験の浅い開発者がこのコードを作成する様子を見ると、パラメータ スニッフィングに悩まされることはありません。

    いずれにせよ、WITH RECOMPILE よりもパラメーター マスキングを好みます。統計またはインデックスを更新すると、とにかく再コンパイルが強制されます。しかし、なぜいつも再コンパイルするのでしょうか?私はあなたの質問の 1 つに、コンパイル中にパラメーターが盗聴されることに言及しているリンクを使用して別の場所で回答したので、私もそれを信じていません。

    パラメーターのマスキングはオーバーヘッドですが、オプティマイザーは一括再コンパイルではなく、ケースごとにクエリを評価できます。特に SQL Server 2005 のステートメント レベルの再コンパイルでは

    SQL Server 2008 の OPTIMIZE FOR UNKNOWN も、マスキングとまったく同じことを行うようです。 SQL Server MVP の同僚と私は時間をかけて調査し、この結論に達しました。



    1. SpringデータリポジトリのOracleマテリアライズドビューを更新します

    2. 初期化されていないコレクションPL/SQLへの参照

    3. ユーザー定義のテーブル タイプに対する EXECUTE 権限が拒否されていますか?

    4. ORDER BY句が指定されている場合に、SQLServerが文字列連結の値を無視する理由