반응형
분산 데이터베이스에서 조인은 단일 DB의 조인과 다르게 움직인다. CPU가 충분해도 조인 대상이 여러 노드에 흩어져 있으면 네트워크 이동이 병목이 된다. 그래서 쿼리를 보기 전에 분산 키와 데이터 이동량을 먼저 봐야 한다.

두 조인 방식의 차이
| 방식 | 조건 | 특징 |
|---|---|---|
| colocated join | 두 테이블이 같은 분산 키 | 데이터 이동이 적음 |
| broadcast join | 한쪽 테이블이 작음 | 작은 테이블을 노드에 복사 |
| shuffle join | 분산 키가 다름 | 대량 이동 가능 |
| query decomposition | 조인보다 단계 분해가 유리 | 중간 결과를 작게 만듦 |
이동 비용부터 계산한다
network_cost_bytes = rows_moved * avg_row_size
join_pressure = network_cost_bytes / available_network_window
if join_pressure > 0.7:
split_query_or_change_distribution_key()
실무에서의 감각
큰 테이블 둘을 바로 붙이지 말고, 먼저 필터로 후보 집합을 줄인다. 조인은 그 다음이다.
성능 비교 순서
- EXPLAIN에서 데이터 재분배가 발생하는지 확인한다.
- 중간 결과 row 수가 최종 결과보다 훨씬 큰 쿼리는 분해를 검토한다.
- 자주 붙는 테이블끼리는 분산 키를 맞출 수 있는지 본다.
실전 적용 포인트
분산 조인은 SQL 한 줄로 보이지만 실제 비용은 노드 사이에서 얼마나 많은 데이터가 움직이느냐에 달려 있다. 작은 테이블을 broadcast할지, 큰 테이블을 shuffle할지, 먼저 필터링할지에 따라 실행 시간이 크게 달라진다.
운영 환경에서는 쿼리를 실행한 뒤 결과 시간만 보는 것으로는 부족하다. 실행 계획에서 데이터 재분배가 생겼는지, 중간 결과가 얼마나 커졌는지, 반복 실행되는 조인이 있는지를 같이 확인해야 한다.
- 조인 전 필터로 후보 row를 먼저 줄인다.
- 분산 키가 자주 조인하는 키와 맞는지 확인한다.
- 중간 결과가 최종 결과보다 큰 쿼리는 분해를 검토한다.
함께 보면 좋은 글
반응형
'Data Engineering' 카테고리의 다른 글
| 시계열 데이터 조회 API 설계: 기간, 컬럼, 대상 옵션 정리 (0) | 2026.06.14 |
|---|---|
| 거시경제 데이터 API 설계: 스냅샷과 빌드 날짜 관리 (0) | 2026.06.14 |
| 환율 데이터 수집 설계: 원천 비교와 일별 누적 기준 (0) | 2026.06.14 |
| 데이터 업데이트 스케줄 설계: 필드별 갱신 주기 관리 (0) | 2026.06.14 |
| 주기성 재무 데이터 API 설계: 연간, 분기, YTD, LTM 구분 (0) | 2026.06.14 |
