본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 20.11 Release note 요약

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

목적

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

 

읽기 전에

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

 

Backward Incompatible Change

Ver. 20.11.2.1

  • 이전 버전에서는 어떤 profile의 경우 분산 DDL 설정 섹션에 명시되면 이 것이 서버 시작시 기본 profile 설정에 덮어쓰어지게 됨. 이 버전에서 이 부분이 수정되어 분산 DDL 쿼리의 설정이 더이상 전역 서버 설정에 영향을 끼치지 않음
  • 정렬키, 기본키, 파티션 키 등에서 AggregateFunction 등과 같은 비교 불가한 데이터 유형의 사용이 제한됨
  • EXPLAIN 쿼리의 일부로 되어, ANALYZE와 AST 쿼리가 제거되고 setting enable_debug_queries를 더이상 사용하지 않음
  • 이전 버전에서는 Aggregate function 함수로 boundingRatio, rankCorr, retention, timeSeriesGroupSum, timeSeriesGroupratesum, windowFunnel의 대소문자 구분이 안되었으나 이 버전에서 구분이 됨. SQL 표준이거나 다른 DBMS와의 호환을 위해 만들어진 함수는 구분안함
  • rankcorr 함수가 불충분한 데이터에 대하여 NaN 값을 반환함

 

New Feature

Ver. 20.11.2.1

  • 현재 실행중인 background fetches을 모니터링할 수 있는 system.replicated_fetches 시스템 테이블이 추가됨
  • data_time_output_format 설정이 추가됨
  • CREATE TABLE 쿼리의 컬럼 목록에서 pk 명시가 가능하게 됨. 이는 다른 SQL 문법과의 호환성을 위함임
  • LIMIT을 지정하는 SQL 표준 방법으로 OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}를 수행할 수 있음
  • 명명된 tuple을 확장함으로써 select 절에 새로운 컬럼을 추가할 수 있는 특수한 함수의 untuple 가 추가됨
  • 쿼리 파라미터를 통해 식별자를 제공할 수 있게 됨. 이러한 파라미터는 table object나 column으로서 사용될 수 있음(뭔가 굉장히 중요해보이는데 무슨 기능인지?)
  • UUID 데이터 타입이 MergeTree BloomFilter index를 지원함
  • log_queries_min_query_duration_ms 파라미터가 추가되었고 이 값보다 늦은 쿼리는 query_log, query_thread_log 시스템 테이블로 가게됨(mysql의 slow_query_log와 같음)
  • max_concurrent_queries_for_all_users 파라미터가 추가됨
  • clickhouse-client에 print_query_id 옵션이 추가됨. 기본적으로는 query id를 보여줌
  • multi-disk 설정에서 volume에 대한 disable_merges 옵션이 추가됨

 

Bug Fix

Ver. 20.11.2.1

  • 쿼리된 테이블에 아무런 샘플이 없을 경우 max_parallel_replicas 설정이 잘못되는 버그가 수정됨
  • query_thread_log.query_duration_ms 컬럼의 단위가 수정됨
  • OPTIMIZE 명령어를 수행시 clickhouse-local에서 에러를 내뱉는 버그가 수정됨

Ver. 20.11.2.1

  • 파티션 조건이 있는 optimize_trivial_count_query의 비일관된 행동이 수정됨
  • 최적화된 trivial count query 및 system.tables에 대해 select_sequential_consistency에 의해 비일관적으로 동작되는 버그가 수정됨

