공부, 기록

[MSSQL/SQL SERVER] 병렬처리 본문

공부/DATABASE

[MSSQL/SQL SERVER] 병렬처리

무는빼주세요 2021. 4. 18. 17:32

SQL Server의 병렬처리 

SQL SERVER는 CPU가 둘 이상인 컴퓨터에서 병렬 처리를 사용할 수 있는지 여부를 확인한다(쿼리 처리비용 값을 확인 기본값인 경우 5를 넘으면 병렬 처리).

병렬로 쿼리를 처리하는 것은 대개 직렬로 처리하는 것보다 많은 리소스를 사용하지만 쿼리를 좀 더 빠르게 끝낸다. 

SQL Server 쿼리 최적화 프로그램은 서버 로드에 나쁜 영향을 미치지 않는 경우 병렬 실행 계획을 사용하여 결과를 반환.

※SQL SERVER는 디폴트값이 병렬처리를 하도록 설정되어 있다.

 

 

교환연산자 

  • Distribute Streams : 직렬 스트림을 여러 병렬 스트림으로 분할 
  • Repartition Streams : 쿼리를 최적화 하기 위해 서로 다른 스트림간 행을 스왑 
  • Gather Streams : 여러 병렬 스트림을 단일 직렬 스트림으로 병합 

 

 

병렬쿼리를 방해하는 요소 

  • 스칼라 UDF(USER DEFINITION FUNCTION)
    (EX CREATE FUNCTION dbo.~~~(@변수명 변수타입) DECLARE @변수 변수명; SELECT~~~~ return @변수)
  • 원격 쿼리
  • 동적 커서
  • 재귀 쿼리
  • 다중 문 테이블 반환 함수
    (EX CREATE FUNCTION dbo.~~(@변수명 변수타입) RETURNS TABLE AS RETURN (SELECT A,B,C~~~~~ FROM ~~ WHERE ~~)
  • TOP 키워드

SOFT NUMA(Non-Uniform Memory Access) 설정

기존의 SMP(Symmetric Multi Processor)구조인 UMA(Uniform Memory Access)는 한 번에 한 개의 프로세만 동일한 메모리에 접근이 가능했지만 NUMA는 이를 해결 하여 모든 프로세서가 로컬 메모리에 동시 접근이 가능하게하여 데드락이 걸릴 수 있는 경우를 해결하였다. 하지만 로컬메모리가 아닌 다른 메모리에 접근할 때는 링크를 타고 들어가야 하는 단점이 있다.

 

SQL Server는 SOFT(SOFTWARE) NUMA를 자동, 수동으로 설정 가능

참고 : docs.microsoft.com/ko-kr/sql/database-engine/configure-windows/soft-numa-sql-server?view=sql-server-ver15

명시적 설정(힌트)

SELECT ~~

FROM ~~

WHERE ~~

GROUP BY ~~

ORDER BY ~~

OPTION (MAXDOP 숫자) 0 : 최대 1 : 하나(병렬X) 2 이상(병렬처리 수준 2 이상)

'공부 > DATABASE' 카테고리의 다른 글

[MSSQL/SQL SERVER] DB 이관(Migration)  (0) 2021.05.02
[MSSQL/SQL SERVER] 복제 (Replication)  (0) 2021.04.25
[MSSQL/SQL SERVER] 파티션  (0) 2021.04.11
[MSSQL/SQL SERVER] 격리수준, 락(lock)  (0) 2021.04.04
[MSSQL/SQL SERVER] 실행계획  (0) 2021.03.23