CDBMS/Clickhouse

[Clickhouse] Ver. 21.1 Release note 요약

연습장이 2024. 1. 8. 18:27
728x90
반응형

목적

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

 

읽기 전에

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

 

Backward Incompatible Change

Ver. 21.1.2.15

  • input_format_null_as_default 파라미터가 기본적으로 사용함으로 설정됨
  • 설정에서 profile setting의 설정 제약을 체크함. 만약 users.xml 파일에서 이러한 설정의 해당 제약 조건을 만족하지 못하면 서버가 시작되지 않음
  • data parts에 영향을 주는(write_final_mark, enable_mixed_granularity_parts) storage 설정 변경에서 ALTER MODIFY SETTING 명령이 제한됨
  • INSERT_QUORUM_PARALLEL이 기본적으로 1(사용함)으로 설정됨. 이 것은 순차 quorum insert에 보다 편리하지만, 순차적인 일관성이 보다 중요할 경우 다시 0값으로 바꿔야함
  • sumburConsistentHash 함수가 제거됨
  • timeSeriesGroupSum, timeSeriesGroupRateSum 함수가 제거됨
  • avg 함수 및 avgWeighted 함수에서 Int128, Int256, UInt256의 integer 타입이 사용 가능하게 됨. avgWeighted 함수의 경우 이전에는 Decimal 타입으로 반환되었으나 Float64 타입으로 반환되도록 변경됨
  • ToUUID(N)이 명확한 값을 반환하지 않아 더이상 지원되지 않고 toUUID('00000000-0000-0000-0000-000000000000')로 변경됨.
  • 이전 버전에서는 동작되었으나 이제 잘못된 key usage의 SSL Certificates는 거절됨
  • config.xml 파일 내 <remote_servers>, <zookeeper>, <macros>, <compression>, <networks> 에서 incl 참조가 삭제됨

 

New Feature

Ver. 21.1.2.15

  • 다중 주키퍼 클러스터를 사용할 수 있음
  • REPLACE TABLE, CREATE OR REPLACE TABLE 쿼리를 사용할 수 있음
  • UNION DISTINCT를 사용할 수 있으며 UNION은 기본적으로 UNION DISTINCT를 의미함. union_default_mode를 통해 UNION 명령어를 UNION ALL로 동작하게끔 변경할 수 있음
  • countMatches, countMatchesCaseInsensitive 함수가 추가됨
  • 부분 문자열 발생을 카운트하는 countSubStrings(), countSubStringsCaseInsensitive(), countSubStringsCaseInsensitiveUTF8 함수가 추가됨
  • system.query_log에 사용된 database, table, column에 대한 정보가 추가되고, query_kind와 normalized_query_hash 열이 추가됨
  • optimize_on_insert 파라미터가 추가됨. 사용함으로 바꿀 경우 이 블록에서 병합이 수행된 것처럼(Replacing, Collapsing, Aggregating 등) INSERT된 데이터 블록에 대해 동일하게 변환이 수행됨(?). 기본값은 사용함이며 이 설정은 Materialized View, MaterilizeMySQL에 영향을 줄 수 있음
  • HDFS에 대한 케로베로스 인증이 추가됨
  • system.settings 내 파라미터 정보를 볼 수 있는 SHOW SETTINGS가 추가됨. 또한 SHOW CHANGED SETTINGS와 LIKE/ILIKE도 추가됨
  • poistion 함수의 경우 SQL 호환성을 위해 position(needle In haystack)이 추가됨
  • MergeTree tables family에 대해 max_partitions_to_read 파라미터가 추가됨. 이는 단일 쿼리에서 접근할 수 있는 파티션의 최대수를 제한함. 사용자 설정에서는 이러한 기능으로 force_max_partition_limit 설정이 추가됨
  • 삽입된 parts에 대해 system.part_log에 query_id 열이 추가됨
  • CREATE TABLE AS SELECT 구문에 열 정의를 명시할 수 있게 됨. 예를 들어 CREATE TABLE t1 (x String) ENGINE = Memory AS SELECT 1;
  • arrayMin, arrayMax, arrayAvg 집계 함수가 추가됨
  • 주어진 경로에 주어진 구조로 ATTACH TABLE table_name FROM 'path/to/data/' (col1 Type1, ...) 구문이 추가됨
  • EXISTS DATABASE database_name 구문이 추가됨
  • 내장 함수인 isIPv4String과 isIPv6String이 추가됨
  • 다중 샤딩된 분산 테이블에 분산 키 없이 삽입할 수 있도록 insert_distributed_one_random_shard 가 추가됨. 1로 설정하면 적용됨
  • MergeTree 관련 설정으로 min_compress_block_size와 max_compress_block_size가 추가됨. 이 것은 전역설정보다 높은 우선순위를 가지고 있음
  • 명시적으로 선언한 경우 서버 재시작 후 자동으로 table이 다시 나타나지 않도록 DETACH TABLE/VIEW ... PERMANENTLY 구문이 추가됨. 이 테이블은 ATTACH TABLE 구문으로 다시 attach가 가능함
  • MergeTree table에 대한 rows, bytes, parts의 총량을 나타내는 비동기 metric 지표가 추가됨
  • clickhouse-client와 clickhouse-local에 대해 queries-file 파라미터가 추가됨
  • clickhouse-benchmark에 query 파라미터가 추가됨

 

