향상된 확장성 및 성능(데이터베이스 엔진)

데이터베이스 엔진의 향상된 확장성과 성능에는 필터링된 인덱스와 통계, 새로운 테이블 및 쿼리 힌트, 새로운 쿼리 성능 및 처리 기능 등이 포함됩니다.

필터링된 인덱스 및 통계

SQL Server 2008에서는 조건자를 사용하여 테이블 행의 하위 집합에 대해 필터링된 인덱스와 통계를 만들 수 있습니다. 이전 버전의 SQL Server에서는 테이블의 모든 행에 대해 인덱스와 통계가 만들어졌습니다. 필터링된 인덱스와 통계는 대부분의 값이 NULL인 열, 여러 범주의 값이 포함된 열 및 특정 범위의 값이 포함된 열과 같이 잘 정의된 데이터의 하위 집합에서 선택하는 쿼리에 특히 적합합니다.

잘 디자인된 필터링된 인덱스는 전체 테이블 인덱스에 비해 쿼리 성능을 개선하고 인덱스 유지 관리 비용과 인덱스 저장소 비용을 줄일 수 있습니다. 자세한 내용은 필터링된 인덱스 디자인 지침을 참조하십시오. 필터링된 통계는 필터링된 인덱스에 있는 행만 대상으로 하기 때문에 쿼리 계획의 품질을 높일 수 있습니다. 데이터베이스 엔진은 필터링된 인덱스에 대한 필터링된 통계를 자동으로 만들고 유지 관리합니다. 인덱싱되지 않은 열에 대해 필터링된 통계를 만들어 필터링된 인덱스가 필요하지 않은 데이터 하위 집합의 쿼리 계획 품질을 높일 수도 있습니다. 자세한 내용은 통계를 사용하여 쿼리 성능 향상을 참조하십시오.

테이블 및 쿼리 힌트

OPTIMIZE FOR 쿼리 힌트 옵션에 UNKNOWN 변수 값 포함

OPTIMIZE FOR 쿼리 힌트 옵션은 데이터베이스 엔진에서 쿼리를 최적화하는 동안 초기 값 대신 통계 데이터를 사용하여 하나 이상의 로컬 변수 값을 결정하도록 지정하는 UNKNOQN 구문을 통해 향상되었습니다. 이 구문은 쿼리의 모든 로컬 변수에 지정하거나 하나 이상의 명명된 로컬 변수에 지정할 수 있습니다. 자세한 내용은 쿼리 힌트(Transact-SQL)를 참조하십시오.

쿼리 힌트

이제는 테이블 힌트를 쿼리 힌트로 지정하여 고급 쿼리 성능 튜닝 옵션을 제공할 수 있습니다. 테이블 힌트는 계획 지침의 컨텍스트에서 쿼리 힌트로만 사용하는 것이 좋습니다. 자세한 내용은 쿼리 힌트(Transact-SQL)계획 지침에서 INDEX 및 FORCESEEK 쿼리 힌트 사용을 참조하십시오.

테이블 힌트

고급 쿼리 성능 튜닝 옵션을 제공하기 위해 FORCESEEK 테이블 힌트가 추가되었습니다. 이 힌트는 쿼리 최적화 프로그램이 쿼리에서 참조하는 테이블 또는 뷰의 데이터에 대한 액세스 경로로 Index Seek 연산만 사용하도록 합니다. 자세한 내용은 FORCESEEK 테이블 힌트 사용을 참조하십시오.

쿼리 성능 및 처리

잠금 에스컬레이션 옵션

ALTER TABLE의 새로운 LOCK_ESCALATION 옵션을 사용하면 테이블에 대한 잠금 에스컬레이션을 해제할 수 있습니다. 분할된 테이블의 경우에는 전체 테이블 대신 파티션 수준으로 에스컬레이션되도록 잠금을 구성할 수 있습니다. 이 옵션을 사용하면 분할된 테이블을 사용할 때 잠금 경합을 줄여 동시성을 향상시킬 수 있습니다. 자세한 내용은 ALTER TABLE(Transact-SQL)을 참조하십시오.

최적화된 비트맵 필터링

