본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 21.9 Release note 요약

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

목적

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

 

읽기 전에

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

 

Backward Incompatible Change

  • Ver. 21.9
    • Decimal 타입의 텍스트 표현에 0 후행 출력을 하지 않음. 예를 들어 scale이 6일 경우 1.230000 대신 1.23가 표시됨
    • clickhouse-local은 포트와 같이 있는 local 주소는 원격으로 인지함
    • 표현식 이름과 동일한 컬럼 별칭을 사용한 일부 정교한 쿼리에서는 잘못된 형변환이 발생하는 버그가 수정됨
    • 만약 스칼라 서브쿼리가 Nullable 타입이 될 수 있으면 항상 Nullable 타입을 반환함. 이 것은 비어 있는 서브쿼리인 경우 Null을 리턴해야 하는 경우에 필요함. 이전에는 에러가 발생하였음. 하지만 Array나 Tuple은 여전히 에러를 발생함
    • SELECT $doc$ VALUE $doc$ 처럼 쿼리를 사용하여 doc 내용을 가져올 수 있음. 하지만 $같은 식별자가 있으면 이전 버전과 호환되지 않을 수 있음
    • isNull, isNotNull을 포함하여 indices가 Nullable 타입을 다룰 수 있음

 

New Feature

  • Ver. 21.9
    • INTERSECT, EXCEPT, ANY, ALL 연산자가 추가됨
    • AES-CTR 알고리즘을 사용하여 가상 파일 시스템 수준(저장 데이터 암호화)의 암호화가 지원됨
    • SQLite 테이블 엔진, 테이블 함수, 데이터베이스 엔진이 추가됨
    • 주키퍼를 통하여 user, roles, row policies, quotas, profile 설정 등의 공유된 스토리지(복제도 포함하여)가 추가됨
    • 자동으로 압축 알고리즘을 선택하는 INTO OUTFILE에 대한 압축이 추가됨
    • SELECT ... INTO OUTFILE과 유사한 INSERT ... FROM INFILE이 추가됨
    • 클라이언트가 서버에 연결될 때 서버에 의해 이미 수집된 모든 경고에 대한 정보를 받음. 이 것은 --no-warings 옵션으로 비활성화 가능함. 서버 설정에 대한 경고를 수집하는 system.warnings 시스템 테이블이 추가됨
    • with와 select in 집계 함수 인자에 상수 표현식을 사용할 수 있음
    • system.users 시스템 테이블에 default_database 컬럼이 추가됨
    • 테이블 함수인 cluster 와 clusterAllReplicas 내에 cluster 매크로가 지원됨
    • currentRoles(), enabledRoles(), defaultRoles() 함수가 추가됨
    • EXPLAIN ESTIMATE ... 가 추가됨. 이 것은 MergeTree tables에 대한 read rows, marks, parts의 정보를 보여줌
    • 주키퍼 클라이언트의 모든 행동을 기록하는 system.zookeeper_log 시스템 테이블이 추가됨
    • users에 대한 default databtase 설정이 추가됨

 

Bug Fix

  • Ver. 21.9
    • max_memory_usage* 파라미터가 0이 아닌 값으로 설정되었다가 다시 0(unlimited)로 설정될 수 없는 버그가 수정됨
    • 행 수준 보안, PREWHERE, LowCardinality 필터의 쿼리에 대한 잘못된 결과가 수정됨
    • 예전 문법으로 MergeTree 테이블을 생성한 partition id의 잘못된 유효성 검증이 수정됨
    • sampling을 이용한 쿼리시 "Cannot find column" 에러가 반환되는 버그가 수정됨
    • 복제되지 않은 MergeTree 내 유효하지 않은 파티션에 대한 mutation 정지가 수정됨
    • system.detached_parts에 드물게 일부 part에 대한 잘못된 정보가 포함되는 버그가 수정됨
    • 일부 다중 J조인 시 "Unknown column name" 에러가 반환되는 버그가 수정됨
    • 다른 DEFAULT 표현이 없는 non materialized 열을 DEFAULT 열이 참조할 때 "Missing columns: 'xxx'" 에러가 반환되는 버그가 수정됨
    • system.part_log 시스템 테이블 내 REMOVE_PART에 대한 event_time_microseconds 값이 추가됨
    • ditctionary 이름이나 데이터베이스 이름이 인용되었을 경우 CREATE DICTIONARY 쿼리에 대한 이슈가 수정됨

 

