병렬 처리 우수 사례


9

병렬 처리를 설정하는 모범 사례는 무엇입니까? SQL Server가 기본적으로 0사용 가능한 모든 프로세서를 사용 하도록 알고 있지만 어떤 경우에이 기본 동작을 변경 하시겠습니까?

OLTP 워크로드의 경우 병렬 처리를 해제해야합니다 (maxdop을 설정)해야합니다 (이 기사를 찾아야 함 1)를 기억합니다. 나는 당신이 이것을 할 것인지 완전히 이해하지 못한다고 생각 합니다.

언제 maxdop을 (를) SQL Server (0)에 유지 하시겠습니까? 병렬 처리를 언제 해제 하시겠습니까 (1)? 언제 특정 수의 프로세서에 maxdop을 명시 적으로 기술 하시겠습니까?

병렬 처리의 원인은 무엇입니까?

답변:


11

일반적으로 병렬 처리를 비활성화하지 않으려는 경우 관리 작업에 대해서도 병렬 처리를 비활성화합니다. 최선의 방법은 인덱스 추가 또는 수정을 통해 또는 스키마 변경을 완전히 통해 병렬 처리를 유발하는 쿼리를 수정하는 것입니다.


업데이트 된 질문을 바탕으로 ...

일부 사람들은 데이터베이스 나 스키마를 제어 할 수없고 단일 쿼리가 전체 시스템을 인수하기를 원하지 않기 때문에 공급 업체 구축 응용 프로그램의 경우 MAXDOP를 1로 변경합니다.

개인적으로 나는 드문 경우를 제외하고는 항상 MAXDOP를 0으로 유지합니다.

병렬 처리는 사전 설정된 설정 (병렬 설정의 비용 임계 값)을 초과하는 실행 비용을 가진 실행 계획 내 단일 작업으로 인해 발생합니다. 이러한 상황이 발생하면 SQL Server는 병렬 처리를 시작하여 프로세스 속도를 높이기 위해 요청을 멀티 스레딩 할 수 있습니다. 병렬 처리에 대한 비용 임계 값의 기본값은 5입니다. 많은 OLTP 플랫폼에서 병렬 처리가 비용이 많이 드는 쿼리에만 적용되도록 최대 30 또는 40까지 늘리려 고합니다.


4

SQL Server (마지막 밀레니엄, SQL Sever 6.5)를 사용하여 항상 병렬 처리 설정을 끄거나 수정할 필요가 없었습니다.

@StanleyJohns의 대답에 따르면 ...
짧고 날카로운 쿼리가 포함 된 OLTP 시스템은 비용 임계 값 ( "병렬 처리에 대한 비용 임계 값" )에 도달해서는 안되므로 중요하지 않습니다. 병렬로 진행되는 쿼리가 있다면 입증되지 않은 것을 기반으로 쿼리를 제한하는 이유는 무엇입니까?

순수한 OLTP 시스템도 아직 보지 못했습니다. 극단적으로, 아마도 있을지 모르지만, 평균 시스템도 그것에 대해보고하고 있습니다. 하루 종일 또는 하룻밤 사이. 이러한 쿼리는 병렬화되어 혜택을 볼 가능성이 높습니다.

오늘날 사용할 수있는 CPU 코어가 너무 많으면 차이를 측정하고 알아볼 수있는 경우 전역 "최대 병렬 처리 수준" 을 설정하는 경우가 있을 수 있습니다.

내가 말했듯이, 내 제안은 아무것도하지 않는 것 입니다. @mrdenny와 비슷하지만 "순수한 OLTP 시스템과 같은 것은 없습니다"를 포함시킵니다.

BIOS 수준에서 하이퍼 스레드 코어를 비활성화 하는 마일리지가있을 수 있지만 다른 질문입니다 ...

또한 참조하십시오


3

병렬 처리의 원인은 무엇입니까? :라는 설정이 cost threshold for parallelism있습니다. 이 임계 값을 초과하면 병렬 처리가 사용됩니다 (전제 조건이 충족되는 경우).

OLTP 시스템의 특성은 많은 수의 빠르고 짧은 트랜잭션을 갖는 것입니다. 병렬 처리를 사용하면 쿼리가 병렬로 처리되도록 분할 된 후 리턴되기 전에 다시 연결되므로 쿼리 처리 시간이 증가합니다. 따라서 maxdop을 1로 설정하라는 제안이 표시됩니다.

maxdop을 1로 설정하면 한 가지 장점은 병렬 처리가 기본적으로 해제되어 있지만을 사용하여 쿼리 수준에서 활성화 할 수 있다는 것 query hints입니다.

큰 결과 집합이 반환되는 데이터웨어 하우스 시스템 또는 OLAP 시스템의 경우 병렬 처리를 사용하여 쿼리를 분할하면 이점이있을 수 있습니다. 이를 통해 쿼리는 사용 가능한 코어를 활용하여 쿼리 처리 시간을 단축 할 수 있습니다.


2

복잡한 쿼리가 여러 프로세스로 분할되어 실행하는 데 몇 시간이 걸리는 것을 보았습니다. 일반적으로 sp_who2에서 동일한 spid를 가진 여러 항목으로 볼 수 있습니다.

maxdop 1로 변경하고 1 분 이내에 쿼리가 실행되었습니다.

여기서 교훈은 병렬 처리와 관련하여 엔진이 항상 올바르게 작동하지는 않는다는 것입니다.


0

우리는 4 개의 코어가있는 서버와 8 개의 코어가있는 서버가 많이 있습니다. OLTP 시스템 사용자의 CPU 대기 시간 (및 시간 초과 문제)을 피하기 위해 몇 개의 코어를 사용하여 병렬 처리 (MAXDOP)를 1로 설정하는 것이 좋습니다. 코어 수가 적은 OLAP 또는보고 서버의 경우 가장 큰 쿼리 만 병렬 처리를 사용하도록 MAXDOP를 2로 설정하고 비용 임계 값을 30으로 설정하는 것이 좋습니다 (시나리오에 따라 높거나 약간 낮을 수 있음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.