2015-01-12 8 views
0

쿼리에 Netezza/Pure Data를 사용하고 있습니다. 나는 두 개의 열 A와 B에서 내부 조인 (HASH JOIN이 됨)을가집니다. A는 좋은 분포를 갖는 열이고 B는 분포가 나쁜 열입니다. 어떤 이유로 든 쿼리 플랜은 항상 B 대신 A를 JOIN의 배포 키로 사용합니다. 이는 엄청난 성능 문제를 일으 킵니다.Netezza/PureData - 해시에서 선택한 분배 키가 잘못되었습니다. JOIN

GENERATE STATISTICS는이 문제를 완화하는 데 도움이되지만 성능 제약으로 인해 모든 쿼리를 수행하기 전에 통계를 생성하는 것은 타당하지 않습니다. 배치를 실행하기 전에 수행하지만 배치 내의 각 쿼리 사이에는 수행하지 않습니다.

간단히 말해서 원본 테이블의 배포는 좋지만 가입 할 때 실제로는 배포 원본으로 사용되지 않는 나쁜 배포 키를 선택합니다.

그래서 제 질문은 GENERATE STATISTICS를 수행하지 않고 JOIN에서 배포 키 선택에 영향을주는 좋은 방법입니다. 원본 테이블의 배포 열 주위를 변경하려고 시도했지만 모든 스큐가 0.5 미만인지 여부는 알지 못하더라도 많이하지 않았습니다. 둘 다 정렬되도록, 이것은이 해결 방법은 사용할 수 있도록 철저한 계획을 강제하는 것입니다

+0

쿼리 계획에 사용되는 중간 배포본은 일반적으로 선택한 조인 열로 완전히 결정됩니다. 문제의 두 테이블에 대한 배포 열을 알려주고 쿼리에서 조인 된 열을 알려주시겠습니까? – ScottMcG

+0

또한 계획에 표시된 중개 배당 (좋음과 나쁨)을 알려주십시오. – ScottMcG

+0

JOIN 열은 위에서 언급 한 열 A와 B입니다. A는 JOIN의 소스 중 하나에 대한 분배 키로 사용됩니다. B는 어디서나 배포 키로 사용되지 않습니다. 열 A에서 분배가 좋고 열 B에서 불량입니다. 문제는 열 B가 질의 계획에서 선택 되었음 – user1836155

답변

0

당신은 분포를 임시 테이블을 만들고 강제로 수 있습니다.

세트 num_star_planner_rels = X; - X를 매우 높게 설정하십시오.

IBM Netezza 팀에 따르면 7 개 이상의 엔티티 (테이블 #)를 가진 쿼리는 "Snowflake"라고하는 탐욕스러운 쿼리 플래너를 사용할 것입니다. 7 개 이하의 사업체에서는 최적의 계획을 찾기 위해 무차별 대입 방식을 사용합니다.

철저한 검색은 많은 수의 엔티티에서 매우 비쌉니다.