SMP(Symetric Multiprocessing) vs MPP(Massively Parallel Processing)

 

SMP(Symetric Multiprocessing) 

- 대칭형 다중처리 시스템. 두 개 또는 그 이상의 프로세서가 한 개의 공유된 메모리를 사용하는 다중 프로세서 컴퓨터 아키텍처 이다. 현재 사용되는 대부분의 다중 프로세서 시스템은 SMP 아키텍처를 사용한다.

   

SMP는 운영체제와 메모리를 공유하는 여러 프로세서가 프로그램을 수행하는 것을 말한다. SMP 프로세서는 메모리와 입출력 버스 미및 데이터 경로를 공유하며 또한 하나의 운영체제가 모든 프로세서를 관리한다. 보통 2개이상의 프로세서로 이루어 진다.

   

SMP 시스템은 작업을 위한 데이터가 메모리의 어느 위치에 있는지 상관없이 작업할 수 있도록 프로세서에게 허용 한다. 운영체제에서 지원한다면 SMP 시스템은 부하의 효율적 분배를 위해 프로세서간 작업 스케쥴링을 쉽게 조절 할 수 있다.

   

SMP 시스템은 보통  MPP에 비하여 병렬 프로그래밍이 훨씬 쉽고 프로세서간 작업 분산(workload balance)을 시키기가 훨씬 용이하지만 확정성은 MPP에 비하여 취약하다. 또한 많은 사용자가 동시에 데이터베이스 접근하여 일을 처리하는 OLTP 작업에서 강점을 보인다.

   

   

   

   

MPP(Massively Parallel Processing)

- 고도 병렬처리 시스템. 프로그램을 여러 부분으로 나누어 여러 프로세서가 각 부분을 동시에 수행 시키는 것. 이때 각 프로세서는 운영체계와 메모리를 따로 가지고 일을 수행 하며 각 프로세서간에는 메시지 패싱과 같은 기법을 이용하여 통신을 한다. 비슷한 개념으로 NUMA 아키텍처가 있다.

   

따라서 하나의 프로그램을 수행하는데 수백 혹은 수천개의 프로세서를 이용 할 수 있다. MPP의 성능을 사용하려면 프로그램을 독립적으로 수행되는 여러 부분을 나누고 각 프로세서가 다른 프로세서와 정보를 주고받는 일을 효율적으로 할 수 있는 하드웨어 구조와 이를 뒷밤침 하는 운영체제의 성능이 필요하다.

   

MPP시스템은 OLTP 보다 여러 데이터베이스를 동시에 검색하는 의사결정시스템이나 데이터웨어하우징 시스템에서 보다 나은 성능을 나타낸다. 또한 같은 패턴이 반복되는 이미지 프로세싱에도 적합한 것으로 알려져 있다.

   

   

   

   

[참고 자료]

Shared-Memory Multiprocessors - Symmetric Multiprocessing Hardware

- http://cnx.org/content/m32794/latest/

   

SMP - http://www.answers.com/topic/symmetric-multiprocessing

   

MPP (wiki) - http://en.wikipedia.org/wiki/Massively_parallel_(computing)

'SQL Server > SQL 용어' 카테고리의 다른 글

뮤텍스(Mutex) vs 세마포어(Semaphore)  (0) 2015.07.22
SARG(검색 제한자)  (0) 2015.07.22
read-ahead(미리읽기)  (0) 2015.07.22
NDV(Number of Distinct Value)  (0) 2015.07.22
부분 범위 처리 (Partial Range Scan)  (1) 2015.07.22

뮤텍스(Mutex) vs 세마포어(Semaphore)

 

뮤텍스(Mutex)

-  제어되는 섹션에 하나의 쓰레드만을 허용하기 때문에 해당 섹션에 접근하려는 다른 쓰레드들을 강제적으로 막음으로써 첫 번째 스레드가 해당 섹션을 빠져나올 떄 까지 기다린다.

   

예) Niclas Winquits씨가 2005년에 쓴 화장실 비유

