본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 20.10 Release note 요약

by 연습장이 2023. 12. 22.
728x90
반응형

목적

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

 

읽기 전에

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

 

Backward Incompatible Change

Ver. 20.10.3.30

  • mulitple_joins_rewriter_version이 더이상 사용되지 않음. joins rewriter의 첫번째 버전이 제거됨
  • format_regexp_escaping_rule(Regexp 형식과 관련됨)의 기본 설정값이 Raw로 변경됨. 이는 모든 하위 패턴을 값으로 읽는 다는 것을 의미. 이에 따라 더욱 사용자가 기대하는 동작으로 수행됨
  • SQL 내에 중첩된 여러줄의 주석처리가 가능해짐. 예를 들어 /* comment /* comment */ */으로 가능함. 이것은 SQL 표준을 따름
  • MergeTree 관련하여 max_replicated_merges_with_ttl_in_queue와 max_number_of_merges_with_ttl_in_pool 파라미터가 추가됨. 이는 background pool 및 replicated queue 내에서 TTL 관련 머지의 수를 제어함. 이에 따라 사용자가 기존에 delete TTL을 사용하였을 경우 호환성이 맞지 않을 수 있음. 이 경우 동시에 모든 shard replicas를 갱신하거나 순차적으로 하되, SYSTEM STOP TTL MERGES 명령어가 적용된 상태에서 진행해야 함.

 

New Feature

Ver. 20.10.3.30

  • 백그라운드 데이터 재압축 기능으로 MergeTree 테이블 엔진군에 대하여 TTTL ... RECOMPRESS codec_name을 명시하는 기능이 추가됨
  • 병렬 quorum 삽입이 추가됨
  • 복제 블록이 로컬에 존재하지 않는 replica에 기록될 때(replicas에서 가져오지 않은 경우) 이것을 무시하지 않고 로컬에서 기록하여 복제가 성공적으로 된 것과 같은 효과를 가지게 됨
  • WITH <identifier> AS (subquery) 기능이 쿼리 구문에서 수행되도록 추가됨
  • enable_global_with_statement 설정이 추가되어 첫 번째 select 문의 WITH 문을 동일한 수준의 다른 select 쿼리에 전파하고 WITH 문의 별칭을 하위 쿼리에 표시할 수 있도록 함(트랜잭션보다 더 넓은 의미로 재활용이 가능하다는 의미인지?)
  • 컬럼 삭제 및 table의 ttl 삭제 기능이 추가됨. 구문은 ALTER TABLE MODIFY COLUMN col_name REMOVE ... and ALTER TABLE REMOVE TTL이며 가벼운 작업이고, metadata level에서 수행됨
  • RawBLOB 형식이 추가됨. 이는 escaping이나 구분자 없이 단일 값을 입력하거나 추가할 때 사용되도록 하기 위함
  • formatReadableQuantity 함수가 추가됨. 이는 사용자에게 큰 수를 읽기에 도움이 됨
  • 모든 줄을 단일 문자열 필드로 전체적으로 구문 분석하여, 줄 바꿈으로 구분된 일련의 줄을 허용하는 LineAsString 형식이 추가됨
  • 문자열 배열로 데이터를 출력하는 JSONStrings 형식이 추가됨
  • SHOW DATABASES LIKE 'xxx' 구문이 추가됨
  • insert 문의 경우 select 절에서 * 혹은 변수와 함께 컬럼 변환기(함수에 의한 가공을 의미하는지?)를 같이 가질 수 있음
  • 쿼리 복잡성 제한을 위하여 분산 쿼리에 대한 max_rows_to_read_leaf, max_bytes_to_read_leaf 파라미터가 추가됨. 이는 리프 노드에서 읽기에 대한 최대 rows/bytes를 제한함. 루트 노드의 최종 병합 단계를 제외하고 로컬 읽기에서만 제한이 적용됨
  • config 파일 내 <replicated_merge_tree> 섹션 내에서 ReplicatedMergeTree* 스토리지에 대한 설정을 사용자가 명시할 수 있음. 이는 <merge_tree> 섹션과 유사하나 둘다 적용할 수 있고 이 때, <replicated_merge_tree> 섹션이 더 우선순위가 높음
  • system.replicated_merge_tree_settings 시스템 테이블이 추가됨
  • system.text_log, system.trace_log, system.query_log, system.query_thread_log, system.asynchronous_metric_log, system.metric.log 시스템 테이블에 event_time_microseconds 열이 추가됨

 

