[SQL Server]SSMS에서는 빠른데 화면에서는 느려요!

Updated:

SSMS에서는 빠른데 화면에서는 느려요!

몇년간 .NET 기반의 SQL SERVER를 사용하는 한 사이트에서
최근 위와 같은 상황이 발생하였다.

타 사이트에서도 같은 문제가 발생할수 있기에 해당 사례를 공유한다.

해당 이슈는 특정 SP(Stored Procudure)가 화면에서는 매우 느리게 실행 되었으나,
SQL Server Management Studio(이하 SSMS)에서는 매우 빠르게 실행되었다.
리컴파일을 해도 결과는 같았고, 흔히 겪는 Parameter sniffing 은 아니었다.
해당 SP를 sys.dm_exec_query_plan DMV를 통하여 실행계획을 확인했을때,
2개의 실행계획이 생성되어 SSMS에서는 X의 실행계획, 화면에서는 Y 실행계획으로 실행 되었으며,
각 실행계획에 ARITHABORT 설정이 하나는 ON, 하나는 OFF임을 확인할 수 있었다.

SET ARITHABORT 는 무엇일까?

해당 쿼리 실행시 오버플로 또는 0으로 나누기 오류가 발생하면 쿼리를 종료하는 설정이다.


참조 - SET ARITHABORT

그런데 이 설정이 왜 문제가 될까?
상기 링크상의 참조 페이지에 보면 다음과 같은 경고가 있다.

경고

SQL Server Management Studio(SSMS)의 기본 ARITHABORT 설정은 ON입니다. ARITHABORT를 OFF로 설정하는 클라이언트 애플리케이션에서 다른 쿼리 계획을 받아 성능이 저조한 쿼리 문제를 해결하기 어려울 수 있습니다. 즉, 같은 쿼리가 Management Studio에서는 빨리 실행되지만, 애플리케이션에서는 느리게 실행될 수 있습니다. Management Studio로 쿼리 문제를 해결할 때 항상 클라이언트 ARITHABORT 설정을 일치시키세요.

일반적으로 SSMS(SQL Server Management Studio)는 최초 설치 시 아래와 같이 기본 설정이 SET ARITHABORT ON이다. SSMS

그러나, Application에서는 아래 표와 같이 기본 ARITHABORT 설정이 OFF이다.
3

따라서 어플리케이션과 SSMS상의 쿼리 실행속도가 다른 상황이 발생된 것이다.
화면상의 쿼리와 SSMS상의 쿼리 속도가 지속적으로 다를 경우,
쿼리에 따라 ARITHABORT 설정을 확인해 보고, 해당 쿼리 업무에 따라 SSMS 세팅을 바꾸던지
아래와 같이 어플리케이션의 쿼리 실행 시 세팅을 바꾸어 동일한 세팅이 되도록 설정 후,
이슈 해결이 필요하다.

SqlCommand comm = new SqlCommand("SET ARITHABORT ON", objSqlConn); comm.ExecuteNonQuery();