본문 바로가기
CDBMS/Clickhouse

[Clickhouse] Ver. 21.7 Release note 요약

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

목적

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

 

읽기 전에

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

 

Backward Incompatible Change

  • Ver. 21.7
    • -

 

New Feature

  • Ver. 21.7
    • XML을 대신하여 YAML 형식의 설정이 추가됨
    • 데이터는 존재하지만 주키퍼 metadata는 잃어버린 경우 복제 테이블을 복원할 수 있는 방법이 지원됨
    • dictionaries에 ARRAY 타입이 지원됨
    • 'Friday' 또는 'April' 같은 이름을 반환하기 위해 dateName 함수가 추가됨
    • JSON 표현식으로 컬럼을 직렬화하기 위해 toJSONString 함수가 추가됨
    • system.query_log 시스템 테이블에 initial_query_start_time, initial_query_start_time_microsecnd 열이 추가됨. 해당 열은 분산 쿼리의 시작 시간을 기록함
    • segmentLengthSum 함수가 추가됨
    • 기본적으로 모든 IN/JOIN을 GLOBAL IN/JOIN으로 하는 prefer_global_in_and_join 파라미터(boolean 값)가 추가됨
    • join 테이블 엔진에 ALTER DELETE 쿼리가 추가됨
    • merge tree 설정인 max_parts_to_merge_at_once가 추가됨. 이 기능은 백그라운드에서 한번에 머지될 수 있는 parts의 수를 제어함. 하지만 OPTIMIZE FINAL 쿼리에는 영향을 끼치지 않음
    • 파티션 pruning에 NOT IN이 동작함
    • 127.0.1.1 같은 IPv4 주소를 로컬로 인식함
    • MySQL storage 엔진에 대해 아래 파라미터가 추가됨
      • connection_auto_close
      • connection_max_tries
      • connection_pool_size
    • 분산 엔진의 시작 시간이 개선됨
    • LowCardinality에 대한 Interval type이 지원됨. 이 기능은 일부 표현식의 중간값이 필요함
    • http_max_fields, http_max_field_name_size, http_max_field_value_size 파라미터가 추가됨
    • if 함수에 Decimal, Int 타입이 분기에 사용될 수 있음
    • 분산 쿼리에 대해 optimize_skip_unused_shards=1일 경우 (샤딩 키) IN (one-element_tuple)과 같은 조건에서 샤드를 건너뛸 수 있음. 튜플에 많은 요소가 있는 것도 가능하며 단일 요소일 경우 문자로 파싱되어 스킵이 동작되지 않음
    • insert_distributed_sync 파라미터에 대한 max_distributed_connections를 고려함. 그렇지 않을 경우 대규모 클러스터 및 sync insert 시 max_thread_pool_size가 부족할 수 있음
    • PostgreSQL은 삽입 쿼리에 대한 non default schema 명시를 지원함
    • multiline 모드에서 서브쿼리를 사용한 FROM의 후행 공백을 수정하고 쿼리 결과를 좀 더 사용자 친화적으로 변경함
    • 메모리 제한, 손상으로 인한 실패 시 분산 배치를 분할하는 기능이 추가되어 분산 테이블에 대한 개선이 이루어짐. distributed_directory_monitor_split_barch_on_failure 파라미터로 제어되며 기본적으로 비활성화임
    • 타겟 테이블에 옮기기 전에 소스 테이블의 파티션을 드랍하는 기능인 all_to_drop_target_partitions 파라미터가 추가됨
    • OPTIMIZE DEDUPLICATE 쿼리가 삭제됨
    • 분산 테이블에 INSERT 쿼리 수행 시 insert_allow_materialized_columns(materialized 컬럼을 허용하는 기능) 파라미터를 고려함
    • 다른 테이블에 대한 KILL MUTATION을 구분함(예기치 않은 "Cancelled mutating parts" 에러가 수정됨)
    • 분산 테이블에 대한 하위 컬럼(예를 들어 튜플의 요소)의 읽기가 활성화됨

 

