SQL Server ストアドのクエリタイムがSSMS とプログラムからの実行に差異が発生

SQL Server ストアドのクエリタイムがSSMS とプログラムからの実行に差異が発生

SQL ServerでSSMSから実行した場合とプログラムから実行した場合でストアドプロシージャの実行速度が異なる原因を解説します。SET ARITHABORT設定による実行プランの違いや、パフォーマンス改善方法について詳しく紹介します。

環境

  • OS windows10 pro
  • SQL Server2017 Standard Edition
  • SSMS 18.7.1

問題点

SQL Server Management Studio (SSMS) とプログラムから同じクエリを実行したところ、大幅なクエリタイムの差異が発生

SQL Server Management Studio (SSMS)から実行した方が遥かに速い

原因

SSMSの場合「Set ARITHABORT」がデフォルトでON になっており、
プログラムから実行した場合は、デフォルトが「OFF」ため

一度、SSMS側で「Set ARITHABORT」を「OFF」にしてストアドを実行すると、クエリタイムはプログラムから実行した場合とほぼ同じになった。

Set ARITHABORT OFF
go

対処法

なので、対象のストアドを「Set ARITHABORT」をONにして、プログラム側から実行

SET ARITHABORT ON
GO

これで、クエリタイムは改善。

どうも、実行プランのキャッシュの問題なようなので、一度「ON」にして実行した後に、「SET ARITHABORT ON」を外して、再度、プログラムから実行してもキャッシュが更新され、クエリタイムは改善しました。