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

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

SQL Server 2012 XML 플랜을 통한 병렬화 되지 않는 이유 살펴보기

-       Version : SQL Server 2012

   

SQL Server는 2개 이상의 코어를 사용할 때에는 필요에 따라 병렬처리를 통하여 성능을 높인다. 간혹 병렬 처리가 가능한데도 병렬처리가 되지 않았을 때 그 이유를 알기 위해선 다양한 기술적인 지식과 노력이 필요했다.

   

이번 포스트는 CSS SQL Server Engineer 팀블로그에 게제된 내용으로 필자가 읽고 이해한 내용을 정리하였으며 번역의 오류나 기술적 오류 가능성이 있음을 미리 알려둔다.

   

SQL Server 2012 부터는 XML 플랜에 계획하지 않거나 병렬화 할 수 없는 이유가 포함되도록 설계되었다. SQL Server 2012의 XML 플랜에서 "Query Plan" 요소 아래에 "NonParallePlanReason"이라는 속성을 통하여 확인 할 수 있다.

   

SET SHOWPLAN_XML ON

   

select * from sys.objects option (maxdop 1)

   

 

   

XML 결과를 클릭하면 다음과 같은 그래픽 형식의 실행 계획을 확인 할 수 있다.

   

그래픽 실행 계획에서 마우스 오른쪽을 클릭하여 [실행 계획 XML 표시]를 선택하면 다음과 같은 XML 형식의 실행 계획을 확인 할 수 있다.

   

다음과 같이 QueryPlan에서 NonParallelPlanReason 에서 확인 할 수 있다.

   

   

쿼리에서 병렬 처리가 되지 않는 몇 가지 상황을 알아 보자.

l  MaxDopSetToOne : MAXDOP 설정을 1로 설정 하였을 경우 병렬처리를 지원하지 않는다.

l  NoParallelDyanmicCusor : 동적 커서는 병렬계획을 지원하지 않는다.

l  NoParallelFastForwardCusor : 빠른 정방향 커서는 병렬 계획을 지원하지 않는다.

l  NoParallelCreateIndexInNonEnterpriseEdition : 비 엔터프라이즈 에디션에서는 병렬 인덱스 작업을 지원하지 않는다.

l  NoPallelPlansInDesktopOrExpressEdition : Expression 에디션 또는 2000의 Desktop 에디션은 병렬처리를 지원하지 않는다.

l  TSQLUserDefinedFunctionsNotParallelizable : 사용자 스칼라 정의 함수는 병렬처리 되지 않는다.

l  CLRUserDefinedFunctionRequiresDataAccess : CLR 사용자 정의함수는 via context 연결을 사용하여 병렬계획을 지원하지 않는다. 그러나 via context 연결이 아니라면 병렬이 가능하다.

l  NonParallelForMemoryOptimizedTables : 모든 쿼리 액세스가 최적화된 메모리 테이블에 있으면 (SQL 2014) 병렬처리를 하지 않는다.

   

   

[참고자료]

http://blogs.msdn.com/b/psssql/archive/2013/08/28/i-want-to-know-why-my-query-is-not-parallelized.aspx

   

   

강성욱 / jevida@naver.com

Microsoft SQL Server MVP

Blog : http://sqlmvp.kr

Facebook : http://facebook.com/sqlmvp





No. Subject Author Date Views
1670 Spatial Indexing 개요 (공간 인덱스) jevida(강성욱) 2016.01.11 7515
1669 Event Session을 이용한 Session Health check jevida(강성욱) 2016.01.11 6911
» SQL Server 2012 XML 플랜을 통한 병렬화 되지 않는 이유 살펴보기 jevida(강성욱) 2016.01.11 7214
1667 Event Session을 이용한 SQL OS Session Schedule check jevida(강성욱) 2016.01.11 7294
1666 Event Session을 이용한 Memory Health check jevida(강성욱) 2016.01.11 6953
1665 Event Session을 이용한 CPU Health check jevida(강성욱) 2016.01.11 8174
1664 DMV를 이용한 I/O Health check jevida(강성욱) 2016.01.11 7330
1663 CONCAT 함수 (문자열 연결하기)와 주의 사항 jevida(강성욱) 2016.01.11 27844
1662 SQL Server 2012 Columnstore Index jevida(강성욱) 2016.01.11 7489
1661 SQL Server 2012 File Stream / Table 관련 DMV jevida(강성욱) 2016.01.11 4849
1660 SQL Server2012 DMV – 메모리 덤프, 서비스, 구성 확인 jevida(강성욱) 2016.01.11 4702
1659 SQL Server2012 향상된 디버깅 기능 jevida(강성욱) 2016.01.11 4380
1658 SQL Server2012 매개 변수 구성 jevida(강성욱) 2016.01.11 3490
1657 SQL Server2012 도움말 설치 jevida(강성욱) 2016.01.11 3451
1656 SQL Server2012 Checkpoint 제어 jevida(강성욱) 2016.01.11 5260
1655 SSIS 패지키의 메타데이터 유효성 검사 중지하기 jevida(강성욱) 2016.01.11 2929
1654 SSIS 로그 보관기간 설정 (CleanUp 기간 설정) jevida(강성욱) 2016.01.11 4276
1653 SSIS 패키지 보호 레벨 jevida(강성욱) 2016.01.11 3867
1652 DATABASE의 TABLE 및 COLUMN COMMENT 출력 joe 2015.09.10 7601
1651 백업 히스토리 모니터링 jevida(강성욱) 2015.03.31 11611





XE Login