본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 23.11 Release note 요약

by 연습장이 2024. 5. 26.
728x90
반응형

목적

  • upgrade에 따른 데이터 정합성, 성능 간 이슈 등을 사전에 체크하여 장애 발생을 방지
  • 지속적으로 dbms 생명주기를 관리하여 신기술에 대한 인지 및 도입 방안 마련

 

읽기 전에

  • 아래 내용은 Release note 내용 중 필요하다고 판단되는 부분 위주로 정리함
  • 버전의 A.B 에서 A는 년(ex_ 20의 경우 2020년)을 의미하며 B는 월(ex_ 6의 경우 6월)을 의미함. 즉, 버전에서 Release date를 유추할 수 있음
  • 중복된 내용의 경우 가장 낮은 버전(이전 버전)에서 최초 기입하며 이후 중복 기입하지 않음

 

Upgrade Notes

  • -

 

Backward Incompatible Change

  • access_management 및 named_collection_control을 활성화함
  • RESPECT NULLS/IGNORE NULLS에 대한 윈도우 함수의 다양성을 개선함
  • optimize_move_functions_out_of_any 최적화를 제거함
  • parseDateTime 함수의 기능을 개선함
  • Decimal 타입의 인수를 가진 집계 함수 avgWeighted를 더이상 사용할 수 없고 Float64로 인수를 변환해야 함

 

New Feature

  • 데이터베이스와 테이블의 비동기 로딩을 위한 서버 설정 async_load_databases가 추가됨
  • 시스템 테이블 blob_storage_log가 추가됨
  • prewhere 조건의 순서를 통계를 사용해 더 잘 정렬하도록 함
  • keeper 프로토콜에서 압축 지원을 추가함
  • 새로운 기능인 storage_metadata_write_full_object_key가 도입됨
  • 명명된 컬렉션 필드가 재정의되는 것을 방지하는 새로운 설정과 구문이 추가됨
  • 모든 시스템 로그 테이블에 hostname 컬럼이 추가됨
  • CHECK ALL TABLES 쿼리가 추가됨
  • MySQL의 FROM_DAYS와 유사한 함수인 fromDaysSinceYearZero가 추가됨
  • Clickhouse를 사용하지 않고 백업에서 정보를 추출할 수 있는 외부 Python 도구가 추가됨
  • preferred_optimize_projection_name이라는 새로운 설정이 도입됨
  • 리더십을 양도하거나 사임하기 위한 4글자 명령이 추가됨
  • 새로운 SQL 함수인 arrayRandomSample(arr,k)가 추가되어 입력 배열에서 k개의 요소를 무작위로 샘플링하도록 함
  • Float16 타입 데이터를 .npy 파일에서 사용할 수 있도록 지원이  추가됨
  • 시스템 뷰 information_schema.statistics가 추가되어 Tableau Online과의 호환성이 향상됨
  • system.symbols 테이블이 추가되어 바이너리의 내부를 탐색할 수 있도록 함
  • 차트에 대한 쿼리가 이제 쿼리를 사용하여 로드되며 기본적으로 새로운 system.dashboards 테이블을 사용함
  • fileCluster 테이블 함수가 도입됨
  • s3/file/hdfs/url/azureblobStorage 엔진에 파일 크기를 바이트 단위로 나타내는 _size 가상 컬럼이 추가됨
  • 서버가 마지막 재시작 이후 발생한 각 에러 코드별 오류 수를 프로메테우스 엔드포인트에서 노출하도록 함
  • Clickhouse keeper가 실행 중인 가용 영역을 /keeper/availability-zone 경로에서 보고하도록 함
  • ALTER materialized_view MODIFY QUERY가 비실험적 기능으로 변경됨
  • join_algorithm 설정이 지정된 순서를 존중하도록 변경됨
  • Protobuf 형식에서 잘 알려진 Protobuf 타입을 지원하는 기능이 추가됨

 

