기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Redshift 쿼리 계획에 대한 EXPLAIN 데이터 재분산
조인 단계에서 조각은 로컬에 저장되지 않은 데이터로 작업해야 할 수 있으며, 네트워크 전송(컴퓨팅 노드 간 데이터 이동)은 가장 비용이 많이 드는 쿼리 작업입니다.
조인에 대한 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 - 조인의 두 테이블이 모든 노드에 재분산되고 있음을 나타냅니다. 이는 가능한 최악의 옵션입니다.