뮤텍스는 화장실에 들어가기 위한 열쇠로 비유할 수 있다. 즉 화장실에 들어갈 수 있는 열쇠를 한 사람이 갖고 있다면 한번에 그 한 사람만 들어 갈 수 있다. 화장실에 들어간 사람이 나오면 줄을 서서 기다리는 다음 사람(대기열-큐)에게 열쇠를 주게 된다.

   

   

   

   

세마포어(Semaphore)

- 공유 리소스에 접근할 수 있는 최대 허용치만큼 동시에 사용자 접근을 할 수 있게 한다. 쓰레드들은 리소스 접근 요청을 할 수 있고 세마포어에서는 카운트가 하나씩 줄어들게 되며 리소가 모두 사용 중 인경우(카운트 0) 다음 작업은 대기를 하게 된다. 리소스 사용을 마쳤다는 신호를 보내면 카운트가 하나 늘어나게 되고 다음 작업이 사용 할 수 있다.

   

예) 세마포어는 빈 화장실 열쇠의 갯수에 비유할 수 있다. 즉 비어있는 칸 만큼 열쇠가 있다고 가정하면 사람들이 화장실에 들어갈 때 마다 열쇠의 숫자는 줄어 들게 된다. 화장실 칸이 다 찰 경우 카운트는 0이 되며 다음 사람은 줄을 서서 기다린다. 볼일을 끝내고 나오면 리소스 사용을 마쳣다는 신호로 카운트를 하나 늘이고 다음 사람에게 부여 한다.

   

SARG(검색 제한자)

 

SARG (Search argument) : 옵티마이저가 인덱스를 선택할 수 있도록 해준느 WHERE 절의 검색 조건.

   

참고 링크 :  http://sqlblog.com/blogs/ben_miller/archive/2008/08/29/what-is-a-sarg-exactly-training-classes-and-knowledge-retention.aspx

read-ahead(미리읽기)

 

미리읽기 : 캐쉬에서 찾지 못한 페이지를 다음에 읽어야 한다고 예측될 때 현재 읽는 스레드와 다른 별도의 스레드에서 다음에 읽어야 할 페이지들을 미리 캐쉬에 올려놓음으로써 캐쉬 적중율(Cash  hit ratio)을 높이는 방법이다.

   

MSDN : http://msdn.microsoft.com/ko-kr/library/ms191475.aspx

블로그 : http://sqlsql.tistory.com/10

NDV(Number of Distinct Value)

 

NDV(Number of Distinct Value) 특정 Column에unique 값이 얼마나 존재하는지를 뜻한다.

예를들어 A column에 값이{1, 2, 3, 4, 5, 6, 7, 8, 9}가 존재한다면 NDV는 9가 되는 것이다.

부분 범위 처리 (Partial Range Scan)

 

부분 범위 처리 (Partial Range Scan) :

어떤 SQL에서 WHERE 절에 주어진 조건을 만족하는 전체범위를 처리하지 않고 운반단위(Array size)까지만 먼저 처리하여

그 결과를 추출시킨 뒤 다음 작업을 계속하겠다는 사용자의 요구가 있을 때까지 잠정적으로 수행을 멈추는 처리 방식.

   

모든 데이터를 처리하지 않고 일부만 처리하여 결과를 추출하므로 사용자가 아무리 넓은 범위의 처리를 요구하더라도 아주 빠른

수행속도를 보장 받을 수 있다.

   

   

부분 범위 처리 조건 :

1. WHERE 절에 GROUP BY 또는  ORDER BY 절이 있으면 부분 범위 처리를 할 수 없다.

2. UNION, MINUS, INTERSECT를 사용한 SQL은 부분 범위 처리를 할 수 없다.

   

단, 옵티마이져에 의해 선택된 인덱스와 ORDER BY에 사용된 컬럼이 동일 하다면 인덱스 순서가 곧 ORDER BY가 되므로 옵티마이져는

ORDER BY를 무시하고 인덱스로 처리되는 실행게획을 수립하여 부분범위 처리를 한다.

   

주의점 :

ORDER BY에 사용된 컬럼의 순서와 개수가 생성된 인덱스와 동일해야만 ORDER BY가 무시 되므로 원하는 결과가 인덱스와 동일하다면

가능한 ORDER BY 절을 사용하지 않는 것이 좋다.

+ Recent posts