본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 20.8 Release note 요약

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

목적

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

 

읽기 전에

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

 

Backward Incompatible Change

Ver. 20.8.2.3

  • OPTIMIZE FINAL 쿼리문은 더이상 TTL이 생성되기 전 추가된 parts에 대해서는 다시 계산하지 않음. ALTER TABLE ...MATERIALIZE TTL로 한번 계산한 후 OPTIMIZE FINAL이 TTL을 정상적으로 계산함. 하지만 이 기능은 replicated 테이블에는 작동하지 않음
  • parallel_distributed_insert_select 파라미터 설정이 확장되어 기존 bolean 타입에서 UInt64으로 바뀜. 따라서 true, false는 더이상 사용되지 않으며 만약 파라미터값이 잘못 기입되어 있다면 서버가 시작되지 않음. 이 경우 0 혹은 1로 설정해야 함
  • ODBC 드라이버에 대한 input/output 형식을 제거해야 함. 한때 clickhouse odbc drive와의 호환을 위해 사용되었으나 이제는 ODBC Driver2 형식으로 사용됨
  • 20.5 버전을 기준으로 클러스터 내 해당 MU의 이전, 이후가 모두 포함되어 있을 경우 에러가 발생할 수 있음. 이 경우 이전 버전의 패키지를 모두 최신으로 변경한 후 서버를 시작해야 함(해당 내용의 경우 이전 release note와 동일)

 

New Feature

Ver. 20.8.2.3

  • config.xml에 명시된 설정에 해당하는 열에 대해 기본 압축 코덱을 지정하는 기능이 추가됨
  • krb5와 cyrus-sasl libraries를 사용하여 카프카 내에서 Keroberos 인증이 지원됨
  • time_zone 시스템 테이블이 추가됨
  • 주어진 유형의 기본 값을 반환하는 defaultValueOfTypeName 함수가 추가됨
  • date/time 값을 구체적으로 data/time 부분으로 자르는 date_trunc 함수가 추가됨
  • 메인 설정 파일(config.xml로 판단됨)에 user_directories 섹션이 옵션으로 추가됨
  • 테이블의 sample 항목을 변경할 수 있도록 ALTER SAMPLE BY 문이 추가됨

 

Bug Fix

Ver. 20.8.2.3

  • 단일 part만 있는 파티션으로 구성된 테이블의 경우 merge가 잘못될 수 있는 문제가 수정됨
  • PipelineExecutor 자체에서 에러가 발생할 경우 쿼리 실행이 취소되도록 변경됨. 이 것은 드물게 쿼리 hang이 발생할 수 있는 문제를 방지함
  • AS table_function으로 만들어진 테이블에 대해 ALTER 쿼리문이 수행되는 동안 발생하는 충돌이 수정됨
  • non-global level(on cluster 기능을 안쓰는 것을 의미하는지?)에서 GRANT ALL 문이 수행될 때 발생하는 버그가 수정됨
  • optimize_duplicate_order_by_and_distinct 파라미터가 활성화된 상태에서 서브쿼리에 UNION ALL이 사용되고 바깥 조회 쿼리에서 DISTINCT가 사용되었을 때 잘못된 결과를 반환하는 문제가 수정됨
  • httop protocol에서 TSV/CSVWithNames 형식의 헤더가 과도하거나 사라지는 버그가 수정됨

Ver. 20.8.3.18

  • ALTER ... MODIFY 쿼리 수행 시 matrialized view의 metadata에서 default database named 사라지는 버그가 수정됨
  • 널 허용 컬럼에서 대입 표현식 및 상수 값(예를 들어 UPDATE x = 42)으로 ALTER UPDATE mutation 쿼리 수행 시 잘못된 값이 반환되는 버그가 수정됨
  • 컬럼 결과의 잘못된 십진수 소수점으로 인해 발생하는 잘못된 십진수 곱셈 결과가 출력되는 버그가 수정됨