Bug Fix

  • Ver. 21.7
    • 서버가 낮은 메모리를 할당 받은 상태에서 재시작 없이 매우 드물게 병합을 수행할 수 없는 버그가 수정됨
    • ALTER MOVE/REPLACE partition 쿼리를 동시에 수행 시 replication queue 내 "Tangging already tragged part" 에러가 매우 드물게 발생하는 버그가 수정됨
    • 다른 집계함수의 집계함수에 대한 상태를 인자로 하여 집계함수에 대한 상태를 계산(좋은 사례는 아님)할 때 잠재적인 충돌이 발생할 수 있는 버그가 수정됨
    • RAM이 매우 낮게 할당된 상태에서 SYSTEM RESTART REPLICA 혹은 SYSTEM SYNC REPLICA 쿼리가 끝나지 않는 버그가 수정됨
    • 주키퍼 클라이언트가 주키퍼 서버 내에서 행이 걸릴 수 있는 버그가 수정됨
    • 쿼리 플랜의 expression-push-down 최적화에서 WHERE 조건이 사라지는 버그가 수정됨(해당 기능은 query_plan_filter_push_down 파라미터에 의해 제어되며 1이 기본값임)
    • 주키퍼 연결이 끊겼을 경우 ReplicatedMergeTree 테이블은 재연결을 시도하기 전에 백그라운드 작업이 완료될 때까지 기다릴 수 있는 버그가 수정됨. 이제 강제로 백그라운드 작업이 종료됨
    • WITH TOTALS 및 WITH FILL 쿼리에 대한 잘못된 합계가 수정됨
    • 데이터베이스 간 분산 테이블을 이동시킬 때 "No such file or directory" 에러가 발생하는 버그가 수정됨
    • 소스 파티션이 비어있는 경우 REPLACE PARTITION 쿼리가 드물게 무시되는 버그가 수정됨
    • Replicated 데이터베이스 엔진에서 일부 replica가 enqueued DDL 쿼리를 건너뛰는 버그가 수정됨
    • 비어있는 parts의 자동 삭제 시 대기가 수정됨. 계속 대기할 경우 백그라운드 pool이 꽉찰 수 있으며 replication이 중단될 수 있음
    • clickhouse-copier 내 task config에서 샤딩 키가 없을 경우 segfault가 발생하는 버그가 수정됨
    • CSVWithNames 형식을 사용하여 컬럼의 하위 집합(튜플이나 배열을 의미하는 듯)을 삽입할 때 에러가 발생하는 버그가 수정됨
    • 최대 21.5로 dbms update 후 파티션 키에 UUID를 사용한 경우 part가 사라질 수 있는 버그가 수정됨(파티션 키에 UUID를 사용하는 것은 비권장 사항임)
    • joined_subquery_requires_alias=0이고 크로스 조인 사용 시 충돌이 발생하는 버그가 수정됨
    • a UInt32 ALIAS a + 1 또는 b UInt32 MATERIALIZED b ㅊ처럼 재귀참조를 이용하여 컬럼을 생성한 테이블을 만들 수 없음
    • 분산 Materialized View와 조인 시 "Missing columns" 예외가 발생하는 버그가 수정됨
    • mutation이 메모리에 적재되지 않았을 때 mutation 대기 시 클라이언트에게 "Mutation was killed" 예외가 발생되는 버그가 수정됨
    • 같은 consumer가 이전에 비어 있는 assignment를 가지고 있었을 경우 Engine = Kafka가 consumption을 시작할 때 failover에 버그가 발생하는 문제가 수정됨

 

Improvement

  • Ver. 21.7
    • replication에 대한 네트워크 대역폭 제한 기능이 추가됨
      • 아래 파라미터는 Replicated*MergeTree 테이블 엔진 설정으로 제어되며 해당 테이블에 대한 replcated fetches/sends의 최대 속도를 제한함
        • max_replicated_fetches_network_bandwidth
        • max_replicated_sends_network_bandwidth
      • 아래 파라미터는 서버 단위 설정으로 default user profile에서 설정 가능함. 하지만 정확하지 않아 기본적으로 비활성화 상태임
        • max_replicated_fetches_entwork_bandwidth_for_server
        • max_replicated_sends_network_bandwidth_for_server
    • ODBC 및 라이브러리 브릿지에 대한 자원 제약과 격리가 추가됨. 별도의 clickhouse-bridge 그룹과 브릿지 프로세스에 대한 유저를 사용할 수 있음
    • 메인 clickhouse 바이너리에 독립형 clickhouse-keepeer 심볼릭 링크가 추가됨. 이제 메인 클릭하우스 서버 없이 조정(coordination)을 실행할 수 있음
    • VIEW에 대한 쿼리 시 global 설정을 사용함. local 설정을 통해 쿼리를 수행할 경우 CREATE VIEW의 설정과 SELECT가 서로 다르면 에러가 발생함
    • 서버 시작 시, 잘못된 partition ID는 제거되지 않고 항상 detach 됨
    • background_schedule_pool_size 설정을 통해 백그라운드 스케줄 풀을 128로 증가 시킴. 이 것은 느린 주키퍼 연결에 대해 replication queue 행이 걸리는 것을 피하도록 하기 위함

 

Performance Improvement

  • Ver. 21.7
    • 읽기 데이터량을 줄이기 위해 일부 기능을 하위 컬럼의 읽기로 변환하는 최적화가 추가됨. 예를 들어 col IS NULL은 col.null의 읽기로 변환됨. 이 기능은 optimize_functions_to_subcolumns 파라미터를 통해 제어되며 현재는 비활성화가 기본값임
    • 가능한 한 alias 표현식으로 더 많은 컬럼을 재작성함. 이 것은 projection과 같은 더 나은 최적화가 가능해질 수 있음(바로 위 기능도 그렇고, 별칭 붙이는게 실행계획 수립 시 최적화에 도움이 되는 듯함)

 

Experimental Feature

  • Ver. 21.7
    • hdfs를 통한 가상 파일시스템이 지원됨
    • clickhouse-keeper(주키퍼를 대체하는 실험적 기능)이 주키퍼 같은 digest ACLs를 지원함

 

Build/Testing/Packaging Improvement

  • Ver. 21.7
    • -

 

참고



728x90
반응형