Performance Improvement

  • S3와의 상호작용을 위한 적응형 타임아웃이 추가됨
  • max_concurrent_queries의 기본값이 100에서 1000으로 증가됨
  • 윈도우 함수의 병렬 평가가 지원됨
  • system.numbers 테이블의 Numbers 테이블 엔진이 이제 조건을 분석하여 필요한 데이터의 부분 집합을 생성하도록 함
  • Merge 테이블 엔진에서 IN (...) 조건에 의한 필터링 성능이 향상됨
  • 파일 시스템 캐시가 가득 차 있고 큰 읽기 작업이 발생할 때 성능이 개선됨
  • s3에서 체크섬을 비활성화하여 파일을 과도하게 검사하는 것을 방지하도록 함
  • 데이터가 페이지 캐시에 있을 때 원격 테이블에서 동기적으로 읽도록 함
  • map, arrayElement에서 값을 가져오는 최적화로 약 30%의 속도를 향상시킴
  • 쿼리 프로파일러 내에서 활동하는 스레드 수를 제한함
  • 윈도우 함수에서 가상 함수 호출량을 감소함
  • ORC 데이터 포맷에서 재귀적 튜플 필드 프루닝을 허용하여 스캔 속도를 향상시킴
  • data.npy에서 select count()와 같은 쿼리가 결과를 캐싱하도록 함
  • 계획 구성 중에 메모리 사용량을 줄여 집계와 많은 스트림을 가진 쿼리의 성능을 개선함
  • 많은 사용자와 매우 높은 동시 쿼리(>2000 QPS) 사용 사례에서 쿼리 실행 성능을 향상시키기 위해 ProcessList에 대한 접근을 최적화함
  • 일부 중간 결과를 재사용하여 배열 조인의 성능을 개선함
  • stack unwinding이 느렸던 경우를 수정함
  • max_streamds = 1일때 외부 저장소에서 읽을 때 기본 읽기 풀(pool)을 사용함
  • 로그 전처리를 지연시킴으로써 시작 시 Keeper의 메모리 사용량을 개선함
  • 파일 및 hdfs 저장소에 대한 글로브(globe) 매칭의 성능이 개선됨
  • 백업에서 BackupEntriesCollector가 병렬화되어 성능이 향상됨

 

Experimental Feature

  • -

 

Improvement

  • 새로운 MergeTree 설정인 add_imlicit_sign_column_constraint_for_collapsing_engine이 추가됨
  • 저장 구성에 새 디스크를 추가할 때 재시작이 필요 없게 됨
  • 동일한 alter 쿼리에서 인덱스를 생성하고 실체화할 수 있으며 modify TTL와 materialized TTL도 동일한 쿼리에서 지원됨
  • 소스 JSON 문자열의 무작위 변형을 포함하는 행이 있는 새로운 테이블 함수 fuzzJSON이 추가됨
  • Merge 엔진은 기본 테이블의 행 정책에 따라 레코드를 필터링하므로, Merge 테이블에 별도의 행 정책을 생성할 필요가 없도록 함
  • 샤드에서 분산 쿼리의 실행 시간을 제한하기 위한 설정인 max_execution_time_leaf가 추가되었고, 타임아웃이 발생했을 때의 동작을 제어하는 timeout_overflow_mode_leaf 설정이 추가됨
  • HTTP 프록시를 통한 HTTPS 요청에 대한 터널링을 비활성화하는 Clickhouse 설정이 추가됨
  • 생산 환경에서 자주 발생하는 작은 삽입에 더 적합하도록 background_fetches_pool_size를 16으로, background_schedule_pool_size를 512로 설정함
  • CSV 파일을 읽을 때 줄 끝에 \r이 오고 \n이 따르지 않는 경우 발생하는 예외를 처리함
  • 새로운 인코딩을 지원하는 release-13.0.0으로 Arrow 라이브러리를 업데이트함
  • 로컬 IP 주소를 DDL 항목 호스트 목록에서 찾기 위해 모든 네트워크 인터페이스에 대한 무거운 시스템 호출을 제거하여 ON CLUSTER 쿼리의 성능을 개선함
  • 쿼리나 사용자에 스레드를 할당하기 전에 할당된 메모리의 계산을 수정함
  • Apache Arrow 포맷에서 LARGE_LIST 지원을 추가함
  • OPTIMIZE 쿼리를 통해 EmbeddedRocksDB의 수동 압축을 허용함
  • EmbeddedRocksDB 테이블에 대해 BlockBasedTableOptions를 지정할 수 있는 기능이 추가됨
  • SHOW COLUMNS가 이제 MySQL 프로토콜을 통해 연결될 때 MySQL의 해당 데이터 타입 이름을 표시함
  • 서버가 TRUNCATE나 DROP PARTITION 직후 재시작되면 발생할 수 있는 "The local set of parts of table doesn't look like the set of parts in ZooKeeper" 오류를 수정함
  • formatQuery 및 formatQuerySingleLline 함수에서 비상수 쿼리 문자열을 처리하는 방식을 수정함
  • 내부 테이블이 삭제된 materialized view의 백업을 실패 대신 허용하도록 함
  • system.replicas에 대한 쿼리는 특정 열이 쿼리될 때 Zookeeper로 요청을 초기화하도록 하여 최적화를 함
  • 외부 DB에 쿼리할 때 MySQL 호환 쿼리로의 변환이 수정됨
  • KeeperMap 엔진을 사용하는 테이블에 대한 백업 및 복원을 지원함
  • CompleteMultipartUpload에 대한 404 응답이 재확인되도록 수정함
  • 웹 브라우저에서 clickhouse에 요청하기 쉽게 HTTP OPTIONS 메서드가 기본적으로 활성화됨
  • dns_max_consecutive_failures의 값이 실수로 변경되었던 것을 되돌리고 더 나은 값으로 조정함
  • 기본 백업은 필요할 때까지 로드 되지 않도록 함
  • query_cache_store_results_of_queries-with_nondeterministic_functions 설정이 query_cache_nondeterministic_function_handling으로 대체됨
  • Experimental Analyzer만 사용할 경우 JOIN ON 섹션에서 is null 체크와 동등성을 재작성함. 아직 실험적 기능임
  • concat 함수가 이제 임의의 인자 타입을 지원함
  • named_collection 섹션의 구성 또는 SQL로 생성된 명명된 컬렉션에서 캐시 구성을 가져올 수 있는 기능이 추가됨
  • PostgreSQL DB 엔진이 PostgreSQL 연결 실패 시 구식 테이블 제거를 덜 공격적으로 하도록 함
  • URL이 올바르지 않을 때 PG에 연결하는 데 너무 많은 시간이 소요되어 관련 쿼리가 멈추고 취소되는 문제가 수정됨
  • Keeper에서 기본적으로 압축 로그를 비활성화함
  • 시작 시 사전 로딩을 대기하는 구성 설정인 wait_dictionaries_load_at_startup이 추가됨
  • 이전 Clickhouse 버전에서 발견된 잠재적 취약점이 수정됨
  • 원격 복제본에서 part가 완전히 커밋될 때까지 가져오기를 대기하도록 함
  • 실험적 MaterializedPostgreSQL을 사용할 때 발생할 수 있는 PostgreSQL 논리 복제 변환 오류를 수정함
  • 사용자 수준 설정인 alter_move_to_space_execute_async를 통해 ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME 쿼리를 비동기적으로 수행할 수 있게 함
  • system.tables를 스캔할 때 엔진으로 필터링하여 불필요한 연결을 방지함
  • system.tables에서 RocksDB 스토리지의 total_bytes 와 total_rows를 표시함
  • TEMPORARY 테이블에 대한 기본 명령을 ALTER로 허용하도록 함
  • LZ4 압축에서 압축 블록을 버퍼링하는 과정이 개선됨
  • IO 스레드 풀에 대기중인 작업 수를 나타내는 메트릭이 추가됨
  • PostgreSQL 테이블 엔진 설정을 구성 파일에서 직접 지정할 수 있게 하는 설정이 추가됨
  • concat 함수를 단일 일자와 함께 호출할 수 있음
  • fromDaysSinceYearZero (별칭 FROM_DAYS) 함수를 부호 있는 및 부호 없는 정수 타입과 함께 사용할 수 있도록 함
  • 기본 구성에 system.s3queue_log를 추가함
  • wait_dictionaries_load_at_startup의 기본값을 true로 변경함
  • 사전 생성 시, dictionaries_lazy_load가 활성화되어 있더라도 사전 소스 타입을 검사함
  • 계획 수준 최적화를 개별적으로 활성화 또는 비활성화할 수 있도록 함
  • 서버의 종료 코드가 예외 코드와 일치하도록 변경됨
  • max_memory_usage_in_client 명령줄 옵션이 이제 접미사(K, M, G 등)가 있는 문자열 값을 지원함
  • replicated_deduplication_window의 기본값이 100에서 1000으로 증가함
  • 가능한 경우 백업 스캔을 중단하고 처음부터 다시 시작하는 대신 계속해서 스캔을 수행하는 것을 선호하도록 함

 

Build/Testing/Packaging Improvement

  • clickhouse-local 및 clickhouse-client가 사용자 편의를 위해 단축 이름(ch, chl, chc)으로 사용 가능해졌음

 

