SQL Server 2022 の Intelligent query processing では、PSP optimization というクエリ最適化の処理が実装されました。
この機能はパラメーター スニッフィングに対する最適化として期待されるものとなり、パラメーターによって実行プランが大きく異なるケースで、パラメーターの値範囲に応じた実行プランを生成してくれるものとなります。
この機能が使用されているかを確認する際には、どの情報を参照すればよいのかを調べる機会がありましたのでまとめておきたいと思います。
PSP optimization の挙動を把握するための情報
拡張イベント
PSP optimization 向けに次のような拡張イベントが提供されており、これらの拡張イベントの情報を取得することで、挙動についての情報を確認することができます。
この拡張イベントを確認することで、PSP optimization によりクエリの最適化が行われたか / スキップされた場合はどのような理由によりスキップされたかを確認することができます。
SQL Server 2025 では、スキップされる理由としては次のような条件があり、この条件に合致している場合は PSP optimization による最適化がスキップされます。
システムビュー
そのほかには、sys.query_store_query_variant も活用することができます。
PSP optimization によってクエリの最適化が行われると、このシステムビューにディスパッチャープランと子のクエリと確認することができます。
親のクエリとして クエリ ID 11 がディスパッチャープランとして設定されており、子のクエリとして 29~31 のクエリが設定されていることが確認できます。
クエリ ID 11 の実行プランとしては、PSP optimization により複数のプランが存在することを示すディスパッチャープランが設定された状態となります。
実際に使用される実行プランとしては、パラメーターに応じて次のようなプランが生成されていることが確認できます。
PSP optimization では、パラメーターの範囲に応じて 3 種類のプランが生成されています。
PSP optimization の対象取る述語数によって生成されるプラン数が変わりますが、単一のパラメーターであれば、データの範囲に応じて、通常は 3 パターンのプランが生成されるはずです。
PSP optimization の挙動を把握する際にはこれらの情報を確認し、既に有効されている環境であれば、システムビューから PSP optimization が使用されているかを確認するとよいのではないでしょうか。