Bug Fix

Ver. 21.1.2.15

  • ALTER TABLE ... DROP PART 'part_name' 구문 실행시 모든 파티션에 대한 모든 중복제거 블록이 삭제되는 버그가 수정됨
  • 쿼리에 x IN table 표현식이 있을 경우 외부 데이터베이스(MySQL, ODBC, JDBC)에 대한 쿼리가 잘못 재작성(실행계획상 말하는 것인지?)되는 버그가 수정됨
  • 권한 제어를 위해 SELECT count() FROM table_name이 수행되기 위해선 적어도 해당 테이블에서 하나 이상의 컬럼에 대한 권한을 가지고 있어야 함
  • 권한 제어를 위해 SELECT JOIN이 수행되기 위해선 조인되는 양쪽 테이블 각각에 조회 권한이 있어야 함
  • WITH FILL과 WITH TIES가 모두 사용된 쿼리에 대한 비일관성 버그가 수정됨
  • *Mergetree 테이블의 백그라운드 작업에 CPU가 높게 사용되는 버그가 수정됨

Ver. 21.1.3.32

  • union distinct 서브쿼리에 대한 조건절 푸시다운 시(옵티마이저의 실행계획 수립 상에서 얘기하는 듯) 충돌하는 버그가 수정됨
  • 중첩된 열 이름이 WHERE 혹은 PREWHERE에서 사용될 때 충돌이 발생하는 버그가 수정됨

 

Improvement

