728x90
반응형
목적
- upgrade에 따른 데이터 정합성, 성능 간 이슈 등을 사전에 체크하여 장애 발생을 방지
- 지속적으로 dbms 생명주기를 관리하여 신기술에 대한 인지 및 도입 방안 마련
읽기 전에
- 아래 내용은 Release note 내용 중 필요하다고 판단되는 부분 위주로 정리함
- 버전의 A.B 에서 A는 년(ex_ 20의 경우 2020년)을 의미하며 B는 월(ex_ 6의 경우 6월)을 의미함. 즉, 버전에서 Release date를 유추할 수 있음
- 중복된 내용의 경우 가장 낮은 버전(이전 버전)에서 최초 기입하며 이후 중복 기입하지 않음
Backward Incompatible Change
- Ver. 21.11
- 표준과 일치하도록 SQL/JSON 함수의 json_path와 json arguments 순서가 변경됨
- MergeTree 테이블에 write_final_mark 파라미터가 삭제됨. 항상 true이며 호환을 위한 추가 작업은 없음
- clickhouse-keeper 툴은 LZ4 블록 압축 대신 ZSTD 코덱으로 압축을 사용하여 스냅샷을 뜸
New Feature
- Ver. 21.11
- 신규 비동기 삽입 모드가 추가됨. 이 것은 백그라운드에서 단일 배치로 저장되며 async_insert 파라미터를 통해 클라이언트는 활성화할 수 있음. 만약 wait_for_async_insert가 true이면(기본적으로 true), 클라이언트는 데이터가 테이블에 flush될때까지 기다려야 함. 서버측에서는 이러한 제어를 async_insert_threads, async_insert_max_data_size, async_insert_busy_timeout_ms로 제어 가능함. 이러한 비동기 삽입은 개별 삽입 쿼리를 초당 만개씩 수행 가능함
- clickhouse-local에 대한 대화형 모드가 추가됨. 이를 통해 사용자는 서버 접속 없이 clickhouse 인터페이스에 cli으로 접근 가능하고 파일과 외부 데이터 소스로부터 데이터 처리가 가능함
- 외부 데이터 소스에 대한 사전 연결이 가능함. 외부 데이터를 사용하는 동안 이름으로 증명이나 주소 명시를 피할 수 있음
- system 데이터베이스 내 테이블에 대응되는 SCHEMATA, TABLES, VIEWS, COLUMNS 뷰를 포함하는 INFORMATION_SCHEMA 데이터베이스가 추가됨
- EXISTS (서브쿼리)가 지원됨
- 세션에 대한 감사를 위한 system.session_log 시스템 테이블이 추가됨. 성공/실패한 로그인과 로그아웃 등을 기록함
- INTO OUTFILE, FROM INFILE 구문에 대한 압축 및 압축 해제가 지원됨
- 쿼리 내 JOIN ON이 논리합(OR)을 지원함
- Kafka, RabbitMQ 엔진과 같이 애플리케이션 로그 파일의 Streaming consumption을 하는 FileLog 테이블 엔진이 추가됨. 이 것은 append만 가능하고 local 파일 시스템에서 로그를 rotate함
- SELECT 0b001처럼 바이너리 문자열로 숫자를 쓸 수 있음
- MD4, SHA384 함수가 추가됨. MD4는 보안적으로 좋지 않고 구식이기 때문에 이전 시스템과의 호환성을 위해 사용하는 경우에만 적용할 것
- ALTER TABLE table_name MODIFY COMMENT 구문이 구현됨
- 현재 주키퍼 세션의 uptime을 초로 반환하는 zookeeperSessionUptime() 함수가 추가됨
- FixedString, String 데이터 타입에 대한 비트 이동 연산자가 추가됨
Bug Fix
- Ver. 21.11
- 암호화된 디스크에서 텅 빈 파일을 읽는 버그가 수정됨
- ReplicatedMergeTree 내 주키퍼 경로의 보조적인 주키퍼 이름을 추출할 때의 모호함이 수정됨. 슬래시(/)나 콜론(:)이 허용되지 않음
- REPLACE/MOVE PARTITION과 파티션 내 데이터가 이동되거나 교체된 경우 non-replicated MergeTree 내 백그라운드 병합 사이에 경쟁 상태가 놓이는 버그가 수정됨
- 동일한 테이블의 스칼라 서브쿼리에 대한 ALTER에 데드락이 발생하는 버그가 수정됨
- REPLACE PARTITION 수행 동안 세션이 만료되면 segfault가 발생하는 버그가 수정됨
- 삽입 쿼리가 널 허용 컬럼에 기반한 MATERIALIZED 컬럼을 잘못 채우는 버그가 수정됨
- 21.9 ~ 21.10 버전에서 GLOBAL IN과 WITH TOTALS 쿼리에 대해 "Port is already connected" 에러가 반환되는 버그가 수정됨
- MOVE PARTITION과 MergeTree에 대한 merges/mutations 사이에 경쟁이 수정됨
- sample by tuple() 사용시 충돌이 발생하는 버그가 수정됨
- x.y.z..와 같은 DEFAULT 표현 내 잘못된 테이블 식별자를 사용하여 ALTER MODIFY 쿼리 수행 시 드물게 segfault가 발생하는 버그가 수정됨
- 동시에 조인 테이블 엔진에 읽기와 쓰기할 경우 데드락이 발생하는 버그가 수정됨
- HAVING 조건을 푸시다운할 경우 서브쿼리에 대한 "Block structure mismatch"가 발생할 수 있는 버그가 수정됨
- 새로운 replica가 추가되는 동안 Replcated 데이터베이스에 DDL 쿼리가 행이 걸릴 수 있는 버그가 수정됨
- 대소문자 구분하지 않는 함수로 default 표현식을 쓴 테이블 컬럼을 하나 가진 ReplicatedMergeTree의 replica를 생성하거나 재생성하는 동안, 주키퍼 내 "Table columns structure in ZooKeeper is different from local table structure" 에러가 반환될 수 있는 버그가 수정됨
- 별칭 컬럼으로 조인할 때 "Not found column ... in block" 에러가 발생되는 버그가 수정됨
- WITH FILL이 포함된 ORDER BY 쿼리에 대한 나쁜 최적화가 수정됨
- mutations_sync=2일 때 mutation에 대한 대기가 수정됨
- system.processes 시스템 테이블에 Settings.Names, Settings.Values 별칭이 추가됨
Improvement
- Ver. 21.11
- 사용자는 재시작 없이 로그 수준을 변경할 수 있음
- 아래와 같은 사용자 정의 함수 관련 개선이 있음
- 사용자 정의 함수(UDF)가 ON CLUSTER에서도 동작함
- CREATE OR REPLACE, CREATE IF NOT EXISTS 구문이 추가됨
- DROP IF EXISTS가 추가됨
- clockhouse-local에 UDF가 지원됨
- 전역적으로 쿼리별 메모리 profiler가 활성화됨(memory_profiler_step = 4MiB로 설정하여)
- system.data_skipping_indices 시스템 테이블 내 data_compressed_bytes, data_uncompressed_bytes, marks_bytes 열이 추가됨. system.parts 시스템 테이블에 secondary_indices_compressed_bytes, secondary_indices_uncompressed_bytes, secondary_indices_marks_bytes 열이 추가됨
- system.tables에 테이블 별칭 및 system.databases에 데이터베이스 별칭이 추가됨
- 사용자는 딕셔너리 추가시 CREATE DICTIONARY ... COMMENT 'value'와 같이 코멘트를 추가할 수 있음. CREATE DATABASE 문을 통하여 데이터베이스에도 코멘트를 추가할 수 있음
- clickhouse-format이 --query 옵션을 지원함. 이전에는 쿼리를 stdin에 전달했어야 했음
- 메모리 데이터베이스 내 ALTER TABLE 구문이 지원됨. 메모리 데이터베이스는 clickhouse-local에 사용됨
- GROUP BY, ORDER BY에 positional 인자에 대해 완전한 지원을 함
- ALTER TABLE table_name REMOVE SAMPLE BY 명령어를 사용하여 MergeTree 테이블에서 SAMPLE BY 표현식을 제거할 수 있음
- 버퍼 테이블에서 FLUSH와 STARTUP 사이에 데이터 경쟁이 수정됨
- shutdown_wait_unfinished_queries 서버 파라미터가 추가됨. 이 파라미터는 실행중인 쿼리가 이 파라미터까지 기다릴 수 있음
- system.trace_log 내 새로운 trace_type인 MemoryPeak 열로 peak 메모리 사용을 추적할 수 있음
- 중첩된 서브 쿼리에서 mutations에 "There is no query or query contet has expired" 에러가 발생하는 버그가 수정됨. 만약 테이블이 복제되었고 allow_nondeterministic_mutations 파리머탁 비활성화되었다면 mutations 내 서브쿼리를 사용하면 안됨
- 재시작 없이 쿼리가 수행되는 동안 max_concurrent_queries 값을 변경할 수 있음
- mutation/merge 가 특별히 길 경우 활성중인 mutation/merge가 사용중인 임시 폴더의 정리(clean)을 금지함
- JSON 함수 내 널 컬럼을 잘못 처리하는 버그가 수정됨
Performance Improvement
- Ver. 21.11
- 백그라운드 병합은 서로 선점할 수 있으며 적절한 우선순위로 예약될 수 있음. 이 것은 "Too many parts" 에러를 덜 발생하게 함. 백그라운드 풀의 스레드 수보다 더 많은 병합과 mutation을 실행할 수 있는 기능이 추가됨. 이는 단계별로 진행되며 크키가 적을 수록 더 우선순위를 가짐. background_merges_mutations_concurrency_ratio에 의해 제어되며 기본 값은 2임
- 원격 파일시스템에서 비동기 읽기를 사용할 수 있음. 원격 파일시스템에서 읽는 동안 검색 수가 더 줄어듬
- clickhouse-client에서 INTO OUTFILE 쿼리는 다중 스레드를 사용하게 됨
- MergreTree 엔진군에 한하여 일부 select 쿼리에 대해 디스크로부터 읽는 중복 압축 데이터 량 감소
- MergeTree 엔진군에 한하여 압축된 블록을 읽는 동안 일부 중복 검색 call이 제거됨
- optimize_aggregation_in_order 파라미터가 활성화된 상태에서 기본키의 순서대로 집계 성능이 개선됨
- 딕셔너리 테이블을 이용한 select 쿼리는 다중 스레드를 사용함
- WHERE절에서 Decimal 타입 열의 필터링 성능이 개선됨
- float 타입의 널 허용 컬럼에 대한 SUM 집계 함수 성능이 개선됨
- tuple 내에서 pk 인덱스와 파티션 필터가 동작될 수 있음
Experimental Feature
- Ver. 21.11
- clickhouse-keeper 툴의 노드 설정(.xml 파일 내)을 변경할 수 있음
Build/Testing/Packaging Improvement
- Ver. 21.11
- -
참고
- clickhouse change log doc_001
https://clickhouse.com/docs/en/whats-new/changelog/
728x90
반응형
'CDBMS > Clickhouse' 카테고리의 다른 글
[Clickhouse] Ver. 22.1 Release note 요약 (0) | 2024.04.21 |
---|---|
[Clickhouse] Ver. 21.12 Release note 요약 (0) | 2024.04.20 |
[Clickhouse] Ver. 21.10 Release note 요약 (0) | 2024.04.18 |
[Clickhouse] Ver. 21.9 Release note 요약 (0) | 2024.04.17 |
[Clickhouse] Ver. 21.8 Release note 요약 (0) | 2024.04.16 |