안녕하세요.
공유해 주신 내용을 보면, 여러 동시 요청이 동일한 Table에 접근하면서 여러 Worker Thread에서 Lock을 유지하는 상황에서는 Parallel Execution Plan이 Deadlock에 영향을 줄 가능성이 있습니다. 변경을 적용하기 전에 먼저 Deadlock Graph를 수집하고 분석하여, Execution Plan의 Parallel Branch가 실제 Blocking Chain에 직접 관여하는지 확인하는 것을 권장합니다.
MAXDOP의 경우, 여러 Workload에서 전반적인 Contention이 확인되는 경우에만 Server-level 설정을 변경하는 것부터 시작하는 것이 좋습니다. 반면 Deadlock이 특정 Query나 Stored Procedure에 국한되어 있다면 OPTION (MAXDOP 1)과 같은 Query-level Hint를 사용하는 것이 더 안전하고 범위가 제한적인 접근입니다. 이렇게 하면 문제가 되는 Workload의 Parallelism만 줄이고 다른 Workload에는 영향을 최소화할 수 있습니다.
또한 Cost Threshold for Parallelism도 함께 확인하는 것이 좋습니다. Parallelism 설정이 너무 낮게 잡혀 있으면 SQL Server가 Serial Plan으로도 충분히 처리할 수 있는 Query에 Parallel Plan을 적용할 수 있습니다. 이와 함께 Lock Wait, CXPACKET/CXCONSUMER Wait, Execution Plan, Transaction Duration을 모니터링하여 Parallelism이 실제 원인인지, 아니면 기존의 Indexing이나 Query Design 문제가 드러나는 것인지 확인해야 합니다.
성능에 문제가 없다면 Non-Production 환경에서 해당 Query를 MAXDOP 1로 실행해 보는 것도 좋은 검증 방법입니다. 이를 통해 전체 Server 설정을 변경하기 전에 가설을 확인할 수 있습니다. 실제로는 Index 개선, Transaction Scope 축소 또는 일관된 Access Pattern 적용이 MAXDOP 변경만으로 해결하는 것보다 Deadlock을 효과적으로 줄이는 경우도 많습니다.
도움이 되셨기를 바랍니다. 이 답변이 유용했다면 “Accept Answer” 를 클릭해 주시면 답변이 문제 해결에 도움이 되었음을 확인할 수 있습니다.
Jason