Ver. 20.8.4.11

  • IN 연산자 또는 VALUES, LIMIT의 결과로 JSON* 함수를 사용할 때 "Element ... is not a constant expression" 에러가 발생하는 버그가 수정됨
  • "Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call" 에러가 발생하지 않도록 수정됨
  • MOVE 또는 REPLACE PARTITION 또는, 드물게 DETACH 또는 DROP PARTITION 명령 후 존재하지 않는 part에 대해 mutation이 행이 걸려 대기하는 버그가 수정됨
  • 같은 패턴으로 LIKE 명령이 수행될 때 ILIKE 연산자가 대소문자 구분을 안하는 기능이 멈추는 버그가 수정됨
  • ON CLUSTER 쿼리에서 드물게 행이 걸릴 수 있는 DDLWorker의 이벤트 구독이 발생하는 버그가 수정됨
  • MergeTree 테이블에서 RENAME과 background cleanup 시 경쟁 상태가 수정됨
  • system.logs가 사용가능할 때 서버 시작 시 드물게 발생하는 경쟁 상태가 수정됨
  • ALTER 쿼리 후 Buffer table engine에서 새로운 구조를 Buffer에 삽입할 수 없는 버그가 수정됨
  • 특별히 가공된 인자(정확한 기준은 명시되지 않음)로 bar 함수를 사용할 경우 buffer overflow 가 발생할 수 있는 버그가 수정됨
  • number_of_free_entries_in_pool_to_execute_mutation 파라미터와 number_of_free_entries_in_pool_to_lower_max_size_of_merge 파라미터가 backgound_pool_size 파라미터 설정값과 동일해지는 버그가 수정됨
  • MaterializeMySQL database engine 사용 시 ".metadata.tmp File Exists" 에러가 발생하는 버그가 수정됨
  • 널 허용 컬럼의 잘못된 정렬 순서 버그가 수정됨

Ver. 20.8.5.45

  • TwoLevelStringHashable 구현의 에러로 인해 발생되는 string 타입의 키로 GROUP BY 수행시 발생되는 메모리 누수 가능성이 수정됨
  • 제한에 관계 없이 메모리가 초과 할당될 수 있는 버그가 수정됨
  • 일정 기간 동안 사용하지 않은 후 replication 에러가 발생했을 때 5~10분 동안 replica 행이 걸리는 버그가 수정됨
  • Atomic database engine 내에서 MaterializedView에서 조회하거나 삽입할 때, 혹은 동시에 해당 테이블(뷰)를 DROP할 때 드물게 발생하는 부분 결함이 수정됨
  • CREATE USER ... SETTINGS profile readonly 사용 시 readonly 제약 조건을 사용하는 profile이 설정되는게 아니라, readonly라는 profile이 설정되도록 profile 설정의 애매모호함이 수정됨
  • DATABASE 생성이 실패될 때 충돌이 발생되는 버그가 수정됨
  • Distributed 테이블을 통하여 WHERE, PREWHERE, GLOBAL IN 사용 시 잘못된 비어있는 결과로 반한되는 버그가 수정됨
  • ALTER MODIFY COLUMN 쿼리 수행 후 SELECT ... ORDER BY DESC 쿼리 수행 시 "Block structure mismatch" 에러가 발생되는 버그가 수정됨
  • 가상 컬럼만 조회되었을 때 "Not found column _nothing in block" 에러가 발생되는 버그가 수정됨
  • ARRAY JOIN이 사용된 MATERIALIZED VIEW에 데이터 삽입시 "Cannot find column" 에러가 발생되는 버그가 수정됨
  • max_replicated_logs_to_keep 파라미터의 기본 설정값이 너무 작게 설정되어 replica들이 종종 lost되는(replication이 끊긴다는 뜻인지 데이터가 사라진다는 건지) 버그가 수정됨
  • read-only 테이블을 detach할 때, ReadonlyReplica 관련 metric 지표가 감소되는 버그가 수정됨

