높은 MAXDOP은 쿼리를 느리게 만들 수 있는가?
- Version : SQL Server 2005, 2008, 2008R2, 2012
SQL Server의 최대 병렬 처리 수준(MAXDOP) 구성 옵션은 병렬 계획에서 쿼리 실행에 사용되는 프로세서의 수를 제어한다.
- MAXDOP 설정 : http://sqlmvp.kr/140176043445
높은 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
- MAXDOP 설정 : http://sqlmvp.kr/140176043445
강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp