본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 23.3 Release note 요약

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

목적

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

 

읽기 전에

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

 

Upgrade Notes

  • 가벼운 delete 연산이 운영 환경에서 사용할 준비가 됨. MergeTree 테이블은 기본적으로 delete 연산이 사용 가능함
  • domain*RFC 및 netloc 함수의 행동이 약간 변경됨. URL 권한에서 허용되는 기호 집합을 완화하여 적합성을 개선함
  • 컬럼에 대해 default/ephemeral/alias/materialized 문을 사용하여 KafkaEngine 테이블 생성이 금지됨
  • "asynchronous connection drain" 기능이 제거됨. 내부적인 기능이라 처음 들어본 사람은 영향도가 없다고 생각하면 됨
  • 256-bit Decimal data type(38자리 이상)이 arraySum/Min/Max/Avg/Product, IN 연산자, 쿼리 매개변수 등에서 지원됨
  • 사용자 설정 대신 서버 설정에 backup_threads/retore_threads를 생성함
  • 상수 및 non-deterministic 보조 인덱스를 허용하지 않음

 

Backward Incompatible Change

  • -

 

New Feature

  • parallel_replicas_custom_key 및 parallel_replicas_custom_key_filter_tpye 파라미터를 통해 복제본에 대한 작업을 분할할 수 있음(병렬처리). 만약 클러스터가 여러 개의 복제본이 있는 단일 샤드로 구성된 경우(1-shard n-replica) 최대 max_parallel_replicas 파라미터 설정값으로 무작위 선택되어 샤드로 전환됨. 클러스터가 여러 개의 샤드로 구성된 경우 sample_key와 동일하게 동작하지만 임의 키를 정의할 수도 있음
  • 취소 시 부분 결과를 표시하는 옵션이 추가됨. 예를 들어 Ctrl+C로 실행중인 쿼리를 취소할 경우 부분 결과를 반환할 수 있도록 partial_result_on_first_cancel 파라미터로 제어가능함
  • 임시 테이블에 대한 임의 테이블 엔진이 추가됨(Replicated, KeeperMap 엔진 제외)
  • Keeper의 중앙 집중식 저장소를 통해 사용자 정의 SQL 함수 복제에 대한 지원이 추가됨
  • 서버 구성을 포함하는 system.server_settings(system.settings와 유사) 테이블이 구현됨
  • UNDROP TABLE 쿼리 구문이 추가됨
  • named_collections에 부분 권한 추가가 될 수 있도록 허용됨
  • 중첩된 사용자 지정 디스크가 허용됨. 이전에는 평면 디스크 구조만 지원했음
  • http 인터페이스에 대한 url 파라미터의 wait_end_of_query 및 buffer_size에 대응되는 http_wait_end_of_query, http_response_buffer_size 파라미터가 추가됨. 해당 설정은 profile에서 선언할 수 있음
  • system.dropped_tables 테이블이 추가됨. 이 테이블은 Atomic 데이터베이스에서 제거되었지만 아직 완전히 제거된 건 아닌 테이블 목록을 보여줌
  • 고정 정밀도로 숫자를 문자열로 변환할 수 있는 toDecimalString 함수가 추가됨
  • MergeTree 설정 관련하여 max_number_of_mutations_for_replica 파라미터가 추가됨. 이 설정은 복제본 당 part mutation 수를 제한함. 하지만 다른 설정에 의해 실행이 제한될 수 있음
  • native protocol에 대한 SSL User Certificate authentication이 추가됨

 

Bug Fix

  • ReplicatedMergeTree 테이블 및 Atomic 데이터베이스에 DROP가 진행되는 동안 주키퍼 세션이 만료되고 같은 경로에 동시에 주키퍼가 생성된다면 "Can't get daa for node/zk_path/log_pointer" 및 "The specified key does not exist" 에러가 발생하는 버그가 수정됨
  • 클라이언트가 죽었을 때 쿼리 취소가 개선됨
  • like 패턴에 따옴표로 묶을 수 없는 문자가 포함된 경우 일부 like 검색의 잘못된 결과가 반환되는 버그가 수정됨
  • limit이 포함된 grace hash join 시 경쟁 상태에 빠지는 버그가 수정됨
  • 같은 JOIN 테이블에 대한 insert select 구문이 금지됨. 이는 데드락으로 이어질 수 있기 때문

 

Improvement

  • input_format_json_ignore_unknown_keys_in_named_tuple 파라미터가 기본적으로 활성화됨
  • query_plan_optimize_projection=1로 하여 쿼리 계획 위에 projection 분석을 재구현할 수 있음
  • 이름에 마침표(.)가 포함된 카프카 토픽을 구성할 수 있음
  • 다른 복제본에 의해 블록이 동시 생성된 경우 syste.errors 테이블에 ZK 노드 존재를 보고하지 않음
  • 백업 진행 상황을 추적하기 위해, 처리된 모든 작업 후에 syste.backups 테이블을 업데이트 함
  • IP 범위를 발생시키기 위해 range 함수 내 IPv4가 허용됨
  • 하나의 파트를 볼륨/디스크에서 다른 곳으로 옮길 수 없을 때 예외 메시지가 개선됨
  • JSONType 함수에 Bool 타입이 지원됨
  • Spark 함수와의 호환을 위해 repeat함수가 이제 음수(-1 같은)도 같은 타입을 맞게 반환함
  • replication queue가 비워질 때까지 쿼리를 대기하게 하는 SYSTEM SYNC REPLICA에 대한 STRICT 수정자가 추가됨

 

Performance Improvement

  • 메모리 내 마크가 3-6x 기법을 통해 압축되어 더 적은 메모리를 사용하게 됨
  • 백업에 대한 IO 연산에서 별개의 스레드 풀이 도입되어 이제 많은 수의 파일에 대한 백업 속도가 개선됨
  • FINAL로 쿼리 시 과도한 읽기가 수정됨
  • max_final_threads 파라미터 값이 서버 시작 시 코어 수로 설정됨(max_threads와 동일한 알고리즘으로). 이렇게 될 경우 CPU 수가 많은 서버에서 최종 실행의 동시성이 향상됨
  • 널 허용 단일 키에 대한 집계 성능이 최적화됨
  • 매우 큰 system.detached_parts 테이블의 쿼리가 최적화됨
  • ReplicatedMergeTree 테이블에 대한 max_replicated_merges_in_queue의 기본값이 16에서 1000으로 증가됨
  • 컬럼에 대해 다른 DEFAULT 표현식을 사용한 병합에 PREWHERE 허용됨

 

Experimental Feature

  • -

 

Build/Testing/Packaging Improvement

  • 클릭하우스는 이제 c++23으로 빌드함

 

참고

728x90
반응형