Ver. 20.11.7.16

  • BloomFilter index가 충돌하는 버그가 수정됨
  • LowCardinality 인자에 대해 neighbor 함수의 잘못된 결과값이 반환되는 버그가 수정됨
  • DROP/DETACH TABLE table_name ON CLUSTER cluster_name SYNC 명령어가 종종 행이 걸리는 버그가 수정됨
  • ReplicatedMergeTree 테이블을 처리하는 동안 동시에 ALTER와 DROP 쿼리를 수행할 경우 행이 걸리는 버그가 수정됨
  • LowCardinality(Nullable(...)) 함수로부터 압축된 코덱을 읽을 수 없을 경우 클릭하우스 서버를 시작할 수 없는 버그가 수정됨
  • Template이나 CustomSeparated 형식을 사용하여 http interface에서 데이터를 삽입할 경우 "There is no checkpoint" 에러가 발생되는 버그가 수정됨
  • 이전 문법으로 생성된 MergeTree table에 대해 MODIFY TTL 쿼리가 제한됨. 이전 버전에서는 성공했으나 실제로 적용되지 않았음
  • 최적화가 항상 올바르지 않기 때문에 optimize_move_functions_out_of_nay 파라미터가 사용안함으로 변경됨
  • clickhouse-local에서 shutdown 시 행이 걸릴 수 있는 버그가 수정됨
  • network_compression_method 파라미터가 default값이 아닌 다른 값으로 global 설정된 경우 서버가 비동기식 분산 insert를 거부하는 버그가 수정됨
  • Nullable(STring)에서 Nullable(Decimal(P, S))로 NULL 형변환을 시도할 때 "Attempt to read aofter eof" 에러가 발생되는 버그가 수정됨. 현재는 NULL값이 반환됨
  • MODIFY COLUMN ... REMOVE TTL 쿼리가 실제로 column TTL을 제거하지 못하는 버그가 수정됨

 

Improvement

Ver. 20.11.2.1

  • INTERVAL '1 hour'을 INTERVAL 1 HOUR과 동일하게 여기도록 함. 이는 Postgres 등과 호환되게 하기 위함
  • CSV, TSV, JSON input formats를 통해 enum value를 파싱할 수 있도록 함
  • JBOD architecture와 MergeTree storage에 대한 읽기 작업 스케쥴링이 향상됨. 읽기 쓰레드 수의 하한선을 조절할 수 있는 read_backoff_min_concurrency 파라미터가 추가됨
  • 가능한한 빠르게 SETTINGS 항목이 적용됨. 이를 통하여 쿼리에서 더욱 설정할 수 있게 됨
  • event_time_microseconds 열이 UInt64가 아닌 Decimal64에 저장됨
  • Atomic database에서 삭제된 테이블에 대해 데이터를 지우는 백그라운드 작업의 스케쥴링이 개선됨. Atomic database는 테이블이 실제로 데이터 디렉토리가 없을 경우 테이블 데이터 디렉토리에 대한 깨진 symlink를 생성하지 않음
  • WITH 절 내에 서브쿼리(CTE)는 그들의 이름을 통해 WITH 절 내의 이전 서브쿼리를 참조할 수 있음
  • system.query_thread_log 시스템 테이블에 current_database 열이 추가됨
  • 현재 인스턴스에서 이미 커밋되었거나 오래된 parts를 detached 디렉토리로 fetch할 수 있음. 이 것은 N:1 샤드 매핑 혹은 다른 클러스터에 테이블 마이그레이션 시에 유용함
  • TablesToDropQueueSize 메트릭 지표가 추가됨. 이는 백그라운드 데이터 제거를 기다리는 드랍된 테이블의 수와 동일함
  • MergeTree table engines family에 대해 ORDER BY 없이 PRIMARY KEY를 명시할 수 있게됨
  • 시스템에 임시파일용 폴더가 없을 경우 clickhouse-local은 현재 폴더에 임시파일용 하위폴더를 생성함(이 현재 폴더가 clickhouse-server인지 clickhouse인지?)
  • DROP DATABASE 시 database_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNC 옵션이 추가됨
  • 샤딩 키로 rand() 혹은 dictGet()과 같은 비결정적 함수에 대해 allow_nondeterministic_optimize_skip_unused_shards 파라미터가 추가됨
  • connections_with_failover_max_tries 를 0으로 잘못 설정하여 쿼리가 무한히 행이 걸리는 버그가 수정됨
  • 일부 로그 메시지의 수준을 information에서 debug로 변경하여 모든 쿼리에서 보이지 않도록 함

 

Performance Improvement

Ver. 20.11.2.1

  • SELECT FINAL 절에서 파티션을 교차하여 merge parts 하지 않도록 함
  • -OrNull, -OrDefault 집계 함수의 성능이 개선됨
  • MergeTree table engines에 할당된 merge의 성능이 개선됨

 

Experimental Feature

Ver. 20.11.2.1

  • encrypt, aes_encrypt_mysql, decrypt, aes_decrypt_mysql 함수가 추가됨. 하지만 속도가 느려 아직 실험단계임

 

Build/Testing/Packaging Improvement

  • -

 

Contents that needs to be tested

  • -

 

참고

728x90
반응형