distribution 변경 및 브로드캐스트 감소

Nick Lamb -

ClustrixDB의 distribution은 데이터가 클러스터에 저장되는 방식을 결정합니다. ClustrixDB의 데이터 distribution에 대한 자세한 내용은 설명서에서 다음 문서를 참조하십시오: Managing Data Distribution

v7.5에서 색인의 기본 distribution은 1입니다. 이것은 컬럼의 개수인 현재 기본값과는 다릅니다. 재분배 작업은 클러스터 전체에서 디스크 사용량에 따라 최상의 분산을 제공하도록 설계되었지만 대부분의 경우 성능이 저하 될 수 있으므로 이 작업을 사용하지 않도록 설정하고 아래의 자세한 지침에 따라 재분배 작업을 수행하는 것이 좋습니다. 둘째로, 재분배 작업은 아래에서 권장하는 많은 변경 사항을 취소할 수 있으므로 진행하기 전에 비활성화해야합니다.

다음과 같이 재분배 작업을 비활성화할 수 있습니다.

set global task_rebalancer_redistribute_interval_ms=0;

재분배가 성능을 저하시키는 이유는 주로 브로드캐스트 때문입니다. 브로드캐스트는 네트워크에서 트래픽 증가를 유발하고 불필요하게 성능상의 이점없이 경합을 더욱 유발합니다. 아래 정보는 다양한 재분배 작업으로 이점을 얻게 되는 테이블과 인덱스를 식별하는 방법을 설명합니다. 재분배 작업은 테이블을 재작성하므로 많은 대형 테이블에서 오랜 시간이 걸릴 수 있습니다. 특정 변경 사항에 대해 궁금한 점이 있으면 검토해 드리겠습니다.

브로드캐스트

브로드 캐스트는 노드가 다른 노드에 추가 정보를 요청할 때입니다. 이를 통해 병렬 처리를 가능하게 하지만 노이즈/경합을 야기할 수도 있습니다. 스키마 또는 쿼리 변경을 통해 불필요하거나 도움이 되지 않는 브로드캐스트를 제거하면 시스템 전체에 도움이 될 수 있습니다.

발견하기:

QPC 쿼리는 최근에 실행 된 쿼리에 대한 정보를 제공합니다. 이 테이블을 보면 문제를 일으킬 수 있는 최근 쿼리를 확인할 수 있습니다. 이것을 사용하여 명확히 브로드캐스트를 살펴보려면 다음과 같이 하십시오.

SELECT statement, 
       broadcasts, 
       exec_ms, 
       counts, 
       rows_read 
FROM   system.qpc_queries 
ORDER  BY broadcasts DESC 
LIMIT  5\G

ALLNODES:

잠재적 ALLNODES 후보:

  • 테이블 크기 10MB 미만
  • Write 빈도 천(1,000) 미만
  • Read 빈도 백만(1,000,000) 초과
  • 현재 ALLNODES가 아님

쓰기가 거의 없는 작은 테이블을 변경하면 테이블 데이터를 가져 오기 위해 다른 노드로 브로드캐스팅하지 못하도록 합니다. 이것은 특히 큰 테이블과의 JOIN에 사용되는 작은 테이블에 도움이 됩니다. 쓰기가 자주 발생하는 테이블은 ALLNODES로 변경하면 안됩니다. 파티션 테이블도 ALLNODES로 변경하면 안됩니다.

SELECT `database`, 
       `table`, 
       reads, 
       writes, 
       bytes 
FROM   (SELECT `database`, 
               `table`, 
               Sum(reads)                                  AS reads, 
               Sum(inserts) + Sum(deletes) + Sum(replaces) AS writes, 
               Sum(bytes)                                  AS bytes, 
               Count(DISTINCT( `index` ))                  AS paths, 
               Count(DISTINCT( slice ))                    AS slices, 
               Count(DISTINCT( replica ))                  AS replicas 
        FROM   system.container_stats cs 
               JOIN system.table_replicas tr 
                 ON cs.replica = tr.replica 
        GROUP  BY 1, 
                  2) AS a 
WHERE  bytes < 10 * 1024 * 1024 
       AND writes < 1000 
       AND reads > 1000000 
       AND slices > paths 
ORDER  BY 1, 
          2; 

테이블을 ALLNODES로 변경하려면 다음과 같이 할 수 있습니다.

sql> ALTER TABLE foo.bar REPLICAS=ALLNODES;

Index Distribution:

  • 잠재적 Index Distribution 후보
  • DISTRIBUTE=2인 단일 컬럼 인덱스 
  • 거의 고유한 첫 컬럼이 있는 컬럼수 보다 큰 DISTRIBUTE를 가진 다중 컬럼 인덱스


DISTRIBUTE=2인 단일 컬럼 인덱스

예:

CREATE TABLE `foo2` (
`i` int(11) not null,
PRIMARY KEY (`i`) /*$ DISTRIBUTE=1 */,
KEY `idx_i` (`i`) /*$ DISTRIBUTE=2 */
) CHARACTER SET utf8 /*$ REPLICAS=2 SLICES=7 */
ALTER TABLE foo2 INDEX idx_i DISTRIBUTE=1;

v7.0 이상에서는 키개수 보다 많은 distribution을 가진 색인을 생성 할 수 없습니다. 이전 버전 또는 이전 버전에서 업그레이드 된 클러스터에서 이 변경 사항으로 인해 단일 열 인덱스에서 불필요한 브로드캐스트가 제거될 것입니다.

다중 컬럼 인덱스:

다중 열 인덱스에서 경우에 따라 distribution을 변경하는 것이 이득이 있을 수 있습니다.

사례:

  • Distribution이 컬럼 수보다 큽니다 - distribution을 컬럼수로 변경합니다.
  • 거의 고유한 첫 컬럼을 가진 인덱스 - 불필요한 브로드캐스트가 수행되는 경우 distribution을 줄이는 것을 검토하십시오.
  • 인덱스를 사용하고 stream combine를 검색하는 쿼리의 explain을 검토하십시오.
또 다른 질문이 있으십니까? 문의 등록

0 댓글

댓글을 남기려면 로그인하세요.
Zendesk 제공