이 설정들은 system.merge_tree_settings에서 확인할 수 있으며, ClickHouse 소스 코드에서 자동 생성됩니다.
adaptive_write_buffer_initial_size
적응형 쓰기 버퍼의 초기 크기입니다.
add_implicit_sign_column_constraint_for_collapsing_engine
true로 설정하면 CollapsingMergeTree 또는 VersionedCollapsingMergeTree 테이블의 sign 컬럼에 암시적 제약 조건을 추가하여 유효한 값(1 및 -1)만 허용합니다.
alter_column_secondary_index_mode
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.12 | rebuild | 종속된 보조 인덱스가 있는 경우 `column`에 대한 ALTER를 허용하도록 동작이 변경되었습니다 |
보조 인덱스가 적용된 컬럼을 수정하는 ALTER 명령을 허용할지와,
허용하는 경우 어떤 작업을 수행할지를 구성합니다. 기본적으로 이러한 ALTER 명령은 허용되며 인덱스가 다시 빌드됩니다.
가능한 값:
rebuild(기본값):ALTER명령에서 해당 컬럼의 영향을 받는 모든 보조 인덱스를 다시 빌드합니다.throw: 예외를 발생시켜 명시적 보조 인덱스가 적용된 컬럼에 대한 모든ALTER를 막습니다. 암시적 인덱스는 이 제한에서 제외되며 다시 빌드됩니다.drop: 종속된 보조 인덱스를 삭제합니다. 새 파트에는 해당 인덱스가 포함되지 않으므로, 다시 생성하려면MATERIALIZE INDEX를 실행해야 합니다.compatibility: 원래 동작과 동일하게 맞춥니다.ALTER ... MODIFY COLUMN에는throw를,ALTER ... UPDATE/DELETE에는rebuild를 적용합니다.ignore: 전문가용 옵션입니다. 인덱스를 불일치한 상태로 남겨 두므로 잘못된 쿼리 결과가 발생할 수 있습니다.
always_use_copy_instead_of_hardlinks
뮤테이션/대체/분리 등의 작업 중 하드링크를 사용하는 대신 항상 데이터를 복사합니다.
apply_patches_on_merge
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.5 | 1 | 새로운 설정 |
값이 true이면 머지 시 패치 파트가 적용됩니다
assign_part_uuids
활성화하면 새 part마다 고유한 part 식별자가 할당됩니다. 활성화하기 전에 모든 레플리카가 UUID 버전 4를 지원하는지 확인하십시오.
auto_statistics_types
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.7 | basic, uniq_v2 | 기본 자동 통계에서 `minmax` 통계 타입을 `basic`(`minmax`의 상위 집합)으로 대체하고, 삽입 시 오버헤드와 메모리 사용량을 줄이기 위해 `uniq`도 `uniq_v2`로 대체합니다 |
| 26.4 | minmax, uniq | 기본적으로 자동 통계를 활성화합니다 |
| 25.10 | 새로운 설정 |
모든 적합한 컬럼에 대해 자동으로 계산할 통계 타입의 쉼표로 구분된 목록입니다.
지원되는 통계 타입: basic, tdigest, countmin, uniq, uniq_v2.
minmax 통계 타입은 더 이상 권장되지 않습니다. basic의 부분 집합이므로 대신 basic을 사용해야 합니다.
background_task_preferred_step_execution_time_ms
머지 또는 mutation의 한 단계 실행에 대한 목표 시간입니다. 한 단계 실행 시간이 더 길면 이 값을 초과할 수 있습니다.
clean_deleted_rows
더 이상 사용되지 않는 설정이며, 아무 동작도 하지 않습니다.
clone_replica_zookeeper_create_get_part_batch_size
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.2 | 100 | 새로운 설정 |
레플리카를 복제할 때 ZooKeeper multi-create get-part 요청에 사용하는 Batch 크기입니다.
compatibility_allow_sampling_expression_not_in_primary_key
프라이머리 키에 샘플링 표현식이 없는 테이블을 생성할 수 있도록 허용합니다. 이는 이전 버전과의 호환성을 위해 잘못된 테이블이 있는 서버를 일시적으로 실행해야 할 때에만 필요합니다.
compute_exact_num_defaults_for_sparse_columns
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.8 | 1 | 베타로 승격하고 기본적으로 활성화합니다. 삽입 및 머지 중에 컬럼별 정확한 `num_defaults` 카운터를 계산하여(샘플링 추정치 대신) `optimize_trivial_count_with_sparsity_filter` 및 희소성 기반 프루닝이 이를 활용할 수 있도록 합니다. |
| 26.7 | 0 | 희소성 기반 프루닝과 trivial-count 재작성을 위해 컬럼별 정확한 num_defaults 계산을 제어하는 새로운 설정 |
희소 직렬화 여부를 결정할 때 사용하는 비용이 더 적은 샘플링 추정치 대신,
삽입 및 머지 중에 컬럼별 기본값의 정확한 개수를 계산합니다.
이 설정은 저장된 num_defaults 카운터를 사용하는
optimize_trivial_count_with_sparsity_filter에 필요합니다(널 허용 컬럼은
추가로 nullable_serialization_version = 'allow_sparse'가 필요합니다).
비활성화된 상태로 두면 삽입/머지 속도는 이전과 동일하게 유지되며, 활성화하면
희소 직렬화가 가능한 각 컬럼마다 O(rows) 패스가 추가됩니다.
deduplicate_merge_projection_mode
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 24.8 | throw | 일관되지 않은 프로젝션의 생성을 허용하지 않습니다 |
(Replicated, Shared) MergeTree가 아닌 비클래식 MergeTree를 사용하는
테이블에서 프로젝션 생성을 허용할지 지정합니다. ignore 옵션은 순전히
compatibility를 위한 것이며, 잘못된 결과를 초래할 수 있습니다. 허용하는 경우에는
프로젝션을 머지할 때 수행할 동작을 지정하며, drop 또는 rebuild 중
하나를 선택합니다. 따라서 클래식 MergeTree에서는 이 설정이 무시됩니다.
또한 OPTIMIZE DEDUPLICATE도 제어하지만, 모든 MergeTree 엔진 계열
구성원에 영향을 미칩니다. lightweight_mutation_projection_mode 옵션과
마찬가지로, 이것도 part 수준입니다.
가능한 값:
ignorethrowdroprebuild
deduplication_hashes_cache_update_wait_ms
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.7 | 100 | 새 설정입니다. `async_block_ids_cache_update_wait_ms`를 올바르게 이름 붙인 대체 설정이며, 통합 `deduplication_hashes` 캐시가 갱신될 때까지 삽입이 얼마나 오래 대기할지 제어합니다. |
각 삽입 반복에서 인메모리 deduplication_hashes 캐시가 더 최신 버전으로 갱신될 때까지
대기한 뒤, 이미 삽입된 블록이 있는지 다시 확인하는 시간을 지정합니다. 이 캐시는
ClickHouse Keeper의 deduplication_hashes 디렉터리를 미러링하므로, 삽입 시
Keeper와 왕복 통신하지 않고도 중복을 감지할 수 있습니다.
default_compression_codec
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.4 | 새로운 설정 |
테이블 선언에서 특정 컬럼에 압축 코덱이 정의되어 있지 않은 경우 사용할 기본 압축 코덱을 지정합니다. 컬럼의 압축 코덱 선택 순서는 다음과 같습니다.
- 테이블 선언에서 해당 컬럼에 정의된 압축 코덱
default_compression_codec에 정의된 압축 코덱(이 설정)compression설정에 정의된 기본 압축 코덱 기본값: 빈 문자열(정의되지 않음)입니다.
디스크
스토리지 디스크의 이름입니다. 스토리지 정책 대신 지정할 수도 있습니다.
dynamic_serialization_version
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.8 | v2 | Dynamic 직렬화 버전을 제어하는 설정 추가 |
| 25.12 | v3 | 더 나은 직렬화/역직렬화를 위해 Dynamic에 기본적으로 v3 직렬화 버전 활성화 |
Dynamic 데이터 타입의 직렬화 버전입니다. compatibility를 위해 필요합니다.
가능한 값:
v1v2v3
enforce_index_structure_match_on_partition_manipulation
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 24.12 | 0 | 새로운 설정 |
파티션 조작
쿼리(ATTACH/MOVE/REPLACE PARTITION)의 대상 테이블에서 이 설정을 활성화하면, 원본 테이블과 대상 테이블의 인덱스와 프로젝션이
서로 동일해야 합니다. 그렇지 않으면 대상
테이블은 원본 테이블의 인덱스와 프로젝션을 모두 포함하는 상위 집합이어도 됩니다.
execute_merges_on_single_replica_time_threshold
이 설정값이 0보다 크면 하나의 레플리카만 즉시 머지를 시작하고, 다른 레플리카는 로컬에서 머지를 수행하는 대신 해당 시간 동안 결과를 다운로드하기 위해 대기합니다. 선택된 레플리카가 그 시간 안에 머지를 완료하지 못하면 표준 동작으로 폴백합니다.
Possible values:
- 양의 정수 아무 값이나 가능합니다.
finished_mutations_to_keep
완료된 뮤테이션에 대한 레코드를 몇 개까지 유지할지 지정합니다. 0이면 모두 유지합니다.
force_read_through_cache_for_merges
머지 시 파일 시스템 캐시를 통한 읽기를 강제합니다
initialization_retry_period
테이블 초기화를 재시도하는 주기이며, 단위는 초입니다.
kill_threads
더 이상 사용되지 않는 설정이며, 아무런 효과가 없습니다.
lightweight_mutation_projection_mode
기본적으로 경량한 삭제 DELETE는 프로젝션이 있는 테이블에서는 작동하지 않습니다. 이는 프로젝션의 행이 DELETE 작업의 영향을 받을 수 있기 때문입니다. 따라서 기본값은 throw입니다. 하지만 이 옵션을 사용하면 동작 방식을 변경할 수 있습니다. 값이 drop 또는 rebuild이면 프로젝션이 있는 테이블에서도 삭제가 작동합니다. drop은 프로젝션을 삭제하므로 현재 쿼리에서는 프로젝션이 제거되어 더 빠를 수 있지만, 이후 쿼리에서는 attached 상태인 프로젝션이 없어 더 느려질 수 있습니다. rebuild는 프로젝션을 다시 빌드하므로 현재 쿼리의 성능에 영향을 줄 수 있지만, 이후 쿼리 속도는 빨라질 수 있습니다. 또한 이러한 옵션은 part 수준에서만 작동합니다. 즉, 영향을 받지 않은 part의 프로젝션은 삭제나 재빌드 같은 작업을 유발하지 않고 그대로 유지됩니다.
가능한 값:
throwdroprebuild
load_existing_rows_count_for_old_parts
exclude_deleted_rows_for_part_size_in_merge와 함께 활성화하면, 기존 데이터 파트의 삭제된 행 수를 테이블 시작 과정에서 계산합니다. 이로 인해 시작 시 테이블 로딩이 느려질 수 있습니다.
가능한 값:
truefalse
관련 항목
lock_acquire_timeout_for_background_operations
머지, 뮤테이션 등의 백그라운드 작업에서 테이블 잠금을 획득하지 못한 상태로 실패 처리되기까지의 시간(초)입니다.
mutation_workload
뮤테이션과 다른 워크로드 간에 리소스를 어떻게 사용하고 공유할지 조절하는 데 사용됩니다. 지정한 값은 이 테이블의 백그라운드 뮤테이션에 대한 workload 설정 값으로 사용됩니다. 지정하지 않으면(빈 문자열) 서버 설정 mutation_workload가 대신 사용됩니다.
관련 항목
non_replicated_deduplication_window
중복 여부를 확인하기 위해 해시 합을 저장하는, 비복제 MergeTree 테이블에서 가장 최근에 삽입된 블록의 수입니다.
Possible values:
- 임의의 양의 정수
0(중복 제거 비활성화)
복제된 테이블(자세한 내용은 replicated_deduplication_window 설정 참조)과 유사한 중복 제거 메커니즘을 사용합니다. 중복 제거 해시 합은 삽입된 블록 전체를 포함합니다. 해시 합은 ClickHouse Keeper가 아니라 디스크의 로컬 파일에 기록됩니다.
notify_newest_block_number
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.1 | 0 | Cloud sync |
최신 block 번호를 SharedJoin 또는 SharedSet에 전달합니다. ClickHouse Cloud에서만 지원됩니다.
nullable_serialization_version
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.12 | basic | 새로운 설정 |
Nullable(T) 컬럼에 사용되는 직렬화 메서드를 제어합니다.
가능한 값:
-
basic —
Nullable(T)에 표준 직렬화를 사용합니다. -
allow_sparse —
Nullable(T)에서 희소 인코딩을 사용할 수 있도록 허용합니다.
object_serialization_version
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.8 | v2 | JSON 직렬화 버전을 제어하는 설정 추가 |
| 25.12 | v3 | 고급 shared data 직렬화 버전을 사용하기 위해 기본적으로 JSON에 v3 직렬화 버전 활성화 |
JSON 데이터 타입의 직렬화 버전입니다. compatibility를 위해 필요합니다.
가능한 값:
v1v2v3
shared data 직렬화 버전을 변경할 수 있는 버전은 v3뿐입니다.
old_parts_lifetime
예기치 않은 server 재부팅 시 데이터 손실을 방지하기 위해 비활성 파트를 보관하는 시간(초)입니다.
Possible values:
- 임의의 양의 정수.
여러 파트를 새 파트로 머지한 후 ClickHouse는 원래
파트를 비활성으로 표시하고, old_parts_lifetime초가 지난 후에만 삭제합니다.
비활성 파트는 현재 쿼리에서 사용되지 않는 경우, 즉
파트의 refcount가 1인 경우 제거됩니다.
새 파트에는 fsync가 호출되지 않으므로 일정 시간 동안 새 파트는
server의 RAM(OS cache)에만 존재합니다. server가 예기치 않게 재부팅되면 새
파트가 손실되거나 손상될 수 있습니다. 데이터를 보호하기 위해 비활성 파트는 즉시 삭제되지
않습니다.
시작 시 ClickHouse는 파트의 무결성을 검사합니다. 병합된
파트가 손상된 경우 ClickHouse는 비활성 파트를 active 목록으로 되돌린 뒤
나중에 다시 머지합니다. 그런 다음 손상된 파트의 이름이 변경되고(broken_
접두사가 추가됨) detached 폴더로 이동됩니다. 병합된 파트가
손상되지 않은 경우에는 원래 비활성 파트의 이름이 변경되고(ignored_
접두사가 추가됨) detached 폴더로 이동됩니다.
기본 dirty_expire_centisecs 값(Linux 커널 설정)은 30
초(RAM에만 기록된 데이터가 저장되는 최대 시간)이지만,
디스크 시스템에 부하가 큰 경우 데이터는 훨씬 나중에 기록될 수 있습니다. 실험적으로
old_parts_lifetime 값은 480초로 선택되었으며, 이 시간 동안에는
새 파트가 디스크에 기록되는 것이 보장됩니다.
optimize_row_order
새로 삽입되는 테이블 파트의 압축 효율을 높이기 위해, 삽입 중 행 순서를 최적화할지 제어합니다.
일반적인 MergeTree 엔진 테이블에서만 효과가 있습니다. 특수한 MergeTree 엔진 테이블(예: CollapsingMergeTree)에는 적용되지 않습니다.
MergeTree 테이블은 압축 코덱을 사용해 (선택적으로) 압축됩니다. LZ4 및 ZSTD와 같은 범용 압축 코덱은 데이터에 패턴이 있을 때 최대 압축률을 달성합니다. 같은 값이 길게 반복되는 구간은 일반적으로 매우 잘 압축됩니다.
이 설정을 활성화하면 ClickHouse는 새로 삽입된 파트의 데이터를, 새 테이블 파트의 여러 컬럼에 걸쳐 동일한 값이 연속으로 반복되는 구간 수를 최소화하는 행 순서로 저장하려고 시도합니다. 즉, 동일한 값의 반복 구간 수가 적을수록 각 구간은 길어지고 압축도 더 잘됩니다.
최적의 행 순서를 찾는 일은 계산적으로 실현 가능하지 않습니다(NP-hard). 따라서 ClickHouse는 원래 행 순서보다 압축률을 개선할 수 있는 행 순서를 빠르게 찾기 위해 휴리스틱을 사용합니다.
행 순서를 찾기 위한 휴리스틱
일반적으로 SQL에서는 행 순서만 다른 동일한 테이블(또는 테이블 파트)을 동등한 것으로 간주하므로, 테이블(또는 테이블 파트)의 행은 자유롭게 섞을 수 있습니다.
하지만 테이블에 기본 키(primary key)가 정의되어 있으면 이러한 자유는 제한됩니다.
ClickHouse에서 기본 키 C1, C2, ..., CN는 테이블 행이 컬럼 C1, C2, … Cn을 기준으로 정렬되도록 강제합니다(clustered index).
그 결과 행은 "동치 클래스" 안에서만 섞을 수 있습니다.
즉, 기본 키 컬럼의 값이 같은 행들끼리만 재배치할 수 있습니다.
직관적으로, high-cardinality 기본 키(예: DateTime64 timestamp 컬럼을 포함하는 기본 키)는 작은 동치 클래스를 많이 만듭니다.
반대로 low-cardinality 기본 키를 가진 테이블은 적은 수의 큰 동치 클래스를 만듭니다.
기본 키가 없는 테이블은 모든 행을 포괄하는 하나의 동치 클래스만 있는 극단적인 경우에 해당합니다.
동치 클래스의 수가 적고 크기가 클수록 행을 다시 섞을 수 있는 자유도는 높아집니다.
각 동치 클래스 내에서 최적의 행 순서를 찾기 위해 적용되는 휴리스틱은 D. Lemire, O. Kaser의 Reordering columns for smaller indexes에서 제안되었으며, 각 동치 클래스 내의 행을 기본 키가 아닌 컬럼의 cardinality 오름차순으로 정렬하는 방식에 기반합니다.
이 과정은 3단계로 이루어집니다:
- 기본 키 컬럼의 행 값을 기준으로 모든 동치 클래스를 찾습니다.
- 각 동치 클래스에 대해 기본 키가 아닌 컬럼의 cardinality를 계산합니다(일반적으로는 추정).
- 각 동치 클래스에 대해 기본 키가 아닌 컬럼의 cardinality 오름차순으로 행을 정렬합니다.
활성화하면 새 데이터의 행 순서를 분석하고 최적화하기 위한 추가 CPU 비용이 삽입 작업에 발생합니다. 데이터 특성에 따라 INSERT는 30-50% 더 오래 걸릴 수 있습니다. LZ4 또는 ZSTD의 압축률은 평균적으로 20-40% 향상됩니다.
이 설정은 기본 키가 없거나 low-cardinality 기본 키를 가진 테이블, 즉 서로 다른 기본 키 값이 적은 테이블에서 가장 효과적입니다.
예를 들어 DateTime64 타입의 timestamp 컬럼을 포함하는 high-cardinality 기본 키는 이 설정의 효과를 보기 어렵습니다.
packed_skip_index_max_bytes
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.8 | 1048576 | 베타로 승격되고 기본적으로 활성화됩니다. 직렬화된 온디스크 크기가 최대 1 MiB인 skip-index 서브스트림은 각 파트별로 단일 `skp_idx.packed` 아카이브에 패킹되어 객체 스토리지의 객체 수와 읽기 요청을 줄입니다. 더 큰 서브스트림은 독립형 `skp_idx_<name>.idx2` / `.mrk2` 레이아웃을 유지합니다. 이전 동작(패킹 없음)으로 복원하려면 0으로 설정합니다. |
| 26.6 | 0 | 새 설정입니다. 직렬화된 온디스크 크기가 이 바이트 수 이하인 skip-index 서브스트림은 각 파트별로 단일 `skp_idx.packed` 아카이브에 패킹됩니다. 더 큰 서브스트림은 기존의 독립형 `skp_idx_<name>.idx2` / `.mrk2` 레이아웃을 유지합니다. 이 결정은 쓰기 시점에 서브스트림별로 내려집니다. |
이 임계값(직렬화된 온디스크 바이트 수, 즉 서브스트림의 압축과 해시 체인 이후 크기)보다
작은 skip-index 서브스트림은 별도의 skp_idx_<name>.idx2 / .mrk2 파일로
기록되지 않고, 각 파트별 단일 skp_idx.packed 아카이브로 묶입니다. 이보다 큰
서브스트림은 기존 파일별 레이아웃을 유지합니다. 이 결정은 쓰기 시점에 서브스트림별로
독립적으로 이루어지므로, 하나의 파트 안에서도 작은 인덱스(예: minmax)는 패킹되고
큰 인덱스(예: 규모가 큰 bloom_filter)는 파일별로 저장될 수 있습니다. 패킹을 완전히
비활성화하려면 0으로 설정합니다. 기본값은 1 MiB이며, 일반적으로 작은 skip 인덱스를
각 파트별 하나의 아카이브로 묶어 객체 스토리지의 객체 수(및 읽기 요청)를 줄이는 한편,
실제로 큰 서브스트림은 파일별 레이아웃으로 유지합니다.
각 skip-index 서브스트림은 실제로 데이터 파일과 마크 파일로 구성되며, spill 여부를
결정하기 전까지 두 파일 모두 메모리에서 임계값까지 버퍼링됩니다. 따라서 쓰기 중 최대
메모리 사용량은 2 * packed_skip_index_max_bytes * (number of substreams that stay below the threshold)에 비례합니다.
전체 텍스트 인덱스는 이 설정에서 지원되지 않으며 패킹되지 않습니다.
패킹을 사용하면 테이블에 많은 skip 인덱스가 정의된 경우 inode 부담을 줄일 수 있습니다(예:
add_minmax_index_for_numeric_columns 사용 시).
온디스크 포맷은 자체 기술형입니다. 리더는 skp_idx.packed를 감지하고 그 안의 패킹된
서브스트림을 투명하게 처리합니다. 이 설정을 변경해도 새로 기록되는 파트에만 영향을 미치며,
기존 파트는 쓰기 시점의 레이아웃을 그대로 유지합니다.
part_minmax_index_columns
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.5 | partition_key_only | 새 설정입니다. |
파트별 min-max 인덱스에 포함할 컬럼을 선택합니다. 각 값은 이전 값에 더해 추가 컬럼 그룹을 활성화합니다.
가능한 값:
partition_key_only— 파티션 키 컬럼만 추적합니다.with_block_number_offset— 파티션 키 컬럼에 더해 영속적으로 저장된_block_number및_block_offset가상 컬럼도 추적합니다. 이 컬럼을 기준으로 파트 수준 프루닝을 사용할 수 있습니다.
patch_parts_version
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.9 | v2 | 경량 업데이트로 생성된 패치 파트의 온디스크 직렬화 버전을 제어하는 새로운 설정입니다. 이전 compatibility 모드에서는 혼합 버전 클러스터의 모든 레플리카가 읽을 수 있는 v1 패치를 계속 기록합니다. |
경량 UPDATE 쿼리로 생성된 패치 파트의 온디스크 직렬화 버전입니다.
가능한 값:
v1- 레거시 포맷: 패치 파트에_part, _part_offset시스템 컬럼이 포함되며(_part, _part_offset)기준으로 정렬됩니다. 최악의 경우 적용 중 메모리 사용량은 전체 패치 파트 크기로 제한됩니다.v2- 패치 파트에 기본 테이블의 정렬 키 컬럼이 포함되며(sorting_key_columns..., _block_number, _block_offset)기준으로 정렬됩니다. 적용 중 메모리 사용량은 동일한 정렬 키를 가진 가장 큰 연속 구간의 크기로 제한됩니다.
이 설정과 관계없이 디스크에 저장된 이전 포맷 패치는 계속 읽을 수 있습니다.
propagate_types_serialization_versions_to_nested_types
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.3 | 1 | 기본적으로 데이터 타입 직렬화 버전을 중첩 타입에 전파합니다 |
true인 경우, string_serialization_version과 같은 직렬화 버전이 Array/Map/Nullable/JSON/etc.와 같은 중첩 타입 내부로 전파됩니다. 비활성화하면 직렬화 버전은 이 타입의 최상위 컬럼과 Tuple el에만 적용됩니다
ratio_of_defaults_for_sparse_serialization
컬럼에서 기본 값의 개수를 전체 값의 개수로 나눈 최소 비율입니다. 이 값을 설정하면 컬럼이 희소 직렬화를 사용하여 저장됩니다.
컬럼이 희소한 경우(대부분의 값이 0인 경우), ClickHouse는 이를
희소 포맷으로 인코딩하여 계산을 자동으로 최적화할 수 있습니다. 즉, 쿼리 중에
데이터를 완전히 압축 해제할 필요가 없습니다. 이 희소
직렬화를 활성화하려면 ratio_of_defaults_for_sparse_serialization
설정을 1.0보다 작게 지정하십시오. 값이 1.0 이상이면
컬럼은 항상 일반적인 전체 serialization을 사용하여 기록됩니다.
가능한 값:
- 희소 직렬화를 활성화하려면
0과1사이의 Float 값 - 희소 직렬화를 사용하지 않으려면
1.0(또는 그 이상)
예시
다음 테이블에서는 s 컬럼의 값이
전체 행의 95%에서 빈 문자열입니다. my_regular_table에서는 희소 직렬화를 사용하지 않고,
my_sparse_table에서는 ratio_of_defaults_for_sparse_serialization을
0.95로 설정합니다:
CREATE TABLE my_regular_table
(
`id` UInt64,
`s` String
)
ENGINE = MergeTree
ORDER BY id;
INSERT INTO my_regular_table
SELECT
number AS id,
number % 20 = 0 ? toString(number): '' AS s
FROM
numbers(10000000);
CREATE TABLE my_sparse_table
(
`id` UInt64,
`s` String
)
ENGINE = MergeTree
ORDER BY id
SETTINGS ratio_of_defaults_for_sparse_serialization = 0.95;
INSERT INTO my_sparse_table
SELECT
number,
number % 20 = 0 ? toString(number): ''
FROM
numbers(10000000);my_sparse_table의 s 컬럼이 디스크에서 차지하는 저장 공간이 더 적다는 점을 확인하십시오:
SELECT table, name, data_compressed_bytes, data_uncompressed_bytes FROM system.columns
WHERE table LIKE 'my_%_table';┌─table────────────┬─name─┬─data_compressed_bytes─┬─data_uncompressed_bytes─┐
│ my_regular_table │ id │ 37790741 │ 75488328 │
│ my_regular_table │ s │ 2451377 │ 12683106 │
│ my_sparse_table │ id │ 37790741 │ 75488328 │
│ my_sparse_table │ s │ 2283454 │ 9855751 │
└──────────────────┴──────┴───────────────────────┴─────────────────────────┘컬럼이 희소 인코딩을 사용하는지 여부는 system.parts_columns 테이블의
serialization_kind 컬럼을 확인하여 검증할 수 있습니다:
SELECT column, serialization_kind FROM system.parts_columns
WHERE table LIKE 'my_sparse_table';s에서 어느 부분이 희소 직렬화로 저장되었는지 확인할 수 있습니다:
┌─column─┬─serialization_kind─┐
│ id │ Default │
│ s │ Default │
│ id │ Default │
│ s │ Default │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
│ id │ Default │
│ s │ Sparse │
└────────┴────────────────────┘reduce_blocking_parts_sleep_ms
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.1 | 5000 | Cloud sync |
ClickHouse Cloud에서만 사용할 수 있습니다. 범위가 삭제되거나 대체되지 않은 경우, 다시 blocking 파트를 줄이기 전에 대기하는 최소 시간입니다. 이 설정값을 낮추면 background_schedule_pool의 작업이 더 자주 트리거되어 대규모 클러스터에서 ZooKeeper로 많은 요청이 발생합니다.
replace_long_file_name_to_hash
컬럼의 파일 이름이 너무 길면('max_file_name_length' 바이트 초과) SipHash128로 대체됩니다
replicated_can_become_leader
true이면 이 노드의 복제된 테이블 레플리카가
리더 역할을 맡으려고 시도합니다.
가능한 값:
truefalse
search_orphaned_parts_disks
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.8 | any | 새로운 설정 |
ClickHouse는 정책에 포함되지 않은 정의되지 않은 디스크의 데이터 파트를 누락하지 않도록, ATTACH 또는 CREATE table 시마다 모든 디스크에서 고아 파트를 스캔합니다. 고아 파트는 잠재적으로 안전하지 않은 스토리지 재구성으로 인해 발생하며, 예를 들어 디스크가 스토리지 정책에서 제외된 경우에 생길 수 있습니다. 이 설정은 디스크의 특성에 따라 검색할 디스크 범위를 제한합니다.
가능한 값:
- any - 범위가 제한되지 않습니다.
- local - 범위가 로컬 디스크로 제한됩니다.
- none - 범위가 비어 있으며, 검색하지 않습니다
serialization_info_version
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.11 | with_types | 사용자 지정 문자열 serialization을 지원하는 최신 포맷으로 변경 |
| 25.10 | basic | 새로운 설정 |
serialization.json을 작성할 때 사용하는 serialization info version입니다.
이 설정은 cluster upgrade 중 compatibility를 유지하는 데 필요합니다.
가능한 값:
basic- 기본 포맷입니다.with_types- 추가types_serialization_versions필드가 포함된 포맷이며, 타입별 직렬화 버전을 사용할 수 있습니다. 이렇게 하면string_serialization_version과 같은 설정이 적용됩니다.
rolling upgrade 중에는 새 server가 기존 server와 호환되는
data part를 생성하도록 이 값을 basic으로 설정하십시오. upgrade가 완료되면
타입별 직렬화 버전을 활성화하려면 WITH_TYPES로 전환하십시오.
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 26.4 | 1 | false로 설정하면 공통 접두사를 가진 점 표기 이름의 Array 컬럼은 legacy Nested 시맨틱에 따라 offset 파일을 공유하지 않고 서로 독립적인 컬럼으로 처리됩니다 |
활성화된 경우(기본값), 공통 접두사를 가진 점 표기 이름의 Array 컬럼(예: n.a 및 n.b)은 Nested 구조의 일부로 처리됩니다. 즉, 디스크에서 하나의 offsets 파일(예: n.size0)을 공유하며, INSERT 중에는 배열 크기가 서로 같은지 검증합니다. 비활성화된 경우 각 Array 컬럼은 자체적인 독립 offset 파일을 가지며, 점 표기 이름은 더 이상 특별한 시맨틱을 갖지 않습니다. 또한 동일한 접두사를 공유하는 점 표기 Array 컬럼과 스칼라 컬럼이 함께 존재할 수 있습니다 (예: n UInt32와 n.a Array(String)). 이 설정은 테이블 생성 후에는 변경할 수 없습니다.
simultaneous_parts_removal_limit
오래된 파트가 많으면 정리 스레드가 한 번의 반복에서 최대
simultaneous_parts_removal_limit개의 파트를 삭제합니다.
simultaneous_parts_removal_limit를 0으로 설정하면 제한 없이 삭제합니다.
storage_policy
스토리지 디스크 정책 이름
string_serialization_version
버전 이력
| 버전 | 기본값 | 설명 |
|---|---|---|
| 25.11 | with_size_stream | 별도 크기 정보를 사용하는 최신 포맷으로 변경 |
| 25.10 | single_stream | 새로운 설정 |
최상위 String 컬럼의 직렬화 포맷을 제어합니다.
이 설정은 serialization_info_version이 "with_types"로 설정된 경우에만 적용됩니다.
with_size_stream으로 설정하면 최상위 String 컬럼은 문자열 길이를 저장하는 별도의
.size 서브컬럼을 사용해 직렬화되며, 인라인으로 저장되지 않습니다. 이렇게 하면 실제 .size
서브컬럼을 사용할 수 있고 압축 효율도 향상될 수 있습니다.
중첩된 String 타입(예: Nullable, LowCardinality, Array, Map 내부)은
Tuple 안에 있는 경우를 제외하면 영향을 받지 않습니다.
가능한 값:
single_stream— 크기 정보를 인라인으로 저장하는 표준 직렬화 포맷을 사용합니다.with_size_stream— 최상위String컬럼에 별도의 크기 스트림을 사용합니다.
temporary_directories_lifetime
tmp_-directories를 유지하는 기간(초)입니다. 이 값을 낮추지 마십시오. 이 설정값이 너무 낮으면 머지와 뮤테이션이 제대로 작동하지 못할 수 있습니다.
try_fetch_recompressed_part_timeout
재압축을 동반한 머지를 시작하기 전에 대기하는 타임아웃(초)입니다. 이 시간 동안 ClickHouse는 이 재압축 머지가 할당된 레플리카에서 재압축된 파트를 가져오려고 시도합니다.
대부분의 경우 재압축은 느리므로, 이 타임아웃이 지나기 전에는 재압축을 동반한 머지를 시작하지 않고, 대신 이 재압축 머지가 할당된 레플리카에서 재압축된 파트를 가져오려고 시도합니다.
가능한 값:
- 임의의 양의 정수.
ttl_only_drop_parts
해당 파트의 모든 행이 TTL 설정에 따라 만료되었을 때, MergeTree 테이블에서 데이터 파트 전체를 삭제할지 제어합니다.
ttl_only_drop_parts가 비활성화된 경우(기본값), TTL 설정에 따라 만료된 행만 삭제됩니다.
ttl_only_drop_parts가 활성화된 경우, 해당 파트의 모든 행이 TTL 설정에 따라 만료되면 파트 전체가 삭제됩니다.
wait_for_unique_parts_send_before_shutdown_ms
테이블은 종료되기 전에 현재 레플리카에만 존재하는 고유 파트를 다른 레플리카가 가져갈 수 있도록 지정된 시간 동안 대기합니다(0은 비활성화를 의미합니다).
zookeeper_session_expiration_check_period
ZooKeeper 세션 만료 확인 주기입니다. 단위는 초입니다.
가능한 값:
- 양의 정수 아무 값이나 가능합니다.