Ver. 20.8.10.13

  • 2^32보다 큰 nuemric 타입의 logger.size 파라미터를 사용하여 server log rotation이 설정되었을 경우 정상적으로 rotate가 되지 않은 버그가 수정됨
  • min_compress_block_size를 이용한 MergeTreeWriterSettings 내에서 max_compress_block_size의 초기화가 잘못되는 버그가 수정됨
  • Clickhouse가 MySQL server에 연결을 재개하지 못하는(항상인지 종종인지?) 버그가 수정됨
  • 다른 replica에서 해당 mutation이 종료되었을 때 ALTER 쿼리가 hang 걸리는 버그가 수정됨
  • mark된 작은 크기의 많은 파일들이 있을 때 clickhouse가 mark cache size를 과소평가하는 버그가 수정됨
  • leader가 아닌 ReplicatedMergeTreeTables 내에서 ON CLUSTER 쿼리 수행 시 영원히 hang이 걸릴 수 있는 버그가 수정됨
  • column 변경 중이고 아직 alter 명령문이 끝나지 않은 상태에서 SELECT 쿼리가 WHERE 표현식을 가지고 수행 중일 때, ALTER TABLE ... MODIFY COLUMN ... NewType 수행 후 서버가 충돌할 수 있는 버그가 수정됨
  • ORDER BY를 사용하는 쿼리 수행 시 잘못된 argument의 타입으로 에러가 가끔 발생하는 버그가 수정됨
  • any에 인자를 넣지 않고 사용할 경우 충돌이 발생하는 버그가 수정됨
  • max_threads 가 0을 넘고 ORDER BY 표현식에서 optimize_read_in_order와 optimize_aggregation_in_orde이 일과적으로 동작하지 않는 버그가 수정됨
  • 쿼리에 ARRAY JOIN이 포함될 경우 쿼리 최적화가 잘못되는 버그가 수정됨

Ver. 20.8.11.17

  • 널 허용 타입의 인자로 toType(...) 함수를 사용하였을 때 "too short error"가 발생되는 버그가 수정됨. 현재는 에러를 반환하지 않고 NULL을 반환함

 

Improvement

Ver. 20.8.2.3

  • 테이블을 생성할 때 정말 낮은 min_index_granularity_bytes 값이 우연히 설정되지 않도록 min_index_granularity_bytes 파라미터 설정이 추가됨
  • 다른 주키퍼를 사용하여 클러스터 내에서 파티션을 fetch하는 것이 가능해짐. ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'zk-name:/path-in-zokkeper'로 동작하며 이 기능은 새로운 클러스터에 데이터를 넘길 때 유용함
  • 많은 수의 아주 작은 block으로 구성된 Memory 테이블의 성능이 약간 개선됨
  • TabSeparated 형식의 널 값에 대해 에러 메시지가 개선됨
  • MergeTree Wirte-Ahead-Log (WAL) 덤프 툴이 추가됨. 해당 기능은 실험수준임
  • system database를 생성할 때 기본적으로 Atomic engine으로 생성됨

Ver. 20.8.3.18

  • 진행중인 S3 요청이 있을 경우 서버 shutdown 프로세스 속도가 향상됨(해당 프로세스를 킬하는게 빨라졌다는 것 같음)
  • 분산된 storage에서 multi-volume storage 설정이 가능하게 변경됨

Ver. 20.8.4.11

  • ALTER 쿼리를 통해 VersionedCollapsingMergeTree에 대한 version 컬럼의 타입을 바꿀 수 있음

Ver. 20.8.5.45

  • ALTER ... ON CLUSTER 명령어를 클러스터 내 <internal_replication> 설정에 관계 없이 수행될 수 있도록 변경됨

 

Performance Improvement

Ver. 20.8.2.3

  • max_insert_threads 파라미터가 설정된 경우 Null, Memory, Distributed, Buffer table engine은 병렬 삽입이 가능함
  • parts 스캔 시 max_rows_to_read limit을 초과한 경우 빠르게 실패함. 이는 max_rows_to_read를 이미 초과한 경우 선택된 모든 parts의 범위 스캔을 스킵하기 위함. 이 기능은 parts 수가 많을 때 더 유리함
  • 간단한 insert ~ select 쿼리를 수행할 때 자동으로 max_threads 파라미터를 1로 설정하거나, max_insert_threads로 설정하고 max_block_size 파라미터를 min_insertblock_size_rows로 설정함

 

Experimental Feature

Ver. 20.8.2.3

  • Clickhouse는 MaterializeMySQL database engine을 통해 MySQL replica로 동작할 수 있음
  • Int128, Int256, UInt256 타입 및 그와 관련된 함수가 추가됨. Decimal 관련해서는 Decimal256으로 타입이 확장되었으나 성능 및 관리적인 측면에서 아직 사용 불가

 

Build/Testing/Packaging Improvement

Ver. 20.8.2.3

  • clickhouse install script가 추가됨. Single binary만 있는 경우에 유용함
  • 더 많은 버그를 찾기 위해 stress test 과정 중 system.text_log가 사용 가능함

 

Contents that needs to be tested

  • -

 

참고

728x90
반응형