반응형

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

분산 조인 성능 비교: colocated join과 쿼리 분해 기준 핵심 흐름과 판단식 도식
분산 조인 성능 비교: colocated join과 쿼리 분해 기준 핵심 구조도

두 조인 방식의 차이

방식 조건 특징
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를 먼저 줄인다.
  • 분산 키가 자주 조인하는 키와 맞는지 확인한다.
  • 중간 결과가 최종 결과보다 큰 쿼리는 분해를 검토한다.

함께 보면 좋은 글

반응형

+ Recent posts