본문 바로가기
IT/MSSQL

[MSSQL] 호환성 레벨 수준 차이점(160, 150, 140, 130, 120, 110, 100, 90)

by 베베야 2023. 1. 28.
728x90

MSSQL은 설치하는 데이터베이스의 버전 별로 기본적인 호환성 레벨 수준, 그리고 지원되는 하위 호환성 레벨 수준의 범위가 존재한다. 예를 들어 SQL2019의 호환성 수준은 150이고, 지원되는 호환성 수준은 150, 140, 130, 120, 110, 100 이다.

 

이 호환성 수준에 따라서 지원하는 쿼리와 내부 동작 방식이 달라지기 때문에 운영중인 디비의 호환성 레벨을 변경하는 것은 상당한 주의가 필요하다.


데이터베이스 엔진 확인

SELECT SERVERPROPERTY('ProductVersion');

 

현재 호환성 수준

SELECT name, compatibility_level FROM sys.databases;

 

호환성 수준 변경

ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL = { 160 | 150 | 140 | 130 | 120 | 110 | 100 | 90 }

 

아래는 데이터베이스를 호환할 SQL Server 버전 및 하위 호환성 변경 가능 값입니다.

Product 데이터베이스 엔진 버전 기본 호환성 수준 지정지원되는 호환성 수준 값
SQL Server 2022(16.x) 16 160 160, 150, 140, 130, 120, 110, 100
SQL Server 2019 (15.x) 15 150 150, 140, 130, 120, 110, 100
SQL Server 2017(14.x) 14 140 140, 130, 120, 110, 100
Azure SQL Database 12 150 160, 150, 140, 130, 120, 110, 100
Azure SQL Managed Instance 12 150 160, 150, 140, 130, 120, 110, 100
SQL Server 2016(13.x) 13 130 130, 120, 110, 100
SQL Server 2014(12.x) 12 120 120, 110, 100
SQL Server 2012(11.x) 11 110 110, 100, 90
SQL Server 2008 R2(10.50.x) 10.5 100 100, 90, 80
SQL Server 2008(10.0.x) 10 100 100, 90, 80
SQL Server 2005(9.x) 9 90 90, 80
SQL Server 2000(8.x) 8 80 80

 

호환성 수준 별 차이점

150과 수준 160 사이의 차이점

호환성 수준 설정 150 이하 호환성 수준 설정 160
매개 변수가 있는 쿼리에는 첫 번째 실행에 사용되는 매개 변수를 기반으로 하는 단일 쿼리 계획이 있습니다. 하나의 쿼리 계획만 캐시되고 모든 매개 변수 값에 사용됩니다. 이로 인해 매개 변수의 일부 값에 대해 쿼리 계획이 비효율적이 될 수 있으며, 이를 매개 변수 중요 계획이라고도 합니다. 매개 변수가 있는 쿼리에는 매개 변수의 다양한 선택 범주에 대해 여러 개의 캐시된 쿼리 계획이 있을 수 있습니다. 매개 변수 중요 계획 최적화는 호환성 수준 160에서 기본적으로 사용하도록 설정됩니다. 자세한 내용은 PSP 최적화를 참조하세요.
카디널리티 예측은 모든 데이터베이스 및 쿼리에 대한 기본 데이터 분포 및 사용 패턴에 대한 하나의 기본 모델 가정 집합만 사용합니다. 이러한 가정 중 하나를 변경하거나 조정하는 유일한 방법은 사용자가 쿼리 힌트를 사용하여 사용해야 하는 모델 가정을 명시적으로 나타내는 수동 프로세스를 수행하는 경우입니다. 쿼리 계획이 생성된 후에는 이 기본 모델을 내부적으로 조정할 수 없습니다. 카디널리티 추정은 기본 데이터 분포 및 사용 패턴에 대한 기본 모델 가정 집합으로 시작하지만, 지정된 쿼리에 대한 일부 실행 후에 데이터베이스 엔진은 다양한 모델 가정 집합이 더 정확한 예측값을 산출할 수 있는 것을 학습하므로 쿼리되는 데이터 집합과 더 잘 일치하도록 사용 중인 가정을 조정합니다. CE 피드백은 호환성 수준 160에서 기본적으로 사용하도록 설정됩니다. 자세한 내용은CE 피드백을 참조하세요.
데이터베이스 엔진은 최적의 병렬 처리 수준을 자동으로 결정하지 않습니다. 인스턴스, 데이터베이스, 쿼리 또는 워크로드 수준에서 MAXDOP(최대 병렬 처리 수준)를 수동으로 제어하는 방법에 대한 자세한 내용은 최대 병렬 처리 수준 서버 구성 옵션 구성을 참조하세요. DOP(병렬 처리 수준) 피드백은 경과된 시간과 대기 시간을 기준으로 반복 쿼리에 대한 병렬 처리 비효율성을 식별하여 쿼리 성능을 개선합니다. 병렬 처리 사용이 비효율적이라고 판단되면 DOP 피드백은 구성된 DOP에서 쿼리의 다음 실행에 대한 DOP를 낮추고 도움이 되는지 확인합니다. DOP 피드백은 기본적으로 사용하도록 설정되지 않습니다. DOP 피드백을 사용하도록 설정하려면 데이터베이스에서 DOP_FEEDBACK 데이터베이스 범위 구성을 사용하도록 설정합니다. 자세한 내용은 DOP 피드백을 참조하세요.

 

