데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

SQL Server 2016부터 도입된 USE HINT 사용한 추적 플래그 활성화

 

·         Version : SQL Server 2016 later

 

SQL Server에서는 서버의 특정 동작을 임시로 설정 하거나 중지 시킬때 사용하는 추적 플래그(Trace Flag)라는 기능이 있다추적 플래그는 주로 성능 문제를 진단하거나 저장 프로시저 또는 복잡한 컴퓨터 시스템을 디버깅하는데 사용된다.

·         DBCC TRACE ON – Trace Flags :  https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql?view=sql-server-2017

 

추적 플래그를 쿼리에서 사용할때 지금까지는 사용하려는 추적 플래그의 번호를 사용하였다.

SELECT x FROM correlated WHERE f1 = 0 AND f2 = 1 OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137)

 

SQL Server 2016 SP1에서는 USE HINT 라는  쿼리 힌트를 도입하여 사용자가 추적 플래그 번호를 기억할 필요 없이 추적 플래그 이름을 사용할  있게 되었다아래  쿼리는 동일한 기능의 추적 플래그를 실행 한다 

SELECT TOP 1000 col1 FROM tbl1 OPTION (QUERYTRACEON 4138);

 

SELECT TOP 1000 col1 FROM tbl1 OPTION (USE HINT('DISABLE_OPTIMIZER_ROWGOAL'));

 

SQL Server 2017 CU10에서는 QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n 이라는  가지 새로운 USE 힌트를 도입했다여기서 n 지원되는 데이터베이스 호환성 수준이다이렇게 하면 쿼리가 데이터베이스 호환성 수준으로 컴파일된 것처럼 쿼리 수준에서 쿼리 최적화 프로그램 동작이 강제로 수행된다. N 대해 지원되는 값을 보려면 아래 링크를 참고 한다.

·         sys.dm_exec_valid_use_hints : https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-exec-valid-use-hints-transact-sql?view=sql-server-2017

 

새로운 힌트는 특정 CE 모델만 강제하는 것은 아니며 데이터베이스 호환성 수준에서 기본적으로 활성화되는 쿼리 최적화 프로그램 수정을 비롯하여 특정 베이터베이스 호환성 수준의 쿼리 최적화 프로그램 동작과 동등하다.

아래 예제는 새로운 힌트를 사용하여 데이터베이스 호환성 수준이 SQL Server 2014수준(상단의 실행 계획)으로 유지되는 것처럼 해당 특정 쿼리를 컴파일   있었으며 SQL Server 2017 계획(하단의 실행 계획)과의 차이점을 확인할  있다.

 


등록 정보를 보면 사용된 CE 버전(120 vs 130)  QueryTimeStats간의 차이점을 확인할  있다.

 


모든 힌트는 특정 행동을 강요하고 향후 업그레이드를 통해서 해결  수도 있다. Microsoft에서는 다른 옵션이 없는 경우에만 힌트를 적용하고 힌트가 있는 코드를 새로 업그레이드  때마다 다시 계획  것을 권장한다힌트를 통한 강제 적용은 최신 버전에서 향샹된 기능의 이점을 워크로드에서 제외할 수도 있다.

 

[참고자료]

https://blogs.msdn.microsoft.com/sql_server_team/developers-choice-hinting-query-execution-model/

 

 

 

2018-10-01 / Sungwook Kang / http://sqlmvp.kr

 

SQL Server, MSSQL, 쿼리 힌트, USE 쿼리 힌트추적 플래그, Query Hint, Trace Flag, USE Hint



출처: https://sqlmvp.tistory.com/1270?category=618825 [Database Lab]
No. Subject Author Date Views
2150 SQL Server 2019 에서 업그레이드된sp_estimate_data_compression_savings 프로시저 (컬럼스토어 압축율 예상) jevida(강성욱) 2019.03.26 531
2149 SQL Server 2019 에서 추가된sys.dm_db_page_info, sys.fn_PageResCracker 기능으로 대기 관련 정보 확인 jevida(강성욱) 2019.03.26 768
2148 SQL Server 2019에서 향상된 Rowstore batch mode jevida(강성욱) 2019.03.26 421
» SQL Server 2016부터 도입된 USE HINT를 사용한 추적 플래그 활성화 jevida(강성욱) 2019.03.26 439
2146 In-memory optimized table에 사용되는 Hash Index jevida(강성욱) 2019.03.26 390
2145 VM환경에서 AG를 구성하였을때VSS 백업 동작 변경 jevida(강성욱) 2019.03.25 394
2144 SQL Server 2016 향상된 가용성 그룹 – 데이터베이스 수준의 상태 탐지 장애조치 jevida(강성욱) 2019.03.25 419
2143 SQL Server 2016 대용량 데이터 로드시 최소 로깅(minimal logging) 과Batch Size jevida(강성욱) 2019.03.25 310
2142 SQL Server 설치시 발생하는 1638 오류 jevida(강성욱) 2019.03.25 412
2141 SQL Server 666코드의 고유 식별자 오류 jevida(강성욱) 2019.03.25 293
2140 SQL Server AlwaysOn synchronous-commit 환경에서 동기화 레이턴시 트러블슈팅 jevida(강성욱) 2019.03.25 349
2139 SQL Server Scheduling and Yielding 트러블슈팅 jevida(강성욱) 2019.03.25 353
2138 SQL Server 2016 Tempdb 경합(contention) 최적화 jevida(강성욱) 2019.03.25 439
2137 XEvent를 사용하여 Auto tuning 작업 모니터링 jevida(강성욱) 2019.03.25 452
2136 SQL Server In-Memory OLTP에 ASP.NET 세션 상태 저장하기 jevida(강성욱) 2019.03.25 351
2135 SQL Server에서 JSON 데이터 저장하기 jevida(강성욱) 2019.03.25 425
2134 Azure SQL에서 네트워크를 구성하는 방법 jevida(강성욱) 2019.03.25 231
2133 SQL Server 네이티브 컴파일된 저장 프로시저 성능 모니터링 jevida(강성욱) 2019.03.25 441
2132 SQL Server 2017 소규모 시스템에서 향상된 리소스 사용 jevida(강성욱) 2019.03.25 258
2131 클러스터 컬럼스토어 인덱스(Clusterd Columnstore Index)에서 대량 인서트 작업시 발생하는 래치 경합 최소화 트릭 jevida(강성욱) 2019.03.25 399





XE Login