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

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

높은 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
1910 64비트 버전의 SQL Server 버퍼 풀 메모리 페이지 수 줄이는 방법 jevida(강성욱) 2016.10.12 2433
1909 누락된 공유 잠금 (Missing Shared Locks) jevida(강성욱) 2016.10.12 1560
1908 Ad Hoc Distributed Queries 옵션 jevida(강성욱) 2016.10.12 3047
» 높은 MAXDOP은 쿼리를 느리게 만들 수 있는가? jevida(강성욱) 2016.10.12 1305
1906 변경된 테이블 이름 복구하기 jevida(강성욱) 2016.10.12 1290
1905 Sys,dm_exec_connections jevida(강성욱) 2016.10.12 1908
1904 SQL Server 시작 매개 변수 설정 jevida(강성욱) 2016.10.12 2479
1903 AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상 jevida(강성욱) 2016.10.12 1782
1902 쿼리 대기 옵션 jevida(강성욱) 2016.10.12 1564
1901 Index create memory 설정 jevida(강성욱) 2016.10.12 1230
1900 Min memory per query 옵션 jevida(강성욱) 2016.10.12 1677
1899 SQL Server 에디션 다운그레이드와 제한된 기능 확인 jevida(강성욱) 2016.10.12 2121
1898 Downgrade from SQL Server Ent to Std Edition jevida(강성욱) 2016.10.12 1336
1897 트랜잭션 로그 여유 공간 모니터링 jevida(강성욱) 2016.10.12 1342
1896 SQL Server가 서비스 격리를 처리하는 방법 jevida(강성욱) 2016.10.12 1144
1895 쿼리 매개변수화 확인하기 jevida(강성욱) 2016.10.12 1428
1894 SQL Server에서 Drop 및 Delete 사용자 찾기 jevida(강성욱) 2016.10.12 1628
1893 SQL Server 트랜잭션 로그 읽기 jevida(강성욱) 2016.10.12 2067
1892 MaxBCPThreads에 따른 BCP 병렬출력 jevida(강성욱) 2016.10.11 1088
1891 확장이벤트와 dm_os_wait_stats 대기유형 매핑 jevida(강성욱) 2016.10.11 1883





XE Login