높은 MAXDOP은 쿼리를 느리게 만들 수 있는가?

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server의 최대 병렬 처리 수준(MAXDOP) 구성 옵션은 병렬 계획에서 쿼리 실행에 사용되는 프로세서의 수를 제어한다.

 

높은 MAXDOP은 상황에 따라 쿼리를 느리게 만들 수 있다.

 

낮은 DOP가 반드시 긴 런타임을 의미하지는 않는다. 테스트를 위해 간단한 OLTP 쿼리를 실행하였으며 서로 다른 MAXDOP를 설정하였다. CPU 시간 및 duration은 "SET STATICSTICS TIME ON"을 사용하여 측정 한 결과이다. 실행을 위한 데이터는 모두 메모리에 있었다. 두 경우 소요된 시간은 약 700ms 였으며 낮은 DOP의 경우에도 더 오래 걸리지는 않았다.

 

 

큰 쿼리의 경우에는 높은 DOP에서 실행 속도가 느린 경우도 발생 하였다. 아래 결과는 8코어 서버에서 실행한 결과 이다.

 

여기서 오해하지 말아야 할 부분이 무조건 병렬처리가 높다고 해서 쿼리의 성능이 나쁘다는 것은 아니다. 여러 개의 스레드가 더 많은 쿼리를 빨리 실행 할 수도 있다.

 

실행 계획은 프로세서, 메모리 등의 환경에 따라 다양한 영향을 받기 때문에 병렬 처리가 발생한다고 해서 느린 쿼리라고 생각하지 않기를 바란다.

 

마이크로소프트에서는 SQL Server의 병렬 처리 수준 최대 구성에 옵션에 대하여 몇 가지 권장 사항을 제시 하고 있다.

  • NUMA 구성 서버에 대한 MAXDOP은 각 NUMA 노드에 할당된 CPU의 수를 넘지 않아야 한다.
  • 하이퍼스레딩을 사용하는 서버는 실제 프로세스서의 수를 넘지 않아야 한다.

 

SQL Server 2008부터는 MAXDOP 값은 리소스 관리자를 사용하여 구성된 값을 초과하는 경우 데이터베이스 엔진 리소스 관리자의 MAXDOP 값을 사용한다. 권장사항에 따르면 8개 이상의 프로세서를 사용하는 경우 MAXDOP = 8, 8개 이하의 프로세서를 사용하는 경우는 MAXDOP = 0 ~N으로 권장한다.

 

 

[참고자료]

  • Can High MaxDOP make a query SLOWER? :

http://www.brentozar.com/archive/2013/12/q-can-high-maxdop-make-a-query-slower/

  • SQL Server "병렬 처리 수준 최대" 구성 옵션에 대 한 지침 및 권장 사항 :

http://support.microsoft.com/kb/2806535

 

 



강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 36470
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 19419
1914 SQL Server 메모리 병목 현상 식별 jevida(강성욱) 2016.10.13 2011
1913 SQL Server 시작 옵션 사용 jevida(강성욱) 2016.10.13 1942
1912 Ring buffer를 활용한 External Memory Pressure 확인 jevida(강성욱) 2016.10.12 1375
1911 Memory Pressure jevida(강성욱) 2016.10.12 1176
1910 64비트 버전의 SQL Server 버퍼 풀 메모리 페이지 수 줄이는 방법 jevida(강성욱) 2016.10.12 2830
1909 누락된 공유 잠금 (Missing Shared Locks) jevida(강성욱) 2016.10.12 1616
1908 Ad Hoc Distributed Queries 옵션 jevida(강성욱) 2016.10.12 3406
» 높은 MAXDOP은 쿼리를 느리게 만들 수 있는가? jevida(강성욱) 2016.10.12 1405
1906 변경된 테이블 이름 복구하기 jevida(강성욱) 2016.10.12 1385
1905 Sys,dm_exec_connections jevida(강성욱) 2016.10.12 2125
1904 SQL Server 시작 매개 변수 설정 jevida(강성욱) 2016.10.12 2583
1903 AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상 jevida(강성욱) 2016.10.12 2059
1902 쿼리 대기 옵션 jevida(강성욱) 2016.10.12 1637
1901 Index create memory 설정 jevida(강성욱) 2016.10.12 1342
1900 Min memory per query 옵션 jevida(강성욱) 2016.10.12 1852
1899 SQL Server 에디션 다운그레이드와 제한된 기능 확인 jevida(강성욱) 2016.10.12 2181
1898 Downgrade from SQL Server Ent to Std Edition jevida(강성욱) 2016.10.12 1407
1897 트랜잭션 로그 여유 공간 모니터링 jevida(강성욱) 2016.10.12 1471
1896 SQL Server가 서비스 격리를 처리하는 방법 jevida(강성욱) 2016.10.12 1201
1895 쿼리 매개변수화 확인하기 jevida(강성욱) 2016.10.12 1494





XE Login