

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Redshift 쿼리 계획에 대한 EXPLAIN 데이터 재분산
<a name="explain-redistribution"></a>

조인 단계에서 조각은 로컬에 저장되지 않은 데이터로 작업해야 할 수 있으며, 네트워크 전송(컴퓨팅 노드 간 데이터 이동)은 가장 비용이 많이 드는 쿼리 작업입니다.

조인에 대한 `EXPLAIN` 출력은 조인을 용이하게 하기 위해 클러스터 주위에서 데이터가 이동하는 방법에 대한 방법을 지정합니다. 이 데이터 이동은 브로드캐스팅 또는 재분산으로 수행될 수 있습니다.
+ 브로드캐스팅에서는 한쪽 조인의 데이터 값이 각 컴퓨팅 노드에서 나머지 모든 컴퓨팅 노드로 복사되어 모든 컴퓨팅 노드에 대한 데이터 복사가 완료됩니다.
+ 재분산에서는 데이터 값이 현재 조각에서 새로운 조각(다른 노드의 조각일 가능성이 높음)으로 전송됩니다. 조인 열 중 하나가 분산 키인 경우에는 조인에 참여하는 나머지 테이블의 분산 키와 일치하도록 데이터가 재분산됩니다. 두 테이블 모두 조인 열 중 하나에 분산 키가 없는 경우에는 두 테이블 모두 분산되거나, 혹은 내부 테이블이 모든 노드로 브로드캐스팅됩니다.

또한 `EXPLAIN` 출력은 내부 테이블과 외부 테이블을 참조합니다.
+ 내부 테이블이 먼저 스캔되어 쿼리 계획 하단 가까운 곳에 표시됩니다. 내부 테이블은 빌드 테이블의 일치하는 행에 대해 프로브되는 테이블입니다. 보통은 메모리에 보관되는 내부 테이블은 해싱에서 소스 테이블이고, 가능한 경우 조인하는 두 테이블 중 더 작은 테이블입니다.
+ 외부 테이블은 내부 테이블을 대상으로 일치하는 행의 소스이고, 보통 디스크에서 읽습니다. 쿼리 옵티마이저는 최근 실행한 `ANALYZE` 명령의 데이터베이스 통계를 기준으로 내부 테이블과 외부 테이블을 선택합니다. 쿼리의 `FROM` 절에서 테이블 순서로는 내부 테이블과 외부 테이블을 구분할 수 없습니다.

쿼리를 용이하게 하기 위해 데이터의 이동 방식은 쿼리 계획에서 다음 속성을 사용하여 구분합니다.
+ **DS\_BCAST\_INNER** - 전체 내부 조인 테이블의 사본이 모든 컴퓨팅 노드로 브로드캐스트되고 있음을 나타냅니다.
+ **DS\_DIST\_ALL\_NONE** – 이미 내부 테이블은 `DISTSTYLE ALL`을 사용하여 모든 노드에 분산되었기 때문에 재분산은 필요하지 않습니다. 전체 테이블이 모든 컴퓨팅 노드에 배치됩니다.
+ **DS\_DIST\_NONE** – 해당하는 조각이 컴퓨팅 노드에 공동 배치되기 때문에 재분산은 필요하지 않습니다. 네트워크 전송이 없기 때문에 가장 효율적인 옵션입니다.
+ **DS\_DIST\_INNER** – 내부 조인 테이블이 재분산되었음을 나타냅니다. 내부 테이블이 훨씬 작거나 자주 업데이트되지 않는 경우 해당 테이블을 `DISTSTYLE ALL`로 변경하는 방법을 고려합니다.
+ **DS\_DIST\_OUTER** – 외부 조인 테이블이 재분산되었음을 나타냅니다. 외부 테이블이 훨씬 작거나 자주 업데이트되지 않는 경우 해당 테이블을 `DISTSTYLE ALL`로 변경하는 방법을 고려합니다.
+ **DS\_DIST\_ALL\_INNER** – 조인 테이블이 `DISTSTYLE ALL`을 사용하기 때문에 내부 조인 테이블이 단일 노드로 전송되고 있음을 나타냅니다. 이 조인은 단일 노드에서 실행되며 느릴 수 있습니다.
+ **DS\_DIST\_BOTH** - 조인의 두 테이블이 모든 노드에 재분산되고 있음을 나타냅니다. 이는 가능한 최악의 옵션입니다.