기타 MergeTree 설정
기타 MergeTree 설정 (Other MergeTree settings)
이 문서는 다른 그룹에 속하지 않는 MergeTree 설정들을 다루는 페이지예요. 적응형 쓰기 버퍼, 컬럼 압축 코덱, 스파스 직렬화, 문자열·객체·Nullable 직렬화 버전, 디스크·스토리지 정책, TTL, 병합 동작 등 다양한 설정이 자동 생성되어 정리되어 있어요.
출처: 문서
본문
이 설정들은 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
보조 인덱스가 커버하는 열을 수정하는 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
뮤테이션/교체/detach 등에서 항상 하드링크 대신 데이터를 복사할지 여부예요.
apply_patches_on_merge
true이면 병합 시 패치 파트가 적용됩니다.
assign_part_uuids
활성화하면 모든 새 파트에 고유한 파트 식별자가 할당돼요. 활성화하기 전에 모든 복제본이 UUID 버전 4를 지원하는지 확인하세요.
auto_statistics_types
모든 적합한 열에 자동으로 계산할 통계 유형의 쉼표로 구분된 목록이에요. 지원되는 통계 유형: basic, tdigest, countmin, uniq, uniq_v2. minmax 통계 유형은 더 이상 사용되지 않으며, 대신 사용해야 하는 basic의 부분집합입니다.
background_task_preferred_step_execution_time_ms
병합 또는 뮤테이션의 한 단계 실행의 목표 시간이에요. 한 단계가 더 오래 걸리면 초과될 수 있어요.
clean_deleted_rows
더 이상 사용하지 않는 설정으로, 아무것도 하지 않아요.
clone_replica_zookeeper_create_get_part_batch_size
복제본 복제 시 ZooKeeper multi-create get-part 요청의 배치 크기예요.
compatibility_allow_sampling_expression_not_in_primary_key
기본 키에 없는 샘플링 표현식으로 테이블을 만들 수 있게 허용할지 여부예요. 이는 하위 호환성을 위해 잘못된 테이블로 서버를 임시로 실행할 수 있게 하려는 경우에만 필요합니다.
compute_exact_num_defaults_for_sparse_columns
삽입과 병합 중 열당 기본값 수의 정확한 개수를, 스파스 직렬화 여부를 결정하는 데 쓰는 더 저렴한 샘플링 추정치 대신 계산할지 여부예요. optimize_trivial_count_with_sparsity_filter에 필요합니다(이 기능은 지속된 num_defaults 카운터를 소비하며, Nullable 열은 추가로 nullable_serialization_version = 'allow_sparse'가 필요합니다). 비활성화로 두면 삽입/병합이 이전처럼 빠르게 유지되고, 활성화하면 스파스 자격 열마다 O(rows) 패스가 추가됩니다.
deduplicate_merge_projection_mode
클래식이 아닌 MergeTree(즉 (Replicated, Shared) MergeTree가 아닌)에 대해 프로젝션 생성을 허용할지 여부예요. Ignore 옵션은 순전히 호환성을 위한 것으로 잘못된 결과를 초래할 수 있어요. 허용되는 경우 병합 프로젝션 시 drop 또는 rebuild 중 어떤 조치를 취할지도 결정합니다. 클래식 MergeTree는 이 설정을 무시합니다. 또한 OPTIMIZE DEDUPLICATE도 제어하지만 모든 MergeTree 계열 멤버에 영향을 줍니다. lightweight_mutation_projection_mode 옵션과 비슷하게 파트 수준이에요.
가능한 값:
- ignore
- throw
- drop
- rebuild
deduplication_hashes_cache_update_wait_ms
각 삽입 반복에서 이미 삽입된 블록을 다시 확인하기 전에 인메모리 deduplication_hashes 캐시가 새 버전으로 새로 고쳐지기를 기다리는 시간이에요. 이 캐시는 ClickHouse Keeper의 deduplication_hashes 디렉터리를 미러링하므로 삽입은 Keeper 왕복 없이 중복을 감지할 수 있어요.
default_compression_codec
테이블 선언에서 특정 열에 대해 정의되지 않은 경우 사용할 기본 압축 코덱을 지정해요. 열의 압축 코덱 선택 순서:
- 테이블 선언에서 열에 정의된 압축 코덱
- default_compression_codec(이 설정)에 정의된 압축 코덱
- compression 설정에 정의된 기본 압축 코덱
기본값: 빈 문자열(정의되지 않음).
disk
저장소 디스크의 이름이에요. 저장소 정책 대신 지정할 수 있어요.
dynamic_serialization_version
Dynamic 데이터 타입의 직렬화 버전이에요. 호환성을 위해 필요합니다. 가능한 값:
- v1
- v2
- v3
enforce_index_structure_match_on_partition_manipulation
파티션 조작 쿼리(ATTACH/MOVE/REPLACE PARTITION)의 대상 테이블에 이 설정이 활성화되면, 인덱스와 프로젝션이 소스와 대상 테이블 간에 동일해야 해요. 그렇지 않으면 대상 테이블은 소스 테이블의 인덱스와 프로젝션의 상위 집합을 가질 수 있습니다.
execute_merges_on_single_replica_time_threshold
이 설정이 0보다 큰 값을 가지면 단일 복제본만 즉시 병합을 시작하고, 다른 복제본은 로컬에서 병합하는 대신 결과를 다운로드하기 위해 그 시간 동안 기다립니다. 선택된 복제본이 그 시간 안에 병합을 끝내지 못하면 표준 동작으로 폴백합니다. 가능한 값:
- 양의 정수.
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은 프로젝션을 삭제하므로 현재 쿼리는 프로젝션이 삭제되어 빠를 수 있지만, 이후 쿼리는 프로젝션이 없어 느려질 수 있어요. rebuild는 프로젝션을 재구성하므로 현재 쿼리 성능에 영향을 줄 수 있지만 이후 쿼리는 빨라질 수 있어요. 좋은 점은 이 옵션들이 파트 수준에서만 작동한다는 것입니다. 즉, 건드리지 않은 파트의 프로젝션은 drop이나 rebuild 같은 작업을 트리거하지 않고 그대로 유지됩니다.
가능한 값:
- throw
- drop
- rebuild
load_existing_rows_count_for_old_parts
exclude_deleted_rows_for_part_size_in_merge와 함께 활성화하면, 테이블 시작 시 기존 데이터 파트의 삭제된 행 수가 계산돼요. 시작 시 테이블 로딩이 느려질 수 있음에 유의하세요. 가능한 값:
- true
- false
See Also- exclude_deleted_rows_for_part_size_in_merge setting
lock_acquire_timeout_for_background_operations
병합, 뮤테이션 같은 백그라운드 작업에서 테이블 락 획득에 실패하기까지의 시간(초)이에요.
mutation_workload
뮤테이션과 다른 워크로드 간에 자원을 어떻게 활용하고 공유할지 조절하는 데 사용돼요. 지정된 값은 이 테이블의 백그라운드 뮤테이션을 위한 workload 설정 값으로 사용됩니다. 지정하지 않으면(빈 문자열), 서버 설정 mutation_workload가 대신 사용돼요.
See Also- Workload Scheduling
non_replicated_deduplication_window
비복제 MergeTree 테이블에서 최근에 삽입된 블록 중 중복 확인을 위해 해시 합을 저장하는 블록 수예요. 가능한 값:
- 양의 정수.
- 0 (중복 제거 비활성화).
복제 테이블과 유사한 중복 제거 메커니즘이 사용됩니다(replicated_deduplication_window 설정 참고). 중복 제거 해시 합은 전체 삽입 블록을 덮어요. 해시 합은 ClickHouse Keeper가 아니라 디스크의 로컬 파일에 기록됩니다.
notify_newest_block_number
SharedJoin 또는 SharedSet에 최신 블록 번호를 알릴지 여부예요. ClickHouse Cloud에서만 사용됩니다.
nullable_serialization_version
Nullable(T) 열에 사용되는 직렬화 방식을 제어해요.
가능한 값:
- basic — Nullable(T)의 표준 직렬화를 사용함.
- allow_sparse — Nullable(T)가 스파스 인코딩을 사용하도록 허용함.
object_serialization_version
JSON 데이터 타입의 직렬화 버전이에요. 호환성을 위해 필요합니다. 가능한 값:
- v1
- v2
- v3
공유 데이터 직렬화 버전 변경은 v3만 지원합니다.
old_parts_lifetime
갑작스러운 서버 재부팅 중 데이터 손실을 보호하기 위해 비활성 파트를 저장하는 시간(초)이에요. 가능한 값:
- 양의 정수.
여러 파트를 새 파트로 병합한 후 ClickHouse는 원래 파트를 비활성으로 표시하고 old_parts_lifetime초 후에만 삭제해요. 비활성 파트는 현재 쿼리에서 사용되지 않으면, 즉 파트의 refcount가 1이면 제거됩니다.
새 파트에는 fsync가 호출되지 않으므로 한동안 새 파트는 서버의 RAM(OS 캐시)에만 존재해요. 서버가 갑자기 재부팅되면 새 파트가 손실되거나 손상될 수 있어요. 데이터를 보호하기 위해 비활성 파트는 즉시 삭제되지 않습니다.
시작 중 ClickHouse는 파트의 무결성을 확인합니다. 병합 파트가 손상되었으면 ClickHouse는 비활성 파트를 활성 목록으로 되돌리고 나중에 다시 병합합니다. 그런 다음 손상된 파트는 이름이 바뀌고(broken_ 접두사 추가) detached 폴더로 이동됩니다. 병합 파트가 손상되지 않았으면 원래 비활성 파트의 이름이 바뀌고(ignored_ 접두사 추가) detached 폴더로 이동됩니다.
기본 dirty_expire_centisecs 값(Linux 커널 설정)은 30초(기록된 데이터가 RAM에만 저장되는 최대 시간)이지만, 디스크 시스템에 부하가 많으면 데이터가 훨씬 늦게 기록될 수 있어요. 실험적으로 old_parts_lifetime에 480초 값이 선택되었으며, 그 시간 동안 새 파트가 디스크에 기록됨이 보장됩니다.
optimize_row_order
삽입 중 행 순서를 최적화해 새로 삽입된 테이블 파트의 압축성을 개선할지 여부를 제어해요. 일반 MergeTree 엔진 테이블에만 효과가 있습니다. 특수 MergeTree 엔진 테이블(예: CollapsingMergeTree)에는 아무것도 하지 않아요.
MergeTree 테이블은 (선택적으로) compression codecs로 압축됩니다. LZ4, ZSTD 같은 일반 압축 코덱은 데이터에 패턴이 있을 때 최대 압축률을 달성합니다. 같은 값의 긴 연속은 보통 매우 잘 압축됩니다.
이 설정이 활성화되면 ClickHouse는 새 파트의 열들에 걸쳐 동일한 값 연속(run) 수를 최소화하는 행 순서로 새로 삽입된 파트의 데이터를 저장하려고 시도해요. 즉, 동일 값 연속 수가 적다는 것은 개별 연속이 길어 잘 압축된다는 뜻입니다.
최적 행 순서를 찾는 것은 계산적으로 불가능합니다(NP hard). 따라서 ClickHouse는 원래 행 순서보다 압축률을 여전히 개선하는 행 순서를 빠르게 찾는 휴리스틱을 사용해요. 활성화하면 삽입 작업이 새 데이터의 행 순서를 분석·최적화하는 데 추가 CPU 비용이 발생합니다. 데이터 특성에 따라 INSERT가 30-50% 더 오래 걸릴 것으로 예상됩니다. LZ4 또는 ZSTD의 압축률은 평균 20-40% 개선됩니다.
이 설정은 기본 키가 없거나 낮은 카디널리티 기본 키(즉, 기본 키 값이 몇 개뿐인 테이블)가 있는 테이블에 가장 잘 작동해요. DateTime64 타입의 타임스탬프 열을 포함하는 것 같은 높은 카디널리티 기본 키는 이 설정의 혜택을 보지 못할 것으로 예상됩니다.
packed_skip_index_max_bytes
이보다 작으면(직렬화된 디스크 바이트, 즉 하위 스트림의 압축·해싱 체인 뒤) 스킵 인덱스 하위 스트림을 별도의 skp_idx_<name>.idx2 / .mrk2 파일 대신 파트당 단일 skp_idx.packed 아카이브로 묶는 임계값이에요. 이보다 큰 하위 스트림은 레거시 per-file 레이아웃을 유지합니다. 결정은 쓰기 시점에 하위 스트림별로 독립적으로 내려지므로, 단일 파트가 작은 인덱스(예: minmax)는 패킹하고 큰 것(예: 무거운 bloom_filter)은 per-file로 가질 수 있어요. 패킹을 완전히 비활성화하려면 0으로 설정하세요. 기본값은 1 MiB로, 일반적으로 작은 스킵 인덱스를 파트당 하나의 아카이브로 묶어 객체 스토리지의 객체 수(및 읽기 요청)를 줄이면서 진짜 큰 하위 스트림은 per-file 레이아웃으로 남겨둡니다.
각 스킵 인덱스 하위 스트림은 실제로 데이터 파일과 마크 파일로 구성되며, 둘 다 스필(spill) 결정이 내려지기 전에 임계값까지 메모리에 버퍼링됩니다. 따라서 쓰기 중 최고 메모리는 2 * packed_skip_index_max_bytes * (임계값 미만으로 유지되는 하위 스트림 수)로 확장됩니다.
전체 텍스트 인덱스는 이 설정에서 지원되지 않으며 절대 패킹되지 않아요. 테이블에 많은 스킵 인덱스가 정의되어 있을 때(add_minmax_index_for_numeric_columns 등) 패킹은 inode 압박을 줄여줍니다.
디스크 형식은 자체 설명적입니다. 읽는 쪽은 skp_idx.packed를 감지하고 내부에서 패킹된 하위 스트림을 투명하게 제공해요. 이 설정을 변경하면 새로 기록된 파트에만 영향이 있고, 기존 파트는 쓰기 시점의 레이아웃을 유지합니다.
part_minmax_index_columns
per-part min-max 인덱스가 커버하는 열을 선택해요. 각 값은 이전 값 위에 추가 열 그룹을 활성화합니다. 가능한 값:
- partition_key_only — 파티션 키 열만 추적됨.
- with_block_number_offset — 파티션 키 열에 지속된 _block_number와 _block_offset 가상 열을 더함. 이 열들에 의한 파트 수준 프루닝을 활성화함.
patch_parts_version
경량 UPDATE 쿼리가 만든 패치 파트의 디스크 직렬화 버전이에요. 가능한 값:
- v1 - 레거시 형식: 패치 파트는 _part, _part_offset 시스템 열을 포함하며 (_part, _part_offset)으로 정렬됩니다. 최악의 경우 적용 중 메모리 사용은 전체 패치 파트 크기로 제한됩니다.
- v2 - 패치 파트는 메인 테이블의 정렬 키 열을 담고 (sorting_key_columns..., _block_number, _block_offset)으로 정렬됩니다. 적용 중 메모리 사용은 가장 큰 동일 정렬 키 연속으로 제한됩니다.
디스크의 이전 형식 패치는 이 설정과 무관하게 계속 읽을 수 있어요.
propagate_types_serialization_versions_to_nested_types
true이면 string_serialization_version 같은 직렬화 버전이 Array/Map/Nullable/JSON 등 중첩 타입 안으로 전파됩니다. 비활성화하면 직렬화 버전은 이 타입의 최상위 열과 Tuple el에만 영향이 있어요.
ratio_of_defaults_for_sparse_serialization
열의 모든 값 수에 대한 기본 값 수의 최소 비율이에요. 이 값을 설정하면 그 열이 스파스 직렬화로 저장됩니다. 열이 스파스(대부분 0 포함)이면 ClickHouse는 그것을 스파스 형식으로 인코딩하고 계산을 자동으로 최적화할 수 있어요. 데이터는 쿼리 중에 전체 압축 해제가 필요하지 않습니다. 이 스파스 직렬화를 활성화하려면 ratio_of_defaults_for_sparse_serialization 설정을 1.0 미만으로 정의하세요. 값이 1.0 이상이면 열은 항상 일반 전체 직렬화로 기록됩니다.
가능한 값:
- 스파스 직렬화를 활성화하는 0과 1 사이의 Float
- 스파스 직렬화를 사용하지 않으려면 1.0(또는 그 이상)
Example
다음 테이블의 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
ClickHouse Cloud에서만 사용할 수 있어요. 어떤 범위도 drop/replace되지 않은 후 차단 파트를 다시 줄이기 위해 시도하기 전의 최소 대기 시간이에요. 값이 낮으면 background_schedule_pool에서 작업이 자주 트리거되어 대규모 클러스터에서 zookeeper에 대한 요청이 많이 발생하게 됩니다.
replace_long_file_name_to_hash
열의 파일 이름이 너무 길면(‘max_file_name_length’ 바이트 초과) SipHash128로 교체할지 여부예요.
replicated_can_become_leader
true이면 이 노드의 복제 테이블 복제본이 리더십을 획득하려고 시도해요. 가능한 값:
- true
- false
search_orphaned_parts_disks
ClickHouse는 ATTACH 또는 CREATE table 시 모든 디스크에서 고아 파트를 검사해 (정책에 포함되지 않은) 정의되지 않은 디스크에서 데이터 파트를 놓치지 않게 해요. 고아 파트는 잠재적으로 안전하지 않은 스토리지 재구성(예: 디스크가 스토리지 정책에서 제외된 경우)에서 비롯됩니다. 이 설정은 디스크 특성에 따라 검색할 디스크의 범위를 제한합니다. 가능한 값:
- any - 범위 제한 없음.
- local - 범위를 로컬 디스크로 제한함.
- none - 빈 범위, 검색하지 않음
serialization_info_version
serialization.json을 쓸 때 사용하는 직렬화 정보 버전이에요. 클러스터 업그레이드 중 호환성에 필요합니다.
가능한 값:
- basic - 기본 형식.
- with_types - 추가 types_serialization_versions 필드가 있는 형식으로, 타입별 직렬화 버전을 허용함. 이로 인해 string_serialization_version 같은 설정이 효과를 발휘합니다.
- with_missing_columns - with_types의 모든 기록에 더해, 생략된 열과 그 값의 기본값을 나타내는 타입을 나열하는 missing_columns 필드가 있음. skip_empty_columns_on_insert를 활성화하는 데 필요합니다.
롤링 업그레이드 중에는 이 값을 basic으로 설정해 새 서버가 이전 서버와 호환되는 데이터 파트를 만들게 하세요. 업그레이드가 완료된 후 with_types(또는 with_missing_columns)로 전환해 해당 기능을 활성화하세요.
share_nested_offsets
활성화하면(기본), 공통 접두사를 공유하는 점(.)이 있는 Array 열(예: n.a와 n.b)이 Nested 구조의 일부로 취급됩니다. 즉, 디스크에서 단일 오프셋 파일(예: n.size0)을 공유하고, 삽입 중 배열 크기가 동일한지 검증됩니다. 비활성화하면 각 Array 열은 자체 독립 오프셋 파일을 가지며, 점 있는 이름은 특별한 의미를 지니지 않고, 스칼라 열이 점 있는 Array 열과 같은 접두사로 공존할 수 있어요(예: n UInt32와 함께 n.a Array(String)). 이 설정은 테이블 생성 후 변경할 수 없습니다(immutable).
simultaneous_parts_removal_limit
오래된 파트가 많으면 클린업 스레드가 한 번의 반복에서 simultaneous_parts_removal_limit만큼의 파트를 삭제하려고 시도해요. simultaneous_parts_removal_limit이 0으로 설정되면 무제한을 의미합니다.
skip_empty_columns_on_insert
활성화하면 주어진 INSERT 블록에서 값이 완전히 타입 기본값인 열이 디스크의 데이터 파트에 기록되지 않아요. 나중에 파트를 읽을 때 누락된 열은 기록된 타입의 기본값으로 채워집니다. 이는 대부분의 INSERT에서 각 열이 타입 기본값으로 남는 스파스 업데이트 워크로드의 디스크 공간을 절약해요. DEFAULT, MATERIALIZED, ALIAS 표현식이 있는 열은 절대 건너뛰지 않는데, 읽기 경로가 명시적으로 삽입된 타입 기본값을 반환하는 대신 표현식을 평가하기 때문이에요. 패치 파트(경량 UPDATE에 사용)도 제외됩니다.
이 최적화는 파트의 serialization.json에 with_missing_columns 형식 버전으로 누락된 열을 기록하므로, serialization_info_version이 with_missing_columns로 설정된 경우에만 효과가 있습니다. 더 낮은 버전(예: 롤링 업그레이드를 위해 더 낮은 값으로 고정하여 이전 서버가 갓 기록된 파트를 읽을 수 있게 한 경우)에서는 어떤 열도 건너뛰지 않습니다.
storage_policy
저장소 디스크 정책의 이름이에요.
string_serialization_version
최상위 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_ 디렉터리를 얼마나 오래(초) 유지할지예요. 이 값을 낮추면 병합과 뮤테이션이 낮은 값으로는 제대로 동작하지 않을 수 있으므로 낮추지 않는 것이 좋습니다.
try_fetch_recompressed_part_timeout
재압축 병합을 시작하기 전의 타임아웃(초)이에요. 이 시간 동안 ClickHouse는 이 재압축 병합을 할당한 복제본에서 재압축된 파트를 가져오려고 시도합니다. 재압축은 대부분의 경우 느리게 동작하므로, 이 타임아웃까지는 재압축 병합을 시작하지 않고 재압축 병합을 할당한 복제본에서 재압축 파트를 가져오려고 시도해요. 가능한 값:
- 양의 정수.
ttl_only_drop_parts
MergeTree 테이블에서 파트의 모든 행이 TTL 설정에 따라 만료되었을 때 데이터 파트를 완전히 드롭할지 여부를 제어해요. ttl_only_drop_parts가 비활성화되면(기본), TTL 설정에 기반해 만료된 행만 제거됩니다. ttl_only_drop_parts가 활성화되면, 파트의 모든 행이 TTL 설정에 따라 만료되었을 때 전체 파트가 드롭됩니다. 이는 행을 삭제하는 TTL에만 적용됩니다. 열 TTL은 파트를 다시 써야만 처리할 수 있으므로, 만료된 열을 지우는 병합은 이 설정이 활성화되어도 여전히 할당됩니다. 그런 병합은 어차피 파트를 다시 쓰므로, 그 안에서 만료된 행도 제거해요.
wait_for_unique_parts_send_before_shutdown_ms
종료 전에 테이블은 고유 파트(현재 복제본에만 존재)가 다른 복제본에 페치되기를 요구된 시간 동안 기다립니다(0은 비활성화를 의미).
zookeeper_session_expiration_check_period
ZooKeeper 세션 만료 검사 주기(초)예요. 가능한 값:
- 양의 정수.