반응형
웹환경과 SQL Server Management Studio 에서 쿼리 속도가 다르다면 실행계획이 다르기 때문입니다.
즉, ARITHABORT 설정에 따라 다른 실행계획으로 실행 되기 때문입니다.
DB툴(SQL Server Management Studio) 의 경우 ARITHABORT 설정 값은 ON이고,
.NET C#에서 호출 된 프로시저의 경우 ARITHABORT 설정 값이 OFF인 상태로 실행 되어 속도의 차이가 발생하는 경우가 있습니다.
저의 경우도 갑자기 쿼리 속도가 느려져서 확인 해 본 결과 웹환경에서 실행되는 쿼리에서 ARITHABORT가 OFF로 설정되어 실행되면서 쿼리 최적화에 부정적인 영향을 주어 성능 문제가 발생 한 것이였습니다.
프로시저에 SET ARITHABORT ON 로 설정부분을 추가하여 일단 조치하였습니다.
참고로 ARITHABORT 설정 값에 따라 0으로 나누기 또는 오버플로 오류가 발생시킬지의 여부가 달라지게 됩니다. ARITHABORT을 ON으로 설정하게 되면 0으로 나누었을 경우 오류가 발생하며, OFF로 설정하게 되면 NULL값을 리턴 하게 됩니다.(단, SET ANSI_WARNINGS OFF 로 설정 되어 있을 경우)
> ARITHABORT을 OFF으로 결과
> ARITHABORT을 ON으로 결과
ARITHABORT 설정에 따라 실행계획이 다를 수 있다는 것 알아두면 좋을 것 같습니다.
반응형
'프로그래밍 > DB' 카테고리의 다른 글
MS-SQL 요일 구하는 쿼리 (1) | 2019.05.28 |
---|---|
MS-SQL 동적 쿼리 만들기 예제(SP_EXECUTESQL) (1) | 2019.04.02 |
mssql 오류 - 선택한 원본 데이터베이스에 가시 테이블 또는 뷰가 없습니다 (3) | 2018.04.26 |
[MS-SQL] 테이블명 컬럼명 자동완성 기능 (0) | 2017.12.18 |
[MS-SQL] 단축키 확인 및 설정 방법 (2) | 2017.11.14 |