본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 20.12 Release note 요약

by 연습장이 2024. 1. 7.
728x90
반응형

목적

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

 

읽기 전에

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

 

Backward Incompatible Change

  • Ver. 20.12.3.3
    • use_compact_format_in_distributed_parts_names 파라미터가 기본적으로 사용함으로 설정됨
    • File engine을 사용하여 테이블을 생성할 때, SETTINGS 항목에서 file 형식과 관련된(format_csv_delimiter 등) 사용자 설정이 가능하게 됨. 이 설정은 모든 INSERT와 SELECT에 사용됨

 

New Feature

  • Ver. 20.12.3.3
    • ALTER TABLE ... DROP|DETACH PART 'part_name' 구문이 추가됨
    • ALTER UPDATE/DELETE IN PARTITION 구문이 추가됨
    • 중첩된 유형이 String일 경우 Nullable, LowCardinality, Array, Tuple에 대한 COLLATE가 지원됨. 또한 ColumnString.cpp의 데이터 정렬과 연관된 코드의 refactor가 추가됨
    • 현재 리스닝 중인 tcpPort 정보를 반환하는 tcpPort() 함수가 추가됨
    • acosh, asinh, atan2, atanh, cosh, hypot, log1p, sinh의 수학 관련 함수가 추가됨
    • 다른 replica 간에 merges를 배포할 수 있는 execute_merges_on_single_replica_time_threshold 파라미터가 추가됨
    • SQL 표준 호환성을 위해 aggregate_functions_null_for_empty 파라미터가 추가됨. 이 기능은 모든 집계함수에 -OrNull을 추가하여 재작성함
    • clickhouse-client에서 --history_file 파라미터를 통하여 history file의 경로를 바꿀 수 있게 됨

 

Bug Fix

  • Ver. 20.12.3.3
    • pool_size 가 1 초과일 때, 경합 상태로 인하여 ON CLUSTER 쿼리에서 클러스터가 순환(혹은 교차) 복제되었는지 여부가 잘못 결정되는 버그가 수정됨
    • LIMIT이 있는 분산 쿼리에 대해 기록된 "Unexpected packet Data received from client" 에러가 발생할 수 있는 버그가 수정됨

 

Improvement

  • Ver. 20.12.3.3
    • TTL, mutation, collapsing merge 알고리즘에 의해 가지치기(삭제)된 후에 비어버린 parts는 제거됨
    • 분산 테이블에서 비동기 전송에 대한 디렉토리의 compact format이 사용 가능하게 됨. 이 것은 use_compact_format_in_distributed_parts_names를 1로 설정하면 되며 기본적으로 1로 설정되어 있음
    • system.distribution_queue 시스템 테이블에서 data_path 내 패스워드를 마스킹함
    • 컬럼 변환기를 통해 존재하지 않는 컬럼을 바꿀 경우 에러를 반환함
    • 동시에 작업을 할 때 모든 쓰레드에 대해 메모리가 충분하지 않다면 병렬 파싱을 하지 않음. 또한 파싱할 각 부분은 독립적인 문자열이어야 하므로(?) min_chunk_bytes_for_parallel_parsing을 초과하는 매우 큰 레코드 건수를 삽입하려고 하면 "Memory limit exceede" 에러가 반환될 수 있음. 
    • Distributed engine을 시작할 때 비동기 INSERT에 대한 비어있는 폴더가 제거됨
    • 서버 시작 없이 <auxiliary_zookeepers> 설정이 config.xml 파일에서 변경될 수 있고 reload하면 됨

 

Performance Improvement

Ver. 20.12.3.3

  • 부분 정렬 사용 시 Floyd-Rivest 알고리즘을 사용함
  • ReplicatedMergeTree engines family의 경우 replicated fetch에 대해 별도의 thread pool을 사용함. pool의 크기는 background_fetches_pool_size에 의해 제한되며 서버 재시작을 해야 값이 변경됨. 기본값은 3이며 최대 병렬 fetch 량이 3임을 의미함
  • 정확한 match를 통해 파티션 프루닝이 안전하게 이루어짐. 예를 들어 intHash64(x) % 100로 파티션되어 있다면, 쿼리 또한 그대로 intHash64(x) % 100로 가짐(옵티마이저에 의해 실행계획상에서 얘기하는건지?)

 

Experimental Feature

  • -

 

Build/Testing/Packaging Improvement

  • -

 

Contents that needs to be tested

  • -

 

참고

728x90
반응형