쿼리 최적화 프로그램에서는 병렬 쿼리 계획에 비트맵 필터를 동적으로 배치하여 별모양 스키마에 대한 쿼리의 성능을 향상시킬 수 있습니다. 최적화된 비트맵 필터링은 쿼리 계획 초기에 팩트 테이블에서 조건에 맞지 않는 행을 제거함으로써 이러한 데이터 웨어하우스 쿼리의 성능을 크게 향상시킬 수 있습니다. 자세한 내용은 비트맵 필터링을 통한 데이터 웨어하우스 쿼리 성능 최적화를 참조하십시오.

분할된 개체에 대한 병렬 쿼리 처리

SQL Server 2008에서는 여러 병렬 계획에 대해 분할된 테이블에서의 쿼리 처리 성능을 향상시키고, 병렬 및 직렬 계획이 표시되는 방식을 변경하고, 컴파일 시간 및 런타임 실행 계획에 제공되는 분할 정보를 개선합니다. SQL Server 2008에서는 분할된 개체에 대한 병렬 쿼리 실행 계획의 스레드 분할 전략을 자동화하고 개선합니다. 자세한 내용은 분할된 테이블 및 인덱스에서의 향상된 쿼리 처리를 참조하십시오.

계획 지침

sp_create_plan_guide 저장 프로시저는 USE PLAN 힌트에 출력을 포함하는 대신 XML 실행 계획 출력을 @hints 매개 변수에서 직접 받아들이도록 확장되었습니다. 이렇게 하면 정해진 쿼리 계획을 계획 지침 힌트로 적용하는 프로세스가 간편해집니다. 또한 새 저장 프로시저인 sp_create_plan_guide_from_handle을 사용하면 계획 캐시의 쿼리 계획에서 하나 이상의 계획 지침을 만들 수 있습니다.

같은 쿼리 및 일괄 처리나 모듈에 대해 여러 개의 OBJECT 또는 SQL 계획 지침을 만들 수 있습니다. 그러나 이러한 계획 지침은 한 번에 하나만 사용할 수 있습니다.

새 시스템 함수인 sys.fn_validate_plan_guide를 사용하여 계획 지침의 유효성을 검사할 수 있습니다. 인덱스를 삭제하는 것과 같이 데이터베이스의 물리적 디자인을 변경한 후에 계획 지침이 유효하지 않을 수 있습니다. 계획 지침의 유효성을 검사하면 쿼리 최적화 프로그램에서 계획 지침을 수정하지 않고도 바로 사용할 수 있는지 여부를 확인할 수 있습니다.

새 이벤트 클래스인 Plan Guide SuccessfulPlan Guide Unsuccessful을 사용하면 쿼리 최적화 프로그램에서 계획 지침을 사용하고 있는지 여부를 더 쉽게 확인할 수 있습니다. SQL Server에서 계획 지침이 포함된 쿼리에 대해 실행 계획을 생성할 수 없는 경우 계획 지침을 사용하지 않고 쿼리가 자동으로 컴파일됩니다. Plan Guide Unsuccessful 이벤트는 초기 계획 지침 컴파일이 실패하면 발생합니다.

SQL Server, SQL Statistics 개체에서 새 카운터인 Guided Plan Executions/secMisguided Plan Executions/sec를 사용하면 계획 지침을 통해 쿼리 계획이 성공적으로 생성되거나 생성되지 않은 계획 실행 수를 모니터링할 수 있습니다.

SQL Server Management Studio를 사용하여 계획 지침의 작성, 삭제, 설정, 해제, 스크립팅 등의 작업을 수행할 수 있습니다. 계획 지침은 개체 탐색기의 프로그래밍 기능 폴더에 표시됩니다.

비슷한 쿼리를 찾고 튜닝하기 위한 해시 값

리소스 사용량이 많은 쿼리를 검색할 때는 개별적으로는 적은 양의 시스템 리소스를 사용하지만 전체적으로는 많은 양의 시스템 리소스를 소비하는 비슷한 쿼리를 찾아 튜닝하는 방법을 고려해야 합니다. sys.dm_exec_query_statssys.dm_exec_requests 카탈로그 뷰에서 제공하는 쿼리 해시 및 쿼리 계획 해시 값을 사용하면 비슷한 쿼리 및 비슷한 쿼리 실행 계획에 대한 집계 리소스 사용량을 확인할 수 있습니다. 자세한 내용은 쿼리 및 쿼리 계획 해시를 사용하여 비슷한 쿼리 검색 및 튜닝을 참조하십시오.