Bug Fix

  • str_to_map 함수의 버그를 수정함
  • Keeper에 리더십을 양도하거나 인수하기 전에 타임아웃을 추가하여 재설정함
  • 그레이스 해시 조인 및 필터 푸시다운에서 잘못된 헤더를 수정함
  • 테이블 함수 기반 테이블일 때 시스템 테이블로부터 선택하는 기능을 수정함
  • RFC에서 분산 쿼리에 LIMIT BY를 사용할 때 오류를 수정함
  • 백그라운드에서 클라이언트를 실행할 때 오류를 수정함
  • 잘못된 send_logs_level 설정으로 인한 clickhouse-local의 종료를 수정함
  • 매개변수화된 뷰를 사용한 explain ast 실행 시 오류를 수정함
  • 시작할 때 테이블 로딩 중에 발생하는 충돌을 수정함
  • clickhouse 소스 딕셔너리에서 명시적 쿼리 사용 시 발생하는 문제를 수정함
  • keeper의 시그널 핸들러에서 세그먼트 폴드를 수정함
  • view()함수에서 UNION 사용 시 발생하는 불완전한 쿼리 결과를 수정함
  • 메모리 할당 실패와 관련된 드문 경쟁 상태를 수정함
  • 백업에서 flatten_nested와 data_type_default_nullable을 사용하여 복원하는 과정에서 발생하는 문제를 수정함
  • Object(JSON) 타입의 컬럼을 추가할 때 발생하는 충돌을 수정함
  • 필터 푸시다운 작업 중에 발생하는 충돌을 수정함
  • 백업에서 물리적 뷰와 삭제된 소스 테이블을 사용하여 복원하는 과정에서 발생하는 문제를 수정함
  • Kerberos 초기화 도중에 발생하는 세그먼트 폴드를 수정함
  • T64 코덱에서 데이터에 0이 존재하는 경우 발생하는 버퍼 오버플로를 수정함
  • final을 사용할 때 nullable 기본 키와 관련된 문제를 수정함
  • TTL 의존성 때문에 발생하는 시작 실패를 수정함
  • ON CLSUTER에서 ALTER COMMENT 쿼리를 실행할 때 발생하는 문제를 수정함
  • ALIAS를 사용한 ALTER COLUMN 작업 시 발생하는 문제를 수정함
  • NAMED COLLECTIONS가 빈값을 가지는 문제를 수정함
  • 프로젝션 분석과 관련된 문제를 수정함
  • 쿼리 캐시에서 별칭을 처리하는 방식을 수정함
  • Nullable(Enum)에서 Nullable(String)으로 변환하는 과정에서 발생하는 문제를 수정함
  • Keeper에서 로그 처리의 신뢰성을 향상시킴
  • 테이블 함수 input()의 중복 사용 문제를 수정함
  • RabbitMQ의 OpenSSL 동적 로딩 문제를 수정함
  • 데이터에 0이 포함된 경우 GDC 코덱에서 충돌이 발생하는 문제를 수정함
  • clickhouse-local에서 함수로 데이터를 삽입할 때 발생하는 오류가 수정됨
  • Date 타입의 텍스트 파싱 시 낙관적 경로에서 발생하는 문제를 수정함
  • FPC 코덱 사용 중에 발생하는 충돌을 수정함
  • DatabaseRepliacted 환경에서 복제를 복구한 후 발생할 수 있는 DDL 쿼리 타임아웃 문제를 수정함
  • MySQL 바이너리 프로토콜을 사용할 때 nullable 컬럼 보고에 있어서 발생하는 오류를 수정함
  • SET 쿼리 실행과 SETTINGS의 형식을 수정함
  • JoinGet을 사용할 때 테이블 의존성으로 인한 시작 실패 문제를 수정함
  • ADD COLUMN 작업 시 기존 Nested 컬럼을 flattening하는 과정에서 발생하는 문제를 수정함
  • CSV 파일 파싱 시 줄바꿈 문자 처리를 허용하는 문제를 수정함
  • tryBase64Decode 함수에서 잘못된 입력을 처리할 때 발생하는 문제를 수정함
  • 프로젝션 컬럼에 대해 호환되지 않는 ALTER 작업을 방지하는 기능을 추가함
  • SQlite DB 파일의 경로 검증 로직을 수정함
  • S3Queue에서 메타데이터 참조를 증가시키는 로직을 수정함
  • ARRAY JOIN을 사용할 때 fuzzBits 기능의 오류를 수정함
  • 부분적인 merge join을 수행할 때 발생할 수 있는 Nullptr 참조 오류를 수정함
  • RemoteSource를 사용할 때 발생할 수 있는 경쟁 상태를 수정함
  • 큰 정수에 대해 bitHammingDsitance 함수를 구현함
  • S3 스타일의 링크를 사용할 때 발생하는 문제를 수정함
  • JSON_QUERY 함수에서 다중 숫자 경로를 처리할 때 발생하는 문제를 수정함
  • Gorilla 코덱을 사용할 때 발생할 수 있는 버퍼 오버플로를 수정함
  • ALTER UPDATE르 실행한 후 Nullable MATERIALIZED 컬럼에서 발생할 수 있는 세그폴트를 수정함
  • 컬럼 설명을 비교할 때 주석을 무시하는 처리를 수정함
  • 백그라운드 머지 작업이 캐시 내 임시 데이터 저장소를 올바르게 사용하도록 수정함
  • MergeTree 변형을 수행할 때 소스 파트의 인덱스 세분성을 재사용하는 처리를 수정함
  • 파일 시스템 캐시에서 백그라운드 다운로드를 수행할 때 적용되는 제한을 추가함

 

참고

728x90
반응형