하위 호환되지 않는 변경 사항
쿼리 및 구문 변경 사항
- 잘못된 별칭 치환으로 인해 쿼리 포맷이 일관되지 않던 문제가 수정되었습니다. 참고: 분석기가 비활성화된 경우, 별칭 참조와 함께
IN을 사용하는 일부CREATE VIEW쿼리는 더 이상 처리되지 않을 수 있습니다. 이를 방지하려면 분석기가 활성화되어 있는지 확인하십시오(24.3부터는 기본적으로 활성화되어 있습니다). #82838 (Alexey Milovidov). JOIN USING ()의 빈 컬럼 목록은 이제 구문 오류로 처리됩니다. 이전에는 쿼리 실행 시INVALID_JOIN_ON_EXPRESSION으로 보고되었으며, 일부 경우에는(Join스토리지와 조인하는 경우 등)LOGICAL_ERROR를 유발할 수 있었습니다. #92371 (Vladimir Cherkasov).- 이제
ORDER BY및 기타 테이블 키 표현식에서는 서브쿼리를 사용할 수 없습니다. #96847 (Alexey Milovidov).
데이터 타입 변경 사항
Nullable(Tuple)지원이 추가되었습니다. 이를 활성화하려면allow_experimental_nullable_tuple_type = 1로 설정하십시오. #89643 (Nihal Z. Miaji).- JSON 타입의 고급 shared data 기능이 이제 기본적으로 활성화됩니다. 이전 버전은 새 JSON 포맷으로 작성된 데이터 파트를 읽을 수 없으므로, 25.8보다 낮은 버전으로는 다운그레이드할 수 없습니다. 안전하게 업그레이드하려면
compatibility설정을 이전 버전으로 지정하거나, MergeTree 설정dynamic_serialization_version='v2'및object_serialization_version='v2'를 설정하십시오. #92511 (Pavel Kruglov). - JSON 타입의
SKIP REGEXP는 이제 기본적으로 부분 일치를 사용합니다. #92847 (Pavel Kruglov). Variant타입 불일치 시 발생하던 논리 오류를 수정했습니다. #95811 (Bharat Nallan).- PostgreSQL의
DATE컬럼은 이제 ClickHouse에서Date32로 자동 추론됩니다(이전에는Date로 추론되었으며, 이 경우 제한된 범위를 벗어난 값에서 오버플로우가 발생할 수 있었습니다). 이제Date32값을 다시 PostgreSQL에 삽입하는 것도 지원됩니다. #95999 (Alexey Milovidov).
스토리지 및 인덱스 변경 사항
- 역텍스트 인덱스의 스토리지 레이아웃이 개선되어 객체 스토리지에서 더 효율적으로 읽을 수 있게 되었으며, 역텍스트 인덱스가 있는 테이블의 머지 성능도 향상되었습니다. 25.12 이전 버전에서 Experimental 텍스트 인덱스를 사용한 경우, 업그레이드 전에 해당 인덱스를 삭제한 후 새 버전에서 다시 빌드해야 합니다. #91518 (Anton Popov).
- 통계의 저장 포맷이 변경되었습니다. 이제 모든 통계는 단일 파일에 저장됩니다. #93414 (Anton Popov).
- 이제 인덱스 파일 이름은 파트 손상을 방지하기 위해 이스케이프 처리됩니다. 이전 버전에서 생성된 인덱스 중 이름에 비ASCII 문자가 포함된 경우 ClickHouse에서 로드하지 못합니다. 이 문제를 처리하려면 MergeTree setting
escape_index_filenames를 사용하십시오. #94079 (Raúl Marín).
제거된 기능
DEFLATE_QPL및ZSTD_QAT코덱이 제거되었습니다. 업그레이드하기 전에 이 코덱으로 압축된 기존 데이터를 다른 코덱으로 변환하십시오. 참고로, 이전에 이 코덱을 사용하려면enable_deflate_qpl_codec또는enable_zstd_qat_codec를 활성화해야 했습니다. #92150 (Robert Schulze).- 단순
ALIAS컬럼에INSERT하는 기능은 더 이상 지원되지 않습니다(#84154 되돌림). 이 기능은 사용자 지정 포맷에서는 작동하지 않았고, 이를 제어하는 설정도 없었습니다. #92849 (Azat Khuzhin). Lazy데이터베이스 엔진이 제거되어 더 이상 사용할 수 없습니다. #93627 (Alexey Milovidov).- 사용할 수 없게 만드는 버그로 인해
metric_log의transposed_with_wide_view모드가 제거되었습니다. 이제system.metric_log를 이 모드로 정의할 수 없습니다. #93867 (Alexey Milovidov).
설정 및 구성 변경 사항
- 데이터 레이크 카탈로그가 객체 스토리지에 접근할 수 없을 경우 오류를 발생시키는 새로운 설정이 추가되었습니다. #93606 (Konstantin Vedernikov).
- 워크로드의 CPU 스케줄링은 이제 기본적으로 선점형입니다.
cpu_slot_preemption서버 설정을 참조하십시오. #94060 (Sergei Trifonov). exact_rows_before_limit,rows_before_aggregation,cross_to_inner_join_rewrite,regexp_dict_allow_hyperscan,regexp_dict_flag_case_insensitive,regexp_dict_flag_dotall,dictionary_use_async_executor설정이 포맷 설정에서 일반 설정으로 재분류되었습니다. 이는 대부분 내부 변경이므로, 사용자에게 보이는 영향은 없습니다. 다만 이러한 설정을 Iceberg, DeltaLake, Kafka, S3, S3Queue, Azure, Hive, RabbitMQ, Set, FileLog 또는 NATS 테이블 엔진 정의에 지정한 경우에는 이제 조용히 무시되지 않고 오류가 발생합니다. #94106 (Robert Schulze).do_not_merge_across_partitions_select_final의 의미가 단순화되었습니다. 이전에는 이 기능이 명시적으로 설정되지 않았더라도 자동으로 활성화될 수 있어 혼란과 운영 환경 문제를 일으켰습니다. 이제1로 설정하면 기능이 무조건 활성화되며,0으로 설정하면 새로운 설정enable_automatic_decision_for_merging_across_partitions_for_final(기본값1)을 따릅니다. #96110 (Nikita Taranov).- S3 스키마 검증이 추가되었습니다. #96194 (Konstantin Vedernikov).
apply_row_policy_after_final설정은 이제 기본적으로 활성화되며, 이에 따라ROW POLICY가 원래 동작처럼FINAL을 따르게 됩니다. 이전에FINAL보다 먼저 행 정책을 적용하기 위해optimize_move_to_prewhere_if_final=1에 의존했다면, 이제 대신apply_row_policy_after_final=0을 사용하십시오. #97279 (Nikolai Kochetov).
보안 및 액세스 제어 변경 사항
- 이제
joinGet/joinGetOrNull은 기반 Join 테이블에 대해SELECT권한을 적용합니다.joinGet('db.table', 'column', key)를 실행하려면 키 컬럼과 가져오려는 속성 컬럼 모두에 대한SELECT권한이 필요합니다. 이러한 권한이 없으면 쿼리는ACCESS_DENIED와 함께 실패합니다. 마이그레이션하려면 전체 테이블 액세스에는GRANT SELECT ON db.join_table TO user를 사용하고, 컬럼 수준 액세스에는GRANT SELECT(key_col, attr_col) ON db.join_table TO user를 사용하여 권한을 부여하십시오. #94307 (Vladimir Cherkasov). - 이제
CREATE TABLE ... AS ...쿼리에는 이전에 잘못 확인되던SHOW TABLES대신SHOW COLUMNS권한이 필요합니다. #94556 (pufit).
삽입 및 중복 제거 변경 사항
- 이제 모든 삽입에 기본적으로 중복 제거가 적용됩니다. 이전에는 async inserts와 materialized views에서는 비활성화되어 있었고 sync inserts에서는 활성화되어 있었습니다. 기존 동작을 유지하려면
deduplicate_insert='backward_compatible_choice'를 명시적으로 설정하십시오(deduplicate_blocks_in_dependent_materialized_views도 동일하게 설정). #95970 (Sema Checherinda).
시스템 테이블 변경 사항
- S3Queue 및 AzureQueue의 인메모리 메타데이터가 이제 제한적으로 유지됩니다. 시스템 테이블 이름이 변경되었습니다.
system.s3queue는 이제system.s3queue_metadata_cache로,system.azure_queue는 이제system.azure_queue_metadata_cache로 변경되었습니다. #95809 (Kseniia Sumarokova).
기타 비호환 변경 사항
- 잘못된 입력값으로 호출하면 충돌하거나 멈출 수 있던 H3 인덱스 함수를 수정했습니다. #93657 (Michael Kolupaev).
새 기능
인증
- 시간 기반 일회용 비밀번호(TOTP)가 인증 메서드로 지원되도록 추가되었습니다. #71273 (Vladimir Cherkasov).
함수
- 지정된 구분자로 구분된 문자열에서 부분 문자열의 순서를 뒤집는
reverseBySeparator함수를 추가했습니다. #91780 (Xuewei Wang). - sRGB와 OKLAB 색 공간 사이를 변환하는
colorOKLABToSRGB및colorSRGBToOKLAB함수를 추가했습니다. #93361 (Pranav Tiwari). - 두 점 사이의 cosine distance를 근사하는
cosineDistanceTransposed함수를 추가했습니다. #93621 (Raufs Dunamalijevs). xxh3_128해시 함수를 추가했습니다. #96055 (Raúl Marín).- MergeTree 인덱스 사용 분석을 위한
mergeTreeAnalyzeIndex()함수를 추가했습니다. #92954 (Azat Khuzhin). - 이제 함수가 새로운
FunctionVariantAdaptor를 통해Variant타입을 지원합니다. #90900 (Bharat Nallan). - 이제 일부 함수는 SQL에서 괄호 없이 호출할 수 있습니다. #94678 (Aly Kafoury).
시스템 테이블
- UDF의 로딩 상태와 구성을 모니터링하기 위한
system.user_defined_functions테이블을 추가했습니다. #90340 (Xu Jia). system.zookeeper_info테이블을 추가했습니다. #90809 (Smita Kulkarni).- 오름차순 소수를 포함하는
system.primes테이블과primes테이블 함수를 추가했습니다. #92776 (Nihal Z. Miaji). - 각 데이터 파트의 파일 수를 보여주는
files컬럼을system.parts에 추가했습니다. #94337 (Match). - 기존 failpoint와 활성화 여부를 확인할 수 있는
system.fail_points테이블을 추가했습니다. #96762 (Pedro Ferreira).
테이블 엔진 및 스토리지
Array컬럼에 텍스트 인덱스 지원이 추가되었습니다. #89895 (Jimmy Aguilar Mena).- Paimon REST 카탈로그 지원이 추가되었습니다. #92011 (JIaQi Tang).
icebergLocalCluster테이블 함수가 추가되었습니다. #93323 (Anton Ivashkin).lazy_load_tables데이터베이스 설정이 추가되었습니다. 활성화하면 데이터베이스 시작 시 테이블을 로드하지 않고, 대신 경량StorageTableProxy를 생성하며 실제 테이블 엔진은 처음 접근할 때 구체화됩니다. #96283 (xiaohuanlin).DatabaseReplicated에 보조 ZooKeeper를 지원합니다. #91683 (RinChanNOW).- 이제 캐시의 데이터 파일과 시스템 파일을 각각 별도 세그먼트로 분할할 수 있습니다. #87834 (MikhailBurdukov).
- 중복 파일 다운로드를 방지해 읽기 성능을 개선하는 Parquet 메타데이터용 새로운 SLRU 캐시가 추가되었습니다. 이 캐시는
SYSTEM DROP PARQUET METADATA CACHE로 삭제할 수 있습니다. #89750 (Grant Holly). - 이제 데이터 레이크 테이블이 Parquet 리더 v3에서
PREWHERE및 다단계PREWHERE를 지원합니다. #93542 (Konstantin Vedernikov). - 공유 스토리지와 대용량 데이터 환경에 유용한, 여러 레플리카에 걸친 분산 인덱스 분석이 추가되었습니다. #86786 (Azat Khuzhin).
삽입 및 중복 제거
- 이제 async insert 중복 제거가 종속된 구체화된 뷰(Materialized View)에서도 작동합니다.
block_id충돌이 발생하면 원본 block을 필터링하여 충돌한block_id와 연결된 행을 제거하고, 남은 행은 해당하는 모든 구체화된 뷰 쿼리를 통해 변환됩니다. #89140 (Sema Checherinda). - 이제 async inserts가 병렬 quorum을 지원합니다. 삽입된 데이터는 quorum까지 복제되며, 중복이 발견되면 쿼리는 이전에 삽입된 데이터도 복제될 때까지 대기합니다. #93356 (Sema Checherinda).
- 통합된 중복 제거 해시로 마이그레이션할 수 있도록
insert_deduplication_version서버 설정이 추가되었습니다. #95409 (Sema Checherinda). - 중복 제거 해시 마이그레이션이 시작되었습니다. #97562 (Sema Checherinda).
SQL 및 쿼리 기능
- 기존
SYSTEM DROP [...] CACHE의 더 명확한 대안으로SYSTEM CLEAR [...] CACHE구문이 추가되었습니다. 기존 구문도 계속 사용할 수 있습니다. #93727 (Pranav Tiwari). - 결과 파트를 커밋하지 않고 머지를 시뮬레이션하는
OPTIMIZE <table> DRY RUN PARTS <part names>쿼리가 추가되었습니다. 머지의 정확성을 검증하고, 머지 관련 버그를 재현하며, 머지 성능을 벤치마크하는 데 유용합니다. #96122 (Anton Popov). ignore_on_cluster_for_replicated_database설정이 활성화되면 이제ON CLUSTER가 포함된 DDL 쿼리를 복제된 데이터베이스에서 실행할 수 있습니다. 이때 클러스터 이름은 무시됩니다. #92872 (Kirill).- 프로젝션 인덱스 기능을 단순화하고 확장하기 위한 새로운 구문과 프레임워크가 도입되었습니다. #91844 (Amos Bird).
설정 및 구성
- 삽입되는 블록의 형성을 더욱 세밀하게 제어할 수 있도록
max_insert_block_size_bytes설정이 추가되었습니다. #92833 (Kirill Kopnev). use_primary_key설정이 추가되었습니다. 프라이머리 키(primary key) 기반의 granule 프루닝을 비활성화하려면 이 값을false로 설정하십시오. #93319 (Nihal Z. Miaji).default_dictionary_database설정이 추가되었습니다. 이 설정을 사용하면 데이터베이스 한정자 없이 참조된 외부 딕셔너리를 지정된 기본 데이터베이스에서 ClickHouse가 확인할 수 있습니다. 이를 통해 XML로 정의된 전역 딕셔너리에서 SQL로 정의된 데이터베이스별 딕셔너리로 마이그레이션하는 작업이 간소화됩니다. #91412 (Dmitrii Plotnikov).- 테이블(table)에서 사용 중인 이름이 지정된 컬렉션이 삭제되지 않도록 방지하기 위해
check_named_collection_dependencies설정이 추가되었습니다(기본적으로 활성화됨). #96181 (Pablo Marcos). - 제한된 CPU 슬롯을 두고 많은 쿼리가 경쟁하는 높은 과구독 상태에서 더 나은 공정성을 제공하는, 동시성 제어용 max-min 공정 스케줄러가 추가되었습니다. 이제
concurrent_threads_scheduler서버 설정(server setting)의 기본값은fair_round_robin이 아니라max_min_fair이며, 이에 따라 짧게 실행되는 쿼리가 오래 실행되는 쿼리 때문에 더 이상 불이익을 받지 않습니다. #94732 #95300 (Sergei Trifonov). - ClickHouse 시작 시와 종료 시의 콘솔 로그 레벨을 각각 재정의할 수 있도록
logger.startup_console_level및logger.shutdown_console_level구성 옵션이 추가되었습니다. #95919 (Garrett Thomas).
모니터링
- 버전 정보가 포함된
ClickHouse_Info메트릭이 Prometheus/metrics엔드포인트에 추가되어, 시간 경과에 따른 상세 버전 정보를 추적하는 차트를 만들 수 있게 되었습니다. #91125 (Christoph Wurm).
실험적 기능
- 이제 벡터 검색에서 클러스터 내 레플리카 전체에 부하를 분산할 수 있어, 단일 VM의 메모리 용량을 초과하는 대규모 벡터 인덱스도 지원할 수 있습니다. #95876 (Shankar Iyer).
ast_fuzzer_runs및ast_fuzzer_any_query설정으로 제어되는 서버 측 AST 퍼저가 추가되었습니다. 활성화하면 서버는 각 쿼리를 정상적으로 실행한 뒤 해당 쿼리의 무작위 변형도 실행하고, 그 결과는 폐기합니다. #97568 (Alexey Milovidov).
개선 사항
쿼리 및 SQL
- 상관 서브쿼리가 이제 더 많은 테이블 엔진과 데이터 소스 유형을 지원합니다. #90175 (Dmitry Novik).
- 상수가 아닌
IN이 이제 스칼라에서도 지원됩니다(예:val1 NOT IN if(cond, val2, val3)). #93495 (Yarik Briukhovetskyi). - JOIN에서 확장된 테이블 별칭 지원이 추가되었습니다(예:
SELECT * FROM (SELECT 1) AS t(a) JOIN (SELECT 1) AS u(b) ON a = b). #95331 (Yarik Briukhovetskyi). - 이제
EXPLAIN indices = 1을EXPLAIN indexes = 1의 별칭으로 사용할 수 있습니다. #92774 (Pranav Tiwari). numbers및primes테이블 함수의 filter pushdown이 개선되었습니다 — ClickHouse는 이제WHERE조건에서 보수적인 값 범위를 추론해 시퀀스 생성을 제한함으로써, 범위 제한 없는 스캔을 방지할 수 있습니다. #96115 (Nihal Z. Miaji).- 이제 동등 집합 최적화가 여러 개의 연속된
INNER JOIN작업에 걸쳐 동작하므로, 체인 내 임의의 테이블에 적용된 필터가 모든 관련 테이블로 자동으로 푸시다운됩니다. #96596 (Vladimir Cherkasov). - 이제
FROM의 단일 서브쿼리에서 자동 클러스터 테이블 함수가 사용됩니다. #96332 (phulv94). - 접두사가 ASCII 문자로만 이루어진 경우, 이제
startsWithUTF8로 필터링할 때 프라이머리 키 인덱스(primary key index)가 사용됩니다. #97055 (vkcku). assumeNotNull,coalesce,ifNull로 키 컬럼을 감싼 경우, 이제 범위 프레디케이트에서 기본 키(primary key) 및 스킵 인덱스 프루닝이 가능해졌습니다. #94754 (Nihal Z. Miaji).- 이제 MergeTree에서 읽을 때는 읽기 단계에서 사용되지 않는 컬럼도 제거되며, 이는 특히 필터가
PREWHERE로 푸시다운된 경우에 유용합니다. #89982 (János Benjamin Antal). use_join_disjunctions_push_down최적화가 이제 기본적으로 활성화됩니다. #89313 (Alexey Milovidov).enable_join_runtime_filters최적화는 이제 기본적으로 활성화됩니다. #89314 (Alexey Milovidov).- 블룸 필터에서 설정된 비트가 너무 많거나 필터링되는 행 수가 너무 적으면 필터를 자동으로 비활성화하여 JOIN 런타임 필터 오버헤드가 줄어들었습니다. #91578 (Alexander Gololobov).
- 조인 재정렬에 런타임 해시 테이블 크기 통계를 사용할지 제어하는
use_hash_table_stats_for_join_reordering설정이 추가되었습니다(기본적으로 활성화됨). #93912 (Vladimir Cherkasov). - 인덱스 분석은 이제 쿼리가 로컬에서 실행되든 병렬 레플리카로 실행되든 관계없이 한 번만 수행됩니다. #94854 (Nikita Taranov).
FINAL쿼리에서 스킵 인덱스의 대상이 프라이머리 키(primary key)를 구성하는 컬럼인 경우, 이제 다른 파트에서의 추가 프라이머리 키 교집합 검사를 건너뜁니다. #93899 (Shankar Iyer).DROP DATABASE는 이제 의존 관계의 역순으로 테이블을 삭제하므로, 데이터베이스에 로딩 의존성이 있는 테이블이 포함된 경우에도 충돌 안전성이 향상됩니다. #97057 (Alexey Milovidov).- 이제 뮤테이션을 동기적으로 기다릴 때 쿼리 취소 및 시간 제한을 준수합니다. #96756 (Alexey Milovidov).
DROP COLUMNmutation 직후ADD COLUMN을 빠르게 실행하면 삭제된 데이터가 다시 살아나는 문제를 방지했습니다. #96713 (Alexey Milovidov).UPDATE및RENAME COLUMN과 충돌하는ALTER표현식은 이제 논리 오류가 아니라 적절한 예외를 발생시킵니다. #96022 (Alexey Milovidov).- 이제 집계 키 컬럼의 예상 총 행 수와 NDV(고유 값 개수) 통계가 수집됩니다. #92812 (Alexander Gololobov).
- 이제 병렬 레플리카 읽기 시 모든 레플리카가 처리되지 않은 ranges를 병렬로 가져올 수 있어, 부하 분산이 개선되고 테일 지연 시간이 줄어듭니다. #91374 (zoomxi).
- 선택성이 매우 높은
PREWHERE필터에 대한 자동 병렬 레플리카의 추정 정확도가 향상되었습니다. #97231 (Nikita Taranov). joinGet이 이제 임시 테이블도 지원합니다. #92973 (Eduard Karacharov).- 외부 집계, 정렬 및 조인이 이제 모든 컨텍스트에서
temporary_files_codec쿼리 설정을 따릅니다. #92388 (Vladimir Cherkasov). - 벡터 유사도 검색 계획 최적화는 이제 검색 대상 컬럼에 인덱스가 있는 경우에만 적용됩니다. #94998 (Eduard Karacharov).
테이블 엔진 및 스토리지
StorageEmbeddedRocksDB가 이제 여러 컬럼을 기본 키로 지원합니다. #33917 (usurai).ALTER TABLE <table> ATTACH PART <part_name> FROM <directory_name>구문이 추가되어, 파일 시스템에서 이름을 수동으로 변경하지 않고도detached/의 임의 하위 디렉터리(예:broken-on-start또는unexpected프리픽스가 있는 파트)에서 파트를 ATTACH할 수 있습니다. #74816 (Anton Popov).min_free_disk_bytes_to_perform_insert가 이제 JBOD 볼륨에서 올바르게 동작합니다. #90878 (Aleksandr Musorin).max_parts_to_merge_at_once가 이제 TTL 삭제 파트 병합 중에도 준수됩니다. #95315 (Kseniia Sumarokova).- 백그라운드 작업(mutate, merge)은 이제
default프로필을 통해 일반 쿼리와 설정을 공유하는 대신,background프로필로 각각 독립적으로 구성할 수 있습니다. #93905 (Arsen Muk). - 올바른 크기 계산이 적용되도록 subcolumn 읽기를 개선하여 메모리 사용량을 줄이고 속도를 향상했습니다. #96251 (Pavel Kruglov).
- 과도한 메모리 사용을 방지하기 위해
split_intersecting_parts_ranges_into_layers로 생성되는 pipeline 스트림 수를 제한했습니다. #96478 (Nikita Taranov). - 텍스트 인덱스가 이제 일반 제공 상태입니다. #96794 (Robert Schulze).
QBit이 이제 일반 제공 상태입니다. #95358 (Raufs Dunamalijevs).- 이제
QBit의 동등성 비교를 지원합니다. #94078 (Raufs Dunamalijevs). enable_positional_arguments_for_projections를 사용해 테이블 스키마를 저장할 때, 이제 위치 인수 대신 표현식이 치환되므로 해당 설정을 비활성화한 상태에서도 서버를 다시 시작할 수 있습니다. #96372 (Alexey Milovidov).- 복제된 데이터베이스에서는 더 이상 모든 더미 쿼리마다 캐시된 클러스터가 갱신되지 않습니다. #96897 (Tuan Pham Anh).
- DDLWorker 상태를 재설정하는
SYSTEM RESET DDL WORKER [ON CLUSTER]쿼리가 추가되었습니다. 이 쿼리는 호스트 ID가 업데이트되었을 때 레플리카 활동을 갱신하는 데 유용합니다. #93780 (Tuan Pham Anh).
데이터 레이크
- DeltaLake 삭제 벡터 지원이 추가되었습니다. #93852 (Kseniia Sumarokova).
- 이제
deltaLakeCluster에서도 삭제 벡터를 지원합니다. #94365 (Kseniia Sumarokova). - 이제 DeltaLake를 macOS에서 사용할 수 있습니다. #95985 (Alexey Milovidov).
- 이제 DeltaLake가 메타데이터의
count()결과를 사용해system.tables에 올바른 테이블 통계(총 바이트 수/행 수)를 표시합니다. #96190 (Kseniia Sumarokova). system.tables에서 DeltaLake 테이블을 쿼리할 때 객체 스토리지 읽기를 건너뛰도록 했습니다. #95899 (Antonio Andelic).- delta-kernel 로깅 디버깅을 위한
SYSTEM RELOAD DELTA KERNEL TRACING <level>명령이 추가되었습니다. #96763 (Kseniia Sumarokova). - Glue 메타데이터에
metadata_location이 지정되지 않은 경우, 이제 Iceberg 테이블 메타데이터 위치를 자동으로 추론합니다. #91994 (Andrey Zvonov). - 이제 Iceberg manifest 파일 항목이 포지션 삭제 파일 이름의 하한 및 상한을 파싱하여 데이터 파일 선택을 개선합니다. #93980 (Daniil Ivanik).
- Iceberg 테이블에
PREWHERE최적화 지원이 추가되었습니다. #95476 (Konstantin Vedernikov). - 이제 Iceberg 테이블에서 데이터 파일 리더와 포지션 삭제 파일 리더가 스레드 및 메모리 제한을 공유합니다. #94701 (Yang Jiang).
- Iceberg 테이블에
ALTER TABLE RENAME COLUMN지원이 추가되었습니다. #97455 (murphy-4o). - 데이터 레이크에 Google Cloud Storage 지원이 추가되었습니다. #93866 (Konstantin Vedernikov).
- 이제 Unity Catalog 사용 시 장시간 실행되는 쿼리 동안 S3 액세스 토큰이 동적으로 갱신됩니다. #95069 (Konstantin Vedernikov).
aws_role_arn및aws_role_session_name설정을 통해 Glue catalog에 대한 역할 기반 접근이 추가되었습니다. #90825 (Antonio Andelic).
S3Queue
- S3Queue가 이제 ordered 모드에서 Hive 파티셔닝을 추적합니다. #81040 (Anton Ivashkin).
- 버킷을 활용하도록 S3Queue ordered 모드 처리를 리팩터링하여 Keeper 요청 수를 줄이고 성능을 개선했습니다. #92889 (Kseniia Sumarokova).
- S3Queue ordered 모드에 보다 범용적인 파티셔닝 지원을 추가했습니다. #94321 (Bharat Nallan).
- ordered 모드의 S3Queue에 파티션 키 기반 버킷팅을 추가했습니다. #94698 (Bharat Nallan).
keeper_path설정을 통해 S3Queue의 보조 ZooKeeper를 지원합니다. #95203 (Diego Nieto).- S3(Azure)Queue ordered 모드는 이제 한도를 추적해 실패한 노드를 정리합니다. #94412 (Kseniia Sumarokova).
S3 및 객체 스토리지
- S3
x-amz-server-side-encryption헤더는 더 이상HeadObject,UploadPart,CompleteMultipartUpload요청에 전달되지 않습니다. #64577 (Francisco J. Jurado Moreno). - 이제 S3 테이블 엔진과
s3테이블 함수에 대해 이름이 지정된 컬렉션에서storage_class_name을 지정할 수 있습니다. #91926 (János Benjamin Antal). - 인스턴스 프로필 자격 증명을 사용해 동시에 많은 S3 쿼리를 실행할 때 발생하던 EC2 metadata endpoint 스로틀링 문제를 수정했습니다. 이제 자격 증명 provider가 캐시되어 모든 쿼리에서 공유됩니다. #92891 (Sav).
- AWS S3 C++ SDK에 MinIO 전용 오류용 오류 코드 매핑을 포함한 MinIO 호환성 지원을 추가해, 자체 호스팅 MinIO cluster의 안정성을 높였습니다. #93082 (XiaoBinMu).
- 자격 증명을 확인하라는 안내를 포함하도록 S3 authentication 오류 메시지를 개선했습니다. #95648 (Gerald Latkovic).
- 이제 Azure Blob Storage는 네이티브 복사가 어떤 오류로든 실패하면 읽기-쓰기 복사로 대체됩니다(이전에는 인증되지 않음 오류일 때만 대체됨). #92888 (Smita Kulkarni).
함수
avg()가 이제Date,DateTime,Time값을 인수로 지원합니다. #87845 (Yarik Briukhovetskyi).mapContainsKeyLike와mapContainsValueLike가 이제mapKeys()또는mapValues()의 텍스트 인덱스를 활용할 수 있습니다. #93049 (Michael Jarrett).flipCoordinates가 이제Geometry타입을 지원합니다. #93303 (Bharat Nallan).hasAnyTokens및hasAllTokens함수의 64개 token 제한을 제거했습니다. #95152 (Elmi Ahmadov).- 다른 거리 함수와의 일관성을 위해
cosineDistance의 별칭으로distanceCosine을 추가했습니다. #96065 (Raufs Dunamalijevs). - ClickHouse KQL에
iif함수를 추가했습니다. #94790 (happyso). use_variant_as_common_type가 이제 기본적으로 활성화되어,Array,UNION쿼리,if/multiIf/case분기 내에서 서로 호환되지 않는 타입도 허용합니다. #90677 (Alexey Milovidov).
설정 및 구성
use_skip_indexes_on_data_read는 이제 기본적으로 활성화되어 있습니다. #93407 (Shankar Iyer).add_minmax_index_for_time_columns설정이 추가되었습니다 — 활성화하면 모든Date,Date32,Time,Time64,DateTime,DateTime64컬럼에 대해 MinMax 인덱스를 자동으로 생성합니다. #93355 (Michael Jarrett).materialize_statistics_on_merge설정(기본값은 활성화됨)이 추가되어, 머지 중에 통계를 구체화할지 여부를 제어할 수 있습니다. #93379 (Han Fei).- 악의적인 페이로드를 방지하기 위해 바이너리 형식으로 디코딩할 수 있는 전체 타입 노드 수를 제한하는
input_format_binary_max_type_complexity설정이 추가되었습니다. #92519 (Raufs Dunamalijevs). - 특정 이벤트 이름만 대상으로
trace_profile_event트레이싱을 제한할 수 있도록trace_profile_events_list설정이 추가되었습니다. #92298 (Alexey Milovidov). - 하나는 리터럴이고 다른 하나는 중첩 객체인 경우 JSON에서 중복된 경로를 허용하는
type_json_allow_duplicated_key_with_literal_and_nested_object설정이 추가되었습니다. 이는 경로 중복 제거가 강제되기 전에 생성된 데이터와의 하위 호환성을 유지하기 위한 것입니다. #93604 (Pavel Kruglov). - 머지 및 파싱 중 JSON 컬럼의 동적 서브컬럼 수를 제한하는
merge_max_dynamic_subcolumns_in_compact_partMergeTree setting과max_dynamic_subcolumns_in_json_type_parsing쿼리 수준 setting이 추가되었습니다. #94184 (Pavel Kruglov). use_primary_key및use_skip_indexes와의 일관성을 위해allow_statistics_optimize의 별칭으로use_statistics를 추가했습니다. #94366 (Robert Schulze).- 요소 존재 여부를 확인할 수 있도록 Numbers-to-Enum 변환에
input_format_numbers_enum_on_conversion_error를 활성화했습니다. #94384 (Elmi Ahmadov). - 테이블에 행 정책이 있지만 현재 사용자에게 적용되는 정책이 하나도 없을 때 예외를 발생시키는 설정이 추가되었습니다. 이를 통해 잠재적인 구성 오류를 감지할 수 있습니다. #95014 (Vitaly Baranov).
enable_max_bytes_limit_for_min_age_to_force_merge는 이제 호환성 버전 26.2 이상에서 기본값으로 활성화됩니다. #95917 (Christoph Wurm).core_dump.size_limit은 이제 서버를 재시작하지 않고도 핫 리로드할 수 있습니다. #96524 (Miсhael Stetsyuk).- 구성을 다시 로드할 때 이제 명령줄 재정의가 적용됩니다. #80295 (Alexey Milovidov).
- 서버 로그에 대해 복합 로테이션 전략(크기 + 시간)을 추가했습니다. #87620 (Jianmei Zhang).
- 이제 파트 수(
distributed_index_analysis_min_parts_to_activate)와 인덱스 크기(distributed_index_analysis_min_indexes_size_to_activate)를 기준으로 분산 인덱스 분석을 활성화할 수 있게 되었습니다. #95216 (Azat Khuzhin). - Statistics 캐시는 이제 기본적으로 활성화되며, 업데이트 주기는 300초입니다. #95841 (Han Fei).
path구성 매개변수는 이제 시작 시 작업 디렉터리를 기준으로 상대적으로 해석되므로, 데이터 디렉터리가 비정상적인 위치에 생성되는 것을 방지합니다. #96305 (Alexey Milovidov).
시스템 테이블 및 모니터링
- 진단 기능을 개선하기 위해
system.mutations에parts_postpone_reasons컬럼을 추가했습니다. #92206 (Shaohua Wang). system.data_skipping_indices에creation(implicit/explicit) 컬럼을 추가했습니다. #92378 (Raúl Marín).- 이제 실행 중인 작업이
system.background_schedule_pool및 해당 로그 테이블에 반영됩니다. #92587 (Azat Khuzhin). - 실행 중인 내부 쿼리가 아닌 쿼리 수를 추적하는
QueryNonInternal메트릭을 추가하여max_concurrent_queries제한에 대한 동시성 모니터링에 도움이 되도록 했습니다. #94284 (Ashwath Singh). - 가장 오래 실행 중인 머지의 경과 시간을 나타내는 비동기 메트릭을 추가했습니다. #94825 (Raúl Marín).
- 물리적 연결을 반영하도록
query_log에connection_address및connection_port를 추가했습니다(프록시를 통해 연결된 경우 유용함). #95471 (Yakov Olkhovskiy). system.crash_log에 더 많은 정보를 추가했습니다. #94112 (Miсhael Stetsyuk).system.aggregated_zookeeper_log에 component 이름을 추가했습니다. #95882 (Antonio Andelic).- 사용 가능한 모든 토크나이저를 보여주는
system.tokenizers테이블을 추가했습니다. #96753 (Robert Schulze). - jemalloc 메모리 allocator 통계를 대화형으로 시각화할 수 있도록
system.jemalloc_stats테이블과/jemalloc.htmlHTTP endpoint를 추가했습니다. #97077 (Antonio Andelic). - raw, symbolized, collapsed 출력 형식을 지원하며 jemalloc heap profile을 읽고 분석할 수 있는
system.jemalloc_profile_text테이블을 추가했습니다. #97218 (Antonio Andelic). MUTATE_PART및MUTATE_PART_START이벤트에 대해system.part_log에mutation_ids를 추가했습니다. #93811 (Shaohua Wang).- 중첩된 전역 server settings(예:
logger.level)가 이제system.server_settings에 부분적으로 표시됩니다. #94001 (Hechem Selmi). - 이제
view_duration_ms는 thread Duration의 합계가 아니라 그룹이 활성 상태였던 시간을 보여줍니다. #94966 (Sema Checherinda). - 이제
system.blob_storage_log를 Azure Blob Storage, Local, HDFS에서 사용할 수 있습니다.error_code컬럼도 추가했습니다. #93105 (Alexey Milovidov). - 평균보다 느린 Background 작업은 이제 구성 가능한 임계값(
background_schedule_pool_log.duration_threshold_milliseconds, 기본값 30ms)을 기준으로 로그에 기록됩니다. #92965 (Azat Khuzhin). - URL storage의 password는 더 이상 쿼리 로그에 표시되지 않습니다. #93245 (Konstantin Vedernikov).
ClickHouse Keeper
- 마지막으로 커밋된 인덱스보다 앞선 로그에 대해 Keeper 로그 엔트리의 간격(gaps)을 올바르게 처리합니다. #90403 (Antonio Andelic).
- Keeper 요청에 대한 OpenTelemetry tracing이 추가되었습니다. #91332 (Miсhael Stetsyuk).
- 새로운 Keeper 메트릭이 추가되었습니다:
KeeperChangelogWrittenBytes,KeeperChangelogFileSyncMicroseconds,KeeperSnapshotWrittenBytes,KeeperSnapshotFileSyncMicroseconds,KeeperBatchSizeElements,KeeperBatchSizeBytes. #92149 (Miсhael Stetsyuk). CHECK_STAT및TRY_REMOVEKeeper 확장이 이제 기본적으로 활성화됩니다. #93886 (Mikhail Artemenko).- Keeper는 이제 손상된 snapshot 또는 일관되지 않은 changelog를 감지하면 중단하는 대신 예외를 발생시켜, 더 안전한 복구를 위해 수동 개입이 필요하도록 합니다. #94168 (Antonio Andelic).
getChildrenKeeper 요청에with_data및with_stat확장이 추가되어, 단일 작업으로 하위 항목과 해당 데이터 및 통계를 함께 가져올 수 있습니다. #94826 (Nikolay Degterinsky).- cluster 조립 실패로 이어질 수 있는 Keeper 오구성을 확인하는 검사 기능이 추가되었습니다. #94682 (Konstantin Bogdanov).
- Database Replicated에서 table 가져오기를 개선하기 위해
with_dataKeeper 확장 지원이 추가되었습니다. #96090 (Nikolay Degterinsky). - 이제
system.zookeeper를 통해 보조 ZooKeeper에 삽입할 수 있습니다. #92092 (RinChanNOW).
메모리 관리
- 파일 시스템 캐시 공간 예약을 최적화했습니다 — 이제 unique lock을 잡은 상태를 유지하지 않고도 축출 후보를 수집합니다. #82764 (Kseniia Sumarokova).
- 원격 테이블 엔진/함수용 파일 시스템 캐시 읽기 버퍼에서 병렬 읽기를 활성화했습니다. #71781 (Kseniia Sumarokova).
- jemalloc dirty page를 즉시 제거하도록 하여 Linux 이외의 시스템에서 메모리 사용량을 줄였습니다. #93360 (Eduard Karacharov).
- 이제 jemalloc dirty page 제거는 메인 MemoryWorker 스레드와 분리된 별도 스레드에서 실행됩니다. 총 메모리 사용 비율을 기준으로 제거를 수행하기 위한
memory_worker_purge_total_memory_threshold_ratio구성을 추가했습니다. #94902 (Antonio Andelic). - 이제 ClickHouse가 지속적인 메모리 압박 상태에 있으면 jemalloc dirty page decay가 동적으로 비활성화됩니다. #95145 (Antonio Andelic).
- MergeTree에서 데이터를 읽기 전에 명시적인 메모리 사용량 검사를 추가했으며, 운영 환경에서의 경험을 바탕으로 스레드 풀 큐 크기도 줄였습니다. #94692 (Nikita Mikhaylov).
- 이제 사용자 인증 전에 총 메모리 제한을 검사하며, 제한을 초과하면
memory limit exceeded를 발생시킵니다. #95003 (Nikolai Kochetov). - 쿼리 conditions 캐시의 잘못된 메모리 계산을 수정했습니다. #95478 (Nikita Mikhaylov).
- 집계/정렬 중 디스크로 스필할 때 쿼리 메모리 사용량을 감지하는 기능을 더욱 안정적으로 개선했습니다. #92500 (Azat Khuzhin).
- 이제 스케줄러는 CPU 기아 상태에서 프로세스를 보호하기 위해 MemoryWorker 스레드에 우선순위를 부여합니다. #94864 (Nikita Mikhaylov).
- 일부 경우 테이블에서 읽을 때 ClickHouse가 메모리 제한을 준수하지 않던 문제를 수정했습니다. #93715 (Nikita Mikhaylov).
데이터 포맷
- 이제 Parquet 리더에서
Tuple또는Map컬럼을 JSON으로 읽을 수 있습니다. #92864 (Michael Kolupaev). - 이제 Parquet 리더가 빈 튜플을 지원합니다. #92868 (Michael Kolupaev).
- 이제
Date타입은 Arrow/ArrowStream 포맷에서 Arrow의 네이티브date32타입으로 직렬화됩니다(기존에는uint16). 이전 동작은output_format_arrow_date_as_uint16설정으로 복원할 수 있습니다. #96860 (Alexey Milovidov). - 이제
Hash출력 형식은 블록 크기와 무관합니다. #94503 (Alexey Milovidov). - Pretty JSON 포맷에서 단순 타입은 더 이상 별도 줄에 출력되지 않습니다. #93836 (Pavel Kruglov).
- 이제 스키마 추론은
allow_experimental_nullable_tuple_type를 반영합니다. 이 설정을 활성화하면 누락된 중첩 객체는NULL요소로 이루어진 튜플 대신NULL이 될 수 있습니다. #95525 (Nihal Z. Miaji). - 이제 SQL formatter는
SELECT를 괄호로 감싸는 대신AS SELECT앞에COMMENT를 출력합니다. #96293 (Alexey Milovidov). - simdcomp를 사용해 postings list 압축을 최적화했습니다. #92871 (Peng Jian).
백업 및 복원
- 갱신 가능 구체화 뷰의 데이터를 백업할지 여부를 제어하는
backup_data_from_refreshable_materialized_view_targets백업 설정이 추가되었습니다.APPEND갱신 전략을 사용하는 RMV의 대상은 항상 백업됩니다. #93658 (Julia Kartseva). - S3 및 Azure Blob Storage에 대해
BACKUP/RESTORE에서 SQL로 정의된 이름이 지정된 컬렉션을 지원하도록 추가되었습니다. #94605 (Pablo Marcos).
이름이 지정된 컬렉션 및 딕셔너리
- 이제 MongoDB 테이블 함수에서 이름이 지정된 컬렉션 매개변수 재정의를 허용합니다. #89616 (vanchaklar).
- YTsaurus 딕셔너리와 테이블에서 이름이 지정된 컬렉션을 사용할 수 있게 되었습니다. #94582 (MikhailBurdukov).
- 이제 YTsaurus 동적 테이블 딕셔너리 소스에 컬럼 설명을 전달할 수 있게 되었습니다. #92391 (MikhailBurdukov).
- 매개변수화된 뷰의 스키마를 명시적으로 지정한 경우 이제 표시됩니다. #90220 (Grigorii Sokolik).
중복 제거
- 이전 버전과의 호환성 옵션을 추가할 수 있도록
insert_select_deduplicate설정을 개편했습니다. #92951 (Sema Checherinda). - 이제 materialized view가 포함된 경우에도 async inserts에서 중복 제거가 허용됩니다. #93957 (Sema Checherinda).
기타 개선 사항
SYSTEM INSTRUMENT ADD/REMOVE의 UX를 개선했습니다. 이제 함수 이름에 문자열 리터럴을 사용하고, 일치하는 모든 함수에 패치가 적용되며,REMOVE에서function_name도 지원합니다. #93345 (Pablo Marcos).- 일시 중지 가능한 failpoint를 위한
SYSTEM NOTIFY FAILPOINT와 PAUSE/RESUME를 위한SYSTEM WAIT FAILPOINT를 추가했습니다. #92368 (Shaohua Wang). system.trace_log,system.symbols,demangle함수에서 C++ 함수 이름이 이제 올바르게 표시됩니다. #93075 (Alexey Milovidov).- jemalloc 프로파일이 이제 심볼과 함께 기록되므로 힙 프로파일 생성 시 binary가 더 이상 필요하지 않습니다. #93099 (Azat Khuzhin).
- 스택 언와인딩 중
dropReplicationSlot에서 예외가 발생할 때MaterializedPostgreSQL데이터베이스에 테이블을 ATTACH하는 과정에서 발생하던 크래시를 수정했습니다. #96871 (Alexey Milovidov). CREATE TABLE이 실패할 때 잔여 항목이 남을 수 있던 문제를 수정했습니다. #94174 (Azat Khuzhin).- password로 보호된 TLS key를 사용할 때 발생하던 초기화되지 않은 메모리 접근 문제를 수정했습니다. #94182 (Konstantin Bogdanov).
alter table ... modify setting ...이 잠금 획득 중 timeout되면, 이제 논리 오류가 아니라 timeout 오류를 반환합니다. #93856 (Han Fei).- socket timeout과 함께 사용할 때 CPU 및 real-time 프로파일러의 상호 운용성을 개선했습니다. #96601 (Sergei Trifonov).
- 릴리스 빌드(release builds)에서 빠른 libcxx 하드닝(주로 범위 밖 검사)을 활성화했으며, 눈에 띄는 성능 영향은 없습니다. #94757 (Miсhael Stetsyuk).
성능 개선
JOIN 성능
ColumnVector::replicate에 동적 디스패치를 구현하여 일부 해시 조인 작업의 성능을 개선했습니다. #79573 (Raúl Marín).- 이제 더 많은 필터가 JOIN까지 푸시다운됩니다. #85556 (Nikita Taranov).
- 필터가 한쪽 입력만 사용하는 경우,
ANY,SEMI,ANTI조인에 대해 JOINON조건에서의 필터 푸시다운을 확장했습니다. #92584 (Dmitry Novik). - 이제 등가 집합을 사용해
SEMI JOIN에 대한 필터를 푸시다운할 수 있습니다. #92837 (Dmitry Novik). - 복잡한 프레디케이트에 대해
ParallelHashJoin에서 조인되지 않은 행 처리의 병렬화를 지원하며, 이는parallel_non_joined_rows_processing설정으로 제어됩니다(기본적으로 활성화됨). #92068 (Yarik Briukhovetskyi). - 이제 오른쪽이 비어 있으면 해시 조인이 왼쪽을 아예 읽지 않고 건너뛰므로, 과도한 필터링이나 집계로 인한 불필요한 작업을 피할 수 있습니다. #94062 (Alexander Gololobov).
- 이제
RIGHT OUTERJOIN에서 JOIN 런타임 필터를 지원합니다. #96183 (Hechem Selmi). - 이제 PREWHERE 최적화가 JOIN 런타임 필터 최적화 이후에 수행되므로, 런타임 필터도 PREWHERE까지 푸시다운할 수 있습니다. #95838 (Alexander Gololobov).
쿼리 최적화
- 파티션 키가 정렬 키와 같거나 그 접두사인 경우, 윈도우 함수의 정렬 순서 최적화를 비활성화해 병렬 실행 성능을 개선했습니다. #87299 (Nikita Taranov).
- 이제 외부 필터 조건이 뷰 내부로 푸시다운되어 로컬 노드와 원격 노드 모두에서 PREWHERE를 적용할 수 있습니다. #88316 (Igor Nikonov).
- 소수 값의
LIMIT및OFFSET에 대한 성능과 메모리 사용량을 최적화했습니다. #91167 (Ahmed Gouda). - 가상 컬럼에 대한 상수 필터는 더 이상 중복 평가되지 않습니다. #91588 (c-end).
- 이제 프라이머리 키의 모든 결정적 표현식(예:
ORDER BY cityHash64(user_id))을 데이터 스키핑에 사용할 수 있습니다. ClickHouse는 쿼리 상수에 해당 표현식을 적용하고, 그 결과를=,IN,has에 대한 프라이머리 키 인덱스 조회에 사용합니다. 단사 표현식의 경우 부정 형태(!=,NOT IN,NOT has)도 지원합니다. #92952 (Nihal Z. Miaji). - 이제 read-in-order 최적화는
WHERE조건 때문에ORDER BY컬럼이 상수가 되는 경우를 인식하여 역순 읽기도 효율적으로 수행할 수 있습니다. 이는WHERE tenant='42' ORDER BY tenant, event_time DESC와 같은 멀티 테넌트 쿼리에 도움이 됩니다. #94103 (matanper). - 프라이머리 키 조건 다음에 스킵 인덱스가 사용되는
FINAL쿼리의 경우, 이제PrimaryKeyExpand단계는 처음에 추려진 프라이머리 키 범위만 검사합니다. #94903 (Shankar Iyer). - 이제 lazy materialization 최적화가
UNION ALL쿼리의 첫 번째 분기뿐 아니라 모든 분기에 적용되어, 서로 다른 MergeTree 테이블에서 여러 정렬 읽기와 제한된 읽기를 결합하는 쿼리의 I/O를 줄입니다. #96832 (Federico Ginosa).
함수 및 집계 성능
- 이제 JIT 컴파일이 더 많은 함수에 적용됩니다. #88770 (Alexey Milovidov).
distinctJSONPaths집계 함수를 최적화하여 전체 JSON 컬럼 대신 데이터 파트의 JSON 경로만 읽도록 했습니다. #92196 (Pavel Kruglov).- 동일한 요소가 연속해서 자주 나타나는 경우
uniqExact를 최적화했습니다. #93268 (Alexey Milovidov). - 모든 입력 값이 ASCII인 경우
isValidASCII를 최적화했습니다. #93347 (Robert Schulze). - 가능한 경우 삽입을 배칭 처리하여 숫자 타입에서의
uniq를 더 빠르게 했습니다(NULL아님,-If없음,GROUP BY없음,IPv6또는String없음). #95904 (Raúl Marín).
스토리지 및 I/O 성능
- Parquet Reader V3 Prefetcher가 더 빠른 랜덤 읽기 로직을 사용하도록 수정했습니다. #91435 (Arsen Muk).
icebergCluster의 성능을 개선했습니다. #91537 (Yang Jiang).- 적응형 쓰기 버퍼를 활성화해 Wide 파트를 사용하는 매우 넓은 테이블의
INSERT및 머지 메모리 사용량을 줄였습니다. 또한 암호화된 디스크에 대한 적응형 쓰기 버퍼 지원도 추가했습니다. #92250 (Azat Khuzhin). - 검색하는 토큰 수를 줄여 텍스트 인덱스와
sparseGrams토크나이저를 사용하는 전체 텍스트 검색 성능을 개선했습니다. #93078 (Anton Popov). - x86에서 동적 디스패치를 사용해 T64 코덱 압축 속도를 높였습니다. #95881 (Raúl Marín).
- x86에서 32바이트 블록의 LZ4 압축 해제 속도를 높였습니다. #96778 (Raúl Marín).
- 이제 텍스트 인덱스 직접 읽기 최적화가 부분적으로 동작합니다 — 구체화된 텍스트 인덱스가 있는 파트는 이를 사용하고, 없는 파트는 기존 필터 표현식으로 처리됩니다. #96411 (Anton Popov).
- 불필요한 데이터 복사를 제거하고 숫자 컬럼에 대한 벡터화된 최소/최대 계산을 활성화해
INSERT중minmax스킵 인덱스 계산을 최적화했습니다. #97392 (Raúl Marín). - 더 빠른 필터링을 위해 시스템 로그 테이블의 시간 컬럼에
minmax보조 인덱스를,query_id/initial_query_id컬럼에bloom_filter인덱스를 추가했습니다. #96712 (Alexey Milovidov). - 중복 제거가 활성화되지 않았을 때
INSERT에서 발생하던 메모리 사용량 회귀를 방지했습니다. #96503 (Alexey Milovidov).
메모리 최적화
- 하이라이트와
VALUESparsing이 활성화되지 않은 경우, 사용되지 않는 필드를 제거해ASTLiteral의 메모리 사용량을 줄였습니다. #93974 (Ilya Yatsishin). - 범용
ASTLiteral자식 요소 대신 값 매개변수를 문자열/정수 쌍으로 저장하는 전용 Enum AST 클래스를 도입해 메모리 사용량을 줄였습니다. #94178 (Ilya Yatsishin). - 범용 AST 리터럴 노드 대신 컬럼 이름을 문자열로 직접 저장하도록 해 named tuple AST 객체의 메모리 사용량을 최적화했습니다. #94704 (Ilya Yatsishin).
CachedOnDiskReadBufferFromFile구조체의 크기를 약 50배 줄였습니다. #96098 (Azat Khuzhin).- 이제
HashTable::resize는 테이블이 비어 있을 때 기존 데이터를 복사하지 않습니다. #96180 (Raúl Marín).
내부 최적화
- 쿼리 파이프라인 내부에서 데이터를 파티셔닝하기 위해 “fastrange”(Daniel Lemire) 메서드를 도입하여 병렬 정렬과 조인 성능을 개선했습니다. #93080 (Alexey Milovidov).
- 추가 링커 옵션을 통해 devirtualization을 개선했습니다. #94737 (Nikita Taranov).
- ZooKeeper 요청을 배칭하여 파트가 많은
ReplicatedMergeTree테이블의 레플리카 클론 성능을 개선했습니다. #94847 (c-end). - 더 빠른 해싱과 lock-free 카운터로 전환하여
observeOperations에서 ZooKeeper 수신 스레드의 CPU 사용량을 20% 이상 줄였습니다. #95962 (Miсhael Stetsyuk).
버그 수정
모든 버그 수정 사항 (클릭하여 펼치기)
모든 버그 수정 사항 (클릭하여 펼치기)