Improvement

  • Ver. 21.9
    • 인덱스 분석에 대한 중복이 제거되고 projection 분석하는 동안 limit checks가 잘못될 수 있는 가능성을 회피함
    • HTTP 요청의 본문(body)에 쿼리 파라미터가 전달되도록 변경됨
    • 인증이 실패한 경우 클라이언트 IP 주소를 기록함
    • HTTP 포트가 설정되지 않았고 유저가 HTTP 요청을 tcp 포트에 전송 시도를 할 때 에러와 함께 response가 전송됨
    • system.query_log 시스템 테이블에 log_formatted_queries 열이 추가됨
    • multiMatchAny와 같은 hyperscan과 관련된 함수를 사용할 때 거대한 regexp를 방지하기 위한 max_hyperscan_regexp_length, max_hyperscan_regexp_total_length 파라미터가 추가됨
    • 비트맵 집계 함수에 의해 소모되는 메모리가 메모리 제한을 고려하게 됨
    • PostgreSQL 데이터베이스 엔진에 대한 스키마가 지원됨
    • 쿼리가 수행을 시작하는 것이 실패할 때에도 system.query_log 시스템 테이블의 query_kind에 기록을 시도함
    • system.replicas 테이블에 replica 이름에 매핑되는 replica 활성 상태를 나타내는 replica_is_active 열이 추가됨
    • 주키퍼에 현재 노드를 push하는 ddl entry id의 최대값을 나타내는 새로운 지표인 MaxPushedDDLEntryID가 추가됨
    • system.rocksdb 시스템 테이블을 통해 RocksDB 통계가 보여짐
    • default roles를 변경하면 오직 새로운 세션에만 영향을 끼침
    • KILL QUERY 요청에 대한 처리가 개선됨
    • 연결이 실패했을 경우(예를 들어 EMFILE에서) clickhouse-benchmark가 행이 걸리는 것을 회피함
    • 카프카 엔진에서 더 많은 스레드를 사용할 수 있음
    • clickhouse-benchmark에 대한 round-robin이 지원됨
    • mysql, postgresql 호환 프로토콜 처리기에 대한 클라이언트 쿼리 종류를 설정할 수 있음
    • 사용자 허용 목록에 존재하지 않는 호스트의 동작이 개선됨
    • CREATE TABLE dis (key Int) Engine=Disributed(cluster, db, table) SETTINGS monitor_batch_inserts=1처럼 선언하여 Distributed 폴더 모니터 설정이 가능해짐
    • 서로 다른 클러스터 간의 샤드의 연결을 재사용할 수 있음. 이 것은 클러스터 테이블 함수를 사용할 때 새로운 연결이 생성되는 것을 회피함
    • Log, TinyLog 테이블에 대한 컬럼 크기 정보가 system.columns 시스템 테이블에 추가됨
    • 사용자 정의 디스크 설정이 있고 일부 디스크에 detached 폴더가 없을 경우 system.detached_parts 시스템 테이블을 쿼리하면 에러를 반환하지 않음
    • In 연산자에 스칼라 함수가 전달될 때 GLOBAL 키워드가 제거됨. 이전 버전에서는 에러를 반환했음
    • merge_selecting_sleep_ms 파라미터가 추가됨
    • system.query_log에 쿼리에 의해 실행된 (materialized 또는 live) 뷰에 대한 이름이 기록되는 views 컬럼이 추가됨. system.query_views_log 시스템 테이블이 추가됨. 뷰가 실행되는 동안 에러가 발생하면 이미 시작된 뷰는 끝날 때까지 계속 동작함. 이 기능은 parallel_view_processing=true로 제어되며 항상 같은 결과를 반환함

 

Performance Improvement

  • Ver. 21.9
    • max_execution_time=0으로 설정하면 clock_gettime 시스템 call 수를 줄여 빠른 쿼리의 성능이 개선됨
    • 같은 파일의 동시 읽기에 대한 file descriptor를 공유함. 이를 통해 리눅스에서는 직접적인 성능 개선은 체감이 안될 수 있으나, 열린 파일의 수가 상당히(10~100배) 감소함
    • 많은 컬럼을 가진 테이블을 읽을 때 짧은 쿼리의 대기 시간이 개선됨
    • 비어있는 DEFAULT 컬럼을 읽을 때 더 나은 블록 크기 예측으로 메모리 사용이 개선됨
    • ORDER BY pk가 포함된 쿼리의 read rows의 수와 메모리 사용이 감소됨
    • distributed_push_down_limit 파라미터가 기본적으로 활성화됨

 

Experimental Feature

  • Ver. 21.9
    • 압축 대신 열을 암호화하는 AES_128_GCM_SIV 압축 코덱이 추가됨
    • MaterializeMySQL이 MaterializedMySQL로 개명됨

 

Build/Testing/Packaging Improvement

  • Ver. 21.9
    • -

 

참고

728x90
반응형