Bug Fix

Ver. 20.10.3.30

  • Atomic database에서 Materilized view을 구성하는 테이블의 재귀적인 DROP TABLE 구문 때문에 worker thread에 행이 걸려 이후의 DROP TABLE에 모든 행이 걸리는 버그가 수정됨
  • select 쿼리에서 컬럼 변환기가 여러개 존재할 경우 발생(구체적인 영향도는 언급되지 않음)하는 버그가 수정됨
  • 쿼리에 Merge 테이블에 대한 JOIN이 있을 경우 group by에서 "Unknown identifier" 에러가 발생되는 버그가 수정됨
  • currntDatabase() 함수가 ON CLUSTER ddl query에서 사용될수 없었던 버그가 수정됨

Ver. 20.10.4.1

  • transform_null_in 파라미터가 활성화된 상태에서 몇몇 컬럼과 튜플에 대하여 IN 연산자에 대한 버그가 수정됨

Ver. 20.10.7.4

  • 서버가 데몬 모드로 구동중일 때 system.stack_trace 시스템 테이블이 비어지는 버그가 수정됨
  • double에서 캐스팅(형변환)할 때 big integers(182, 256 bit)에 대한 잘못된 결과가 반환되는 버그가 수정됨

 

Improvement

Ver. 20.10.3.30

  • 새로운 database를 생성할 때 Atomic database 엔진을 기본적으로 사용할 수 있음
  • 서브타입이 있는 컬럼에 대하여 Delta, T64 등의 특별한 코덱을 명시할 수 있는 기능이 추가됨
  • zookeeper 설정의 동적 reload가 가능해짐
  • Atomic database에 대하여 NO DELAY 혹은 SYNC가 명시되었다면 DROP/DETACH TABLE이 끝날 때까지 대기하게 됨
  • now() 함수에 timezone 관련 인자를 추가할 수 있음
  • EXPLIAN PLAN 쿼리에 최적화 설정이 추가됨. 사용가능으로 변경할 경우 쿼리 플랜 수준 최적화가 진행됨. 기본적으로 사용 가능임
  • EXPLIAN 결과에서 SET과 JOIN에 대한 서브쿼리를 볼 수 있음
  • Distributed storage에서 multi-volumn storage 사용이 가능하게 됨
  • 머징 과정을 상세히 모니터링할 수 있도록 merge_algorithm 컬럼이 system.merges 시스템 테이블에 추가됨
  • 분산 DDL에 대한 병렬 실행이 가능하게 됨
  • QueryMemoryLimitExceeded event counter가 추가됨(어디에 어떻게 추가되었는지?)
  • SYSTEM RELOAD CONFIG가 실패할 경우 에러를 던지고 백그라운드에서 이전의 users.xml을 계속 사용하게 됨

 

Performance Improvement

Ver. 20.10.3.30

  • small parts에 대하여 기본적으로 compact parts 사용이 가능하게 됨. 이를 통해 빈번한 삽입을 처리 시 약간 더 효율적이게 됨
  • vertical merge temporary data를 저장하기 위해 명시적으로 임시적인 디스크 공간을 사용함
  • FixedString 타입의 GROUP BY 키의 성능이 향상됨

 

Experimental Feature

  • -

 

Build/Testing/Packaging Improvement

  • 운영 단계의 clickhouse 빌드 시 clang-11을 사용함

 

Contents that needs to be tested

  • formatReadableQuantity 함수가 추가됨. 이는 사용자에게 큰 수를 읽기에 도움이 됨

localhost :) select max(UserID), formatReadableQuantity(max(UserID)) from datapipe_line.june04;
 
SELECT
    max(UserID),
    formatReadableQuantity(max(UserID))
FROM datapipe_line.june04
 
Query id: 827748af-6e5c-412d-8a25-dcd825168467
 
┌─max(UserID)─┬─formatReadableQuantity(max(UserID))─┐
│  1000010000 │ 1.00 billion                            │
└─────────────┴──────────────┘
 
1 rows in set. Elapsed: 4.561 sec. Processed 1.99 billion rows, 15.96 GB (437.43 million rows/s., 3.50 GB/s.)

 

 

참고

728x90
반응형