140과 수준 150 사이의 차이점

호환성 수준 설정 140 이하 호환성 수준 설정 150
관계형 데이터 웨어하우스 및 분석 워크로드는 OLTP 오버헤드, 공급업체 지원 부족 또는 기타 제한 사항으로 인해 columnstore 인덱스를 사용하지 못할 수 있습니다. columnstore 인덱스가 없으면 이러한 워크로드는 일괄 처리 실행 모드의 이점을 누릴 수 없습니다. 이제 columnstore 인덱스가 없어도 분석 워크로드에 일괄 처리 실행 모드를 사용할 수 있습니다. 자세한 내용은 Rowstore의 일괄 처리 모드를 참조하세요.
디스크에 대한 분산이 발생하는 부족한 메모리 부여 크기를 요청하는 행 모드 쿼리는 연속 실행에 대한 문제가 지속될 수 있습니다. 디스크에 대한 분산이 발생하는 부족한 메모리 부여 크기를 요청하는 행 처리 모드 쿼리는 연속 실행에 대한 성능을 향상시킬 수 있습니다. 자세한 내용은 행 모드 메모리 부여 피드백을 참조하세요.
동시성 문제가 발생하는 과도한 메모리 부여 크기를 요청하는 행 모드 쿼리는 연속 실행에 대한 문제가 지속될 수 있습니다. 동시성 문제가 발생하는 과도한 메모리 부여 크기를 요청하는 행 모드 쿼리는 연속 실행에 대한 동시성을 향상시킬 수 있습니다. 자세한 내용은 행 모드 메모리 부여 피드백을 참조하세요.
T-SQL 스칼라 UDF를 참조하는 쿼리는 반복 호출, 비용 부족 및 강제 직렬 실행을 사용합니다. T-SQL 스칼라 UDF는 호출 쿼리로 “인라인”되는 해당 관계식으로 변환되어 성능이 크게 향상됩니다. 자세한 내용은 T-SQL UDF 인라인 처리를 참조하세요.
테이블 변수는 카디널리티 추정에 고정 추측을 사용합니다. 실제 행 수가 추측된 값보다 훨씬 높은 경우 다운스트립 작업의 성능이 저하될 수 있습니다. 새 플랜은 고정 추측 대신 첫 번째 컴파일에서 발생한 테이블의 변수의 실제 카디널리티를 사용합니다. 자세한 내용은 테이블 변수 지연 컴파일을 참조하세요.

 

호환성 수준에 따른 추가적인 정보는 다음을 참조 바랍니다.

 

ALTER DATABASE 호환성 수준(Transact-SQL) - SQL Server

Transact-SQL 및 쿼리 처리 동작을 지정된 버전의 데이터베이스 엔진과 호환되도록 설정합니다.

learn.microsoft.com

 

반응형
그리드형

댓글