본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 23.1 Release note 요약

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

목적

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

 

읽기 전에

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

 

Upgrade Notes

  • SYSTEM RESTART DISK 쿼리가 더이상 동작하지 않음
  • HASHED/SPARSE_HASHED 딕셔너리에 대한 PREALLOCATE 옵션이 더이상 동작하지 않음
  • non-Float32 또는 non-Float64 타입의 컬럼에 대하여 Gorilla 코덱 사용이 더이상 지원되지 않음
  • 만료된 구문으로 생성된 *MergeTree 테이블에 대하여 병렬 quorum 삽입이 부정확하게 동작할 수 있음. 따라서 쓰지말거나 신규 구문으로 생성할 것

 

Backward Incompatible Change

  • -

 

New Feature

  • 두 날자 또는 시간 값이 전체 단위 수로 표시된, 날짜 간의 차이를 계산하는 age 함수가 추가됨
  • 명명된 튜플을 파싱하는 동안 JSON 객체 내 누락된 요소에 대한 기본값을 삽입함. 이 기능은 input_format_json_defaults_for_missing_elements_in_named_tuple 파라미터로 제어됨
  • Kafka/RabbitMQ/NATS 엔진에 대해 하나의 메시지 내 행의 수를 max_block_size 파라미터로 제어할 수 있음. 세부적으로는 kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message 로 제어할 수 있음
  • system.text_log 테이블에 message_format_string 컬럼이 추가됨

 

Bug Fix

  • "Invalid number of rows in Chunk" 예외 메시지가 발생하는 버그가 수정됨
  • JOIN ON t1.x = t2.x AND 1 = 1의 잘못된 행동이 일어나는 버그가 수정됨. 이 것은 금지됨
  • 만약 클러스터명이 명시되지 않으면 일부 SYSTEM .. ON CLUSTER 쿼리가 예상치 못한 방식으로 작동하는 버그가 수정됨
  • system.parts나 system.parts_colujmns 테이블을 쿼리할 때 디스크 간 이동되는 파트의 존재가 있다면 해당 쿼리가 경쟁 상태에 놓이는 드문 버그가 수정됨
  • UNION을 사용한 쿼리에서 "Different order of columns in UNION" 에러가 발생되는 버그가 수정됨
  • 딕셔너리에 잘못된 구조(예를 들어 XML 설정에 올바르지 못한 타입 등)가 있을 경우 SELECT ... FROM system.dictionaries 쿼리 시 예외가 발생되는 버그가 수정됨

 

Improvement

  • JSONExtract함수를 사용하여 JSON 내 문자열 타입으로 저장된 floats를 integers로 내부 변환할 수 있음. 예를 들어 JSONExtract('{"a": "1000.111"}', 'a', 'UInt64') -> 1000임. 예전에는 0으로 반환되었음
  • system.formats 테이블에 supports_parallel_parsing, supports_parallel_formatting 컬럼이 추가됨
  • CustomSeparated/TEmplate format에서 CSV 필드의 읽기가 개선됨
  • ORDER BY 절 뿐만 아니라 모든 중복 정렬 단계(서브 쿼리 등)에서 중복 정렬 연산이 제거됨. 이는 쿼리 계획 윗 단계에서 구현됨
  • system.parts 테이블로 cleanup thread에 의해 체크된 가장 최근의 파트의 정보가 추가됨
  • 삽입에 대한 읽기전용 모드에서 테이블 함수 사용이 불가능함
  • CleanupThread의 한번 수행(반복)으로 처리되는 파트의 수를 simultaneous_parts_removal_limit 파라미터로 제어할 수 있음
  • 사용자가 index_granularity에 0값(잘못된)을 실수로 명시하지 않도록 예방함
  • Arrow/Parquet/ORC 내 bool 타입을 지원함
  • system logs에 대한 설정 파라미터인 <storage_policy>를 추가함

 

Performance Improvement

  • MergeTree 테이블의 시작 시 비활성화된 파트를 적재하지 않음
  • 쿼리 파싱 속도가 증가함
  • LowCardinality 컬럼일 경우 expr = x1 OR ... or expr = xN 구문을 expr IN (x1, ..., xN) 구문으로 변형함. 이 경우 optimize_min_equality_dsjunction_chain_length 파라미터는 무시됨
  • threadpool을 최적화함. 이로 인해 ThreadPoolImpl::mutex에 대한 락 경합은 75% 정도 감소하였고 CPU 사용률의 전체적인 속도는 2.4% 개선됨
  • 원격 파일시스템에 대한 비동기 읽기의 성능이 약간 증가함
  • system.replicas 테이블은 복제본 상태를 병렬로 가져옴

 

Experimental Feature

  • 쿼리 결과 캐시가 추가됨
  • Replicated database의 비활성화된 복제본의 메타데이터를 제거하는 SYSTEM DROP DATABASE REPLICA 구문이 추가됨

 

Build/Testing/Packaging Improvement

  • -

 

참고

728x90
반응형