Ver. 21.1.2.15

  • TinyLog 혹은 Log 테이블 엔진에 대해 자체적으로(재귀를 말하는지?) INSERT SELECT 구문 실행시 데드락에 빠지지 않게 됨
  • MySQL처럼 SHOW CREATE VIEW view_name 구문이 추가됨
  • max_memory_usage = 1, max_untracked_memory = 1 등처럼 서버가 매우 낮은 메모리 제한을 가질 경우 비정상적으로 종료되지 않게 됨
  • 분산 테이블에 대한 비동기식 삽입에 대해 2개의 신규 기능(MergeTree family와 유사)이 추가됨
    • fsync_after_insert : 삽입 연산시 매번 fsync가 이루어짐. 삽입 성능 하락됨
    • fsyn_directories : write, renames 등 모든 연산 시 비동기 삽입에 대해서만 임시 폴더의 fsync가 이루어짐
  • FETCH PARTITION 수행 시 주키퍼 path에 대한 macros를 확장할 수 있음
  • ALTER TABLE <replicated_table> ON CLUSTER MODIFY SETTING ... 구문을 통해 모든 replica에 적용할 수 있음
  • 열 변환기인 EXCEPT 함수가 STRING 타입에 정규표현식이 적용되도록 변경됨
  • 기본키 혹은 파티션 키에 대해 컬럼 타입을 LowCardinality(Type)에서 Type으로 혹은 그 반대로도 변경될 수 있도록 됨
  • 배열 집계 함수인 arrayMin, arrayMax, arraySum, arrayAvg가 Int128, Int256, UInt256 데이터 타입을 지원함
  • 접근 제어를 위해 merge() 함수 사용시 현재 사용자는 이를 통해 참조하는 테이블들에 대해 SELECT 권한이 있어야 됨
  • 임시 테이블은 이제 이것을 생성한 세션에서만 system.tables, system.columns 시스템 테이블을 통해 조회가 가능함. 내부 데이터베이스인 temporary_and_external_tables는 이제 이러한 시스템 테이블에서 보여지지 않고 임시 테이블은 비어 있는 데이터베이스지만 is_temporary 플래그로 구분될 수 있음
  • 접근 제어를 위해 allow_introspection_functions=0 으로 설정할 경우 내부 검사 함수의 사용을 금지하지만, 더이상 권한 부여를 금지 하지는 않음. 마찬가지로 allow_ddl=0은 DDL 명령어는 금지하지만 권한 부여는 금지 하지 않음
  • insert 동작 과정에서 "Too many parts" 에러를 반환하지 않음
  • 서버 metric을 통해 DDLWorker에 의해 수행된 현재 최대 ddl 항목을 표시함. 이는 DDLWorker가 어디에서 행이 걸렸는지 추적하기 용이함
  • 모든 서버의 현재 threads에 대한 비동기 metric을 표시함. 이는 이슈를 추적하기에 용이함
  • asterisk_include_materialized_columns와 asterisk_include_alias_columns 파라미터가 사용중일 경우 *(모든 열 가져오기) 쿼리에 MATERIALIZED와 ALIAS와 같은 동적 열이 포함될 수 있음
  • config.xml 설정 파일에 <ttl> 태그를 사용하여 system 로그 테이블에 대한 오래된 항목을 TTL을 명시하여 삭제할 수 있게 됨
  • -OrNull 을 -If, -Merge, -MergeState, -State와 같이 사용할 경우 -OrNull을 먼저 적어야 적용됨
  • fsync_part_directory, fsync_after_insert, in_memory_parts_insert_sync 가 동작하지 않도록 수정됨

 

Performance Improvement

Ver. 21.1.2.15

  • system table 없이 실행할 수 있도록 clickhouse-local에 --no-system-table 옵션이 추가됨
  • 분산 테이블에 동기식 삽입 시 shards에 비어있는 블록을 보내지 않음
  • float에서 string으로 형변환 시 ryu 대신 Dragonbox 알고리즘이 사용됨
  • repeat 함수의 성능이 개선됨
  • float 타입을 파싱하는 데 약간의 성능이 개선됨
  • OPTIMIZE TABLE ... FINAL 구문에 대해 merge된 파티션을 스킵할 수 있게 됨

 

Experimental Feature

  • Ver. 21.1.2.15
    • 신규 데이터 타입으로 map이 추가됨. 현재는 key와 value의 String 타입만 지원됨

 

Build/Testing/Packaging Improvement

Ver. 21.1.2.15

  • OpenSSL에서 BoringSSL로 변경됨
  • clickhouse가 가짜 zookeeper인 척할 수 있음. 스토리지 구현은 메모리 내 해시 테이블로 저장되며 클릭하우스 서버는 부분적으로 zookeeper 프로토콜을 지원함
  • 오류 발생을 위한 SYSTEM SUSPEND 명령어가 추가됨. 이는 failover 테스트에 용이함
  • DDLWorker 내 주키퍼 경로에 대한 경로 합치기가 약간 개선됨

 

Contents that needs to be tested

  • -

 

참고

728x90
반응형