DB서버가 잘 사용되다가 느려지게 되는 현상이 있습니다.
완전 다운 되지는 않지만 속도가 느려집니다.
로그를 보면 아래와 같은 메세지를 확인할 수 있습니다.
'쿼리 프로세서에서 병렬 쿼리 실행에 필요한 스레드 리소스를 시작할 수 없습니다.'
어떤 부분을 확인해 봐야 할지 알수 있을까요?
Comment 1
-
구로동라이더
2019.04.26 15:50
DB서버가 잘 사용되다가 느려지게 되는 현상이 있습니다.
완전 다운 되지는 않지만 속도가 느려집니다.
로그를 보면 아래와 같은 메세지를 확인할 수 있습니다.
'쿼리 프로세서에서 병렬 쿼리 실행에 필요한 스레드 리소스를 시작할 수 없습니다.'
어떤 부분을 확인해 봐야 할지 알수 있을까요?
2019.04.26 15:50
과도하게 병렬로 쿼리가 수행되는지 확인 해보세요
https://gdbt.tistory.com/66
병렬 처리 제한 : MAXDOP number
병렬처리 제한의 경우, 여러개의 ,CPU로 병렬 처리를 할 경우 number 값을 기본값인 0으로 설정하면 가지고 있는 모든 CPU를 이용하여 병렬처리 할 수 있다는 것이며, 2라고 설정하면 CPU 2개만을 이용하여 병렬처리를 하도록 한다. 8이상으로는 지정하지 말 것을 권장하며 1이면 병렬처리 하지 않는 대신 시리얼 처리를 한다. 병렬 처리 제한은 엔터프라이즈 관리자의 서버 속성| 프로세스 | 병렬처리 | '쿼리 병렬 실행의 경우 최소 쿼리 계획 임계값(예상비용)'으로 설정 할 수도 있다.
이 옵션을 지정한 쿼리에 대해서만 sp_configure의 max degree of parallelism 구성 옵션을 무시합니다.
sp_configure로 구성한 값을 초과하면 MAXDOP 쿼리 힌트는 효과가 없습니다.
MAXDOP 쿼리 힌트를 사용할 때 max degree of parallelism 구성 옵션에 사용된 모든 의미 체계 규칙은 적용할 수 있습니다.
병렬처리 옵션은 자주 버그가 발생한다.
평소 5초면 수행되던 쿼리가 30초 이상이 걸린다면 해당하는 쿼리 플랜을 살펴보고 병렬 처리 플랜이 나온다면 OPTION (MAXDOP 1)을 추가하여 병렬처리를 금지하고 수행해 본다.
‘max degree of parallelism’ 구성 옵션을 기본값으로 그대로 두지 말고, 1과 같이 작은 값으로 설정하는 것이 성능 향상에 도움이 되는 경우가 종종 있습니다.
max degree of parallelism 옵션 설정:
max degree of parallelism 옵션은 고급 옵션입니다.
show advanced options를 1인 경우에만 sp_configure를 사용하여 max degree of parallelism의 구성값을 변경할 수 있습니다.
이 설정은 MSSQLSERVER 서비스를 다시 시작하지 않아도 즉시 적용됩니다.
sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
GO
sp_configure 'max degree of parallelism', 8;
RECONFIGURE WITH OVERRIDE;
GO
출처: https://gdbt.tistory.com/66 [Gravity DB Team]