2013-04-02 6 views
1

누구든지 일반적인 지침 (시행 착오를 넘어)이 있는지 알아야하며, 다양한 유형의 쿼리에 대해 최적의 파티셔닝/인덱싱을위한 훌륭한 전략을 정의해야합니다. 그린 플럼?Greenplum DB에서 파티셔닝 전략을 선택하는 것이 더 좋습니다. [Big Data]

Greenplum에는 관리자 가이드에 대한 조언이 몇 개 있습니다.하지만 진실은 postgres 문서의 사본을 거의 복사하는 것이고 일부는 조언이 분명하지만 (IE : 테이블이 너무 커 메모리),이를 달성하기위한 좋은 전략을 정의하는 것만으로는 충분하지 않습니다.

일반적으로 Greenplum 데이터베이스는 매우 큰 테이블 (수백 GB 이상)을 가지고 있으며 하드웨어는 이러한 종류의 사용을 위해 특별히 선택되지만 대부분의 경우 실제로 큰 데이터베이스 (IE : 한 번 60 개 필드 테이블과 2 억 개 이상의 행을 가진 데이터베이스를 보유하고 있었으며 하루에 4-8 백만 개의 레지스트리가 증가했습니다.

예상되는 범위를 거의 동일한 크기 (예 : 날짜 범위)로 구분하여 선택하는 것과 같은 적절한 파티션을 선택하는 몇 가지 기술이 있음을 알고 있습니다. 그러나 인덱스에 의존하려고하는 다른 데이터베이스의 경우에도 Greenplum은 인덱스가 전혀 사용되지 않도록 임의의 페이지 비용과 같은 일부 설정에 더 큰 가중치를 부여하여 완전히 실망시키지 않는다는 사실도 있습니다.

그러나 이것이 완전히 역효과를내는 상황을 읽었습니다. 테이블에 192 개가 넘을 때까지 분할하지 말아야 할 GP에 따르면 64GB 램 각각 3 개의 노드가 있다고 가정 해보십시오.하지만 인덱스가 사용되지 않으므로 노드 당 64gb까지 스캔 할 수 있습니다. --- 이것은 여전히 ​​빠르지 만 인덱스 사용을 강요하면 20 초에서 수 밀리 초로 내려갈 수 있습니다.

또 다른 알려진 경우는 분할 할 때 오버 헤드로 인해 쿼리가 훨씬 느려집니다.

그래서, 다시 원래의 질문에 :
사람이 당신의 분할/인덱싱 전략을 정의하는 방법에 대한 좋은 회사 조언이 있습니까?
일부 ETL의 경우 소스로부터의 테스트 쿼리가 절반에서 최대 1 시간이 걸릴 수 있으므로 추적 및 오류로 인해 생산성이 크게 저하됩니다.

감사합니다.

답변

0

귀하의 질문에 대한 대답은 귀하의 사용자가 테이블에 액세스하는 방법에 대한 자세한 내용은 &에 달려 있다고 생각합니다. 날짜 범위 파티셔닝의 경우 사용자가 일반적으로 하루 동안의 데이터를 찾으면 일일 파티션을 이해할 수 있습니다. 사용자가 일반적으로 더 긴 날짜 범위를 쿼리하면 매일 파티션이 오버 헤드를 추가합니다. Greenplum DB 테이블의 각 파티션 또는 하위 파티션은 별도의 테이블 (따라서 파일 시스템의 별도 파일)로 취급되므로 쿼리를 만족시키기 위해 더 많은 파티션을 스캔해야 할 때마다 액세스해야하는 열린 파일이 늘어납니다. 사용자가 데이터에 액세스하는 방법을 이해하면 가능한 분할 전략에 대한 더 나은 단서를 얻을 수 있습니다.

하이브리드 파티셔닝 전략이 유용 할 수도 있습니다. 특정 유즈 케이스는 가장 최근 주/월에 대한 일별 파티션이있는 테이블을 선호하며, 이전 파티션은 액세스 빈도가 적어 보고서 작성/분석 쿼리 대 행 조회 또는 유사 작업을 수행하기 때문에 시간이 더 오래 걸릴 수 있습니다.

색인 생성과 관련하여 Greenplum DB의 옵티마이 저가 색인 액세스보다 테이블 스캔을 선호하지만 색인이 의미가있는 곳이 있습니다. 어떤 경우에는 비트 맵 인덱스에 대한 행운을 보았습니다.

불행히도 GPDB를 튜닝하는 것은 다른 데이터베이스와 마찬가지로 여전히 예술적인 형태이므로 일정한 금액의 시행 & 오류는 아마도 불가피합니다.