motion
데이터베이스의 여러 세그먼트 간에 데이터를 이동시키는 작업을 나타낸다.
motion 종류
- Broadcast motion
- 테이블의 데이터를 모든 세그먼트에 복사하는 작업이다.
- 이 방식은 일반적으로 작은 테이블과 큰 테이블을 조인할 때 사용된다. 작은 테이블의 모든 데이터를 모든 세그먼트로 보내서 큰 테이블의 각 세그먼트에서 조인을 수행할 수 있도록 한다.
- 주로 데이터 크기가 작고 모든 세그먼트에서 데이터를 필요로 할 때 효율적이다.
- Redistribute motion
- 데이터를 지정된 분산 키에 따라 세그먼트 간에 재분배하는 작업이다.
- 주로 조인 키가 두 테이블의 분산 키와 일치하지 않을 때 발생한다. 데이터를 조인 키 기준으로 재분배하여 동일한 세그먼트에 조인할 데이터를 모으는 역할을 한다.
- 이 작업은 많은 네트워크 트래픽을 발생시킬 수 있으므로 성능에 큰 영향을 줄 수 있다.
- Gather motion
- 모든 세그먼트에서 데이터를 모아 단일 세그먼트 또는 마스터 노드로 전송하는 작업이다.
- 보통 쿼리의 최종 결과를 클라이언트에 반환할 때 사용된다. 여러 세그먼트에서 계산된 결과를 마스터 노드에서 수집하여 반환해야 하기 때문에 발생한다.
- LIMIT 절이 포함된 쿼리에서 자주 발생하며, 최종 결과를 하나의 세그먼트에서만 처리해야 할 때도 사용된다.
해당 작업은 Explain query 할 때 확인할 수 있다.
Broadcast Motion
여기서 3:1은 테이블의 데이터를 모든 3개 세그먼트에 복사하여 전송하는 것을 의미한다.
Broadcast Motion 3:1 (slice2; segments: 3) (cost=... rows=...)
Redistribute Motion
여기서 6:6은 세그먼트 간에 데이터를 재분배하는 과정이다. 6개의 세그먼트에서 데이터를 받아 또 다른 6개의 세그먼트로 전송한다.
각 세그먼트가 자신에게 할당된 데이터를 처리하는데, 조인 키가 같은 데이터가 동일한 세그먼트로 가도록 재분배하는 것이 핵심이다.
Redistribute Motion 6:6 (slice2; segments: 6) (cost=... rows=...)
Gather Motion
여기서 6:1은 6개의 세그먼트에서 데이터를 모아 하나의 세그먼트로 전송하는 과정을 의미한다.
Gather Motion 6:1 (slice1; segments: 6) (cost=... rows=...)
반응형
'DB > PostgreSQL' 카테고리의 다른 글
cgroup (0) | 2024.11.18 |
---|---|
GPDB - Query Plan 예시 (0) | 2024.10.01 |
GPDB 분산키 Randomly vs 특정 컬럼 (0) | 2024.09.12 |
PostgreSQL 로그인 권한 - 연결 실패 (0) | 2024.08.31 |
쿼리 튜닝용 파라미터 (0) | 2024.08.24 |