- 더 높은 삽입 처리량
- 백그라운드 머지 처리량 향상
- 뮤테이션 처리량 향상
- 더 빠른 확장 및 축소 작업
- select 쿼리에 대한 더 경량화된 강한 일관성
내부 검사
ReplicatedMergeTree의 내부 검사에 사용되는 대부분의 시스템 테이블은 SharedMergeTree에도 존재합니다. 다만 데이터와 메타데이터 복제가 수행되지 않으므로system.replication_queue와 system.replicated_fetches는 예외입니다. 하지만 SharedMergeTree에는 이 두 테이블에 대응하는 대체 테이블이 있습니다.
system.virtual_parts
이 테이블은 SharedMergeTree에서 system.replication_queue를 대체하는 역할을 합니다. 현재 파트의 최신 집합에 대한 정보와 함께, 머지, 뮤테이션, 파티션 삭제처럼 진행 중인 향후 파트에 대한 정보도 저장합니다.
system.shared_merge_tree_fetches
이 테이블은 SharedMergeTree에서 system.replicated_fetches를 대체합니다. 메모리로 프라이머리 키와 체크섬을 가져오는 현재 진행 중인 fetch에 대한 정보를 포함합니다.
SharedMergeTree 활성화
SharedMergeTree는 기본적으로 활성화되어 있습니다.
SharedMergeTree 테이블 엔진을 지원하는 서비스에서는 별도로 수동 설정할 필요가 없습니다. 이전과 동일한 방식으로 테이블을 생성하면, CREATE TABLE 쿼리에서 지정한 엔진에 대응하는 SharedMergeTree 기반 테이블 엔진이 자동으로 사용됩니다.
my_table 테이블이 생성됩니다.
ClickHouse Cloud에서는 default_table_engine=MergeTree가 기본값이므로 ENGINE=MergeTree를 지정할 필요가 없습니다. 다음 쿼리는 위의 쿼리와 동일합니다.
SHOW CREATE TABLE로 CREATE TABLE 문을 확인하면 알 수 있습니다:
설정
일부 설정의 동작이 크게 달라졌습니다:insert_quorum— SharedMergeTree에 대한 모든 삽입은 quorum 삽입(공유 스토리지에 기록됨)이므로 SharedMergeTree 테이블 엔진을 사용할 때는 이 설정이 필요하지 않습니다.insert_quorum_parallel— SharedMergeTree에 대한 모든 삽입은 quorum 삽입(공유 스토리지에 기록됨)이므로 SharedMergeTree 테이블 엔진을 사용할 때는 이 설정이 필요하지 않습니다.select_sequential_consistency— quorum 삽입이 필요하지 않지만,SELECT쿼리 시 clickhouse-keeper에 추가 부하를 발생시킵니다
일관성
SharedMergeTree는 ReplicatedMergeTree보다 더 나은 경량 일관성을 제공합니다. SharedMergeTree에 삽입할 때는insert_quorum 또는 insert_quorum_parallel 같은 설정을 지정할 필요가 없습니다. 삽입은 quorum 삽입으로 처리되며, 즉 메타데이터가 ClickHouse-Keeper에 저장되고 해당 메타데이터가 최소 quorum 수의 ClickHouse-keepers에 복제됩니다. 클러스터의 각 레플리카는 ClickHouse-Keeper에서 새 정보를 비동기적으로 가져옵니다.
대부분의 경우 select_sequential_consistency 또는 SYSTEM SYNC REPLICA LIGHTWEIGHT를 사용할 필요가 없습니다. 비동기 복제는 대부분의 시나리오를 포괄하며 지연 시간이 매우 짧습니다. 드물지만 오래된 데이터 읽기를 반드시 방지해야 하는 경우에는, 우선순위 순서대로 다음 권장 사항을 따르십시오:
-
읽기와 쓰기 모두에서 동일한 세션 또는 동일한 노드에서 쿼리를 실행하는 경우, 레플리카에 이미 최신 메타데이터가 있으므로
select_sequential_consistency를 사용할 필요가 없습니다. -
한 레플리카에 쓰고 다른 레플리카에서 읽는 경우,
SYSTEM SYNC REPLICA LIGHTWEIGHT를 사용해 해당 레플리카가 ClickHouse-Keeper에서 메타데이터를 가져오도록 강제할 수 있습니다. -
쿼리 설정의 일부로
select_sequential_consistency를 사용합니다.
ALTER 및 뮤테이션 가시성
SharedMergeTree는 ClickHouse Keeper를 통해 메타데이터 변경을 조정합니다. 레플리카는 변경된 메타데이터를 비동기적으로 가져오므로, 메타데이터 변경 사항이 모든 레플리카에 즉시 반영되지 않을 수 있습니다. 같은 노드의 같은 세션에서 수행하는 읽기에는 이미 최신 메타데이터가 적용됩니다. 메타데이터를 변경한 직후 다른 레플리카에서 읽기를 실행해야 한다면 SYSTEM SYNC REPLICA LIGHTWEIGHT를 사용하여 해당 레플리카가 ClickHouse Keeper에서 메타데이터를 가져오도록 하십시오.
뮤테이션을 발생시키는 ALTER 작업은 공유 스토리지에 새 파트를 생성하는 백그라운드 작업을 수행하며, 이 파트의 가시성은 ClickHouse Keeper를 통해 조정됩니다. 이는 ReplicatedMergeTree처럼 레플리카마다 재작성이나 데이터 전송이 이루어지는 방식이 아닙니다.
ClickHouse Cloud에서 alter_sync의 기본값은 0입니다. 클라이언트가 메타데이터 작업이나 메타데이터 외 MODIFY COLUMN 재작성이 완료될 때까지 기다려야 한다면 이 설정을 지정하십시오. UPDATE, DELETE, MATERIALIZE ... 작업은 mutations_sync로 대기 여부를 제어하고, system.mutations에서 진행 상황을 모니터링하십시오.