2
バッチごとにコンパイルが発生します
T-SQLステートメントをバッチで送信するサードパーティアプリケーションがあります。 データベースは、SQL Server 2016 Enterprise SP1 CU7、16コア、256 GBメモリでホストされています。アドホックの最適化が有効になっています。 これは、実行されているクエリのダミーの例です。 exec sp_executesql N' IF @@TRANCOUNT = 0 SET TRANSACTION ISOLATION LEVEL SNAPSHOT select field1, field2 from table1 where field1=@1 option(keep plan, keepfixed, loop join) select field3, field4 from table2 where field3=@1 option(keep plan, keepfixed, loop join)', N'@1 nvarchar(6)',@1=N'test' データベースを監視し、毎秒のバッチ数と毎秒のコンパイル数を見ると、それらは常に同じであることがわかります。負荷が高い場合、これは1000バッチ/秒および1000コンパイル/秒になる可能性があります。平均負荷では、150バッチ/秒です。 最近コンパイルされたプランのクエリキャッシュを分析します。 SELECT …