반응형
MS SQL은 쿼리를 실행할 때, 쿼리 최적화 프로그램이 비용을 기준으로 최적의 실행계획을 생성하고, 이를 cache에 저장합니다. 이렇게 하면, 같은 쿼리를 다시 실행할 때, cache에 있는 실행계획을 재사용하여 성능을 향상시킬 수 있습니다. 그러나, 쿼리 옵션에 따라서 실행계획이 다르게 cache에 올라가는 경우가 있습니다. 이는 다음과 같은 이유로 발생할 수 있습니다.
- **쿼리 유형**: MS SQL은 쿼리를 ad-hoc 쿼리와 stored procedure로 구분합니다. ad-hoc 쿼리는 매번 실행할 때마다 새로운 실행계획을 생성하고 cache에 저장합니다. 그러나, stored procedure는 한 번만 실행계획을 생성하고 cache에 저장하며, 이후에는 같은 실행계획을 재사용합니다. 따라서, 같은 쿼리라도 ad-hoc 쿼리와 stored procedure로 작성하면 실행계획이 다르게 cache에 올라갈 수 있습니다.
- **쿼리 힌트**: 쿼리 힌트는 쿼리 최적화 프로그램에게 쿼리를 실행하는 방법에 대한 추가적인 정보를 제공하는 방법입니다. 예를 들어, `OPTION (RECOMPILE)` 힌트는 쿼리를 실행할 때마다 새로운 실행계획을 생성하도록 지시합니다. `OPTIMIZE FOR` 힌트는 특정 파라미터 값에 대한 최적의 실행계획을 사용하도록 지시합니다. 쿼리 힌트를 사용하면, 쿼리 최적화 프로그램이 기본적으로 생성하는 실행계획과 다른 실행계획이 cache에 올라갈 수 있습니다.
- **쿼리 옵션**: 쿼리 옵션은 쿼리를 실행하는 데 영향을 미치는 여러 가지 설정입니다. 예를 들어, `ANSI_NULLS` 옵션은 NULL 값을 비교하는 방법을 결정합니다. `ARITHABORT` 옵션은 산술 오버플로우나 0으로 나누기와 같은 오류가 발생했을 때 쿼리를 중단할지 여부를 결정합니다. 쿼리 옵션을 변경하면, 쿼리 최적화 프로그램이 다른 실행 모드나 연산자를 선택할 수 있으므로, 실행계획이 다르게 cache에 올라갈 수 있습니다.
실행계획에 미칠 수 있는 옵션
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS*
ARITHABORT
CONCAT_NULL_YIELDS_NULL
NUMBERIC_ROUNDABORT
QUOTED_IDENTIFIER
반응형
'MSSQL' 카테고리의 다른 글
MSSQL : SPN 등록 및 삭제 방법 (0) | 2023.11.29 |
---|---|
MSSQL : SQL 2012에서 2016으로 업그레이드 (1) | 2023.11.29 |
MSSQL : 등록된 서버 Registered Servers (1) | 2023.11.28 |
MSSQL : Alter Login을 사용한 패스워드 변경 (0) | 2023.11.27 |
MSSQL : Agent Job waiting for a worker thread (1) | 2023.11.27 |