728x90
반응형
목적
- upgrade에 따른 데이터 정합성, 성능 간 이슈 등을 사전에 체크하여 장애 발생을 방지
- 지속적으로 dbms 생명주기를 관리하여 신기술에 대한 인지 및 도입 방안 마련
읽기 전에
- 아래 내용은 Release note 내용 중 필요하다고 판단되는 부분 위주로 정리함
- 대체로 버전의 A.B 에서 A는 년(ex_ 20의 경우 2020년)을 의미하며 B는 월(ex_ 6의 경우 6월)을 의미함. 즉, 버전에서 Release date를 유추할 수 있음
- 중복된 내용의 경우 가장 낮은 버전(이전 버전)에서 최초 기입하며 이후 중복 기입하지 않음
Backward Incompatible Change
Ver. 20.7.2.30
- %(mod) 함수의 경우 부동소수점을 두개의 정수로 변환하지 않고 직접 나눗셈의 나머지로 처리함. 따라서 대부분의 DBMS와 date, datetime에서도 호환됨
- 0000-00-00 및 0000-00-00 00:00:00으로 0 Date/DateTime 값이 더이상 출력이 안됨
- MergeTree 설정에 대하여 상태 체크 기능 추가됨. 만약 상태가 이상하면 서버가 시작되지 않고 사용자에게 상세 내용이 표시됨
- background_pool_size 파라미터를 number_of_free_entries_in_pool_to_execute_mutation 또는 number_of_free_entries_in_pool_to_lower_max_size_of_merge보다 작은 값으로 설정하는 것을 방지함. 이 경우 alter 기능 및 merge의 최대 크기가 제한됨
- 20.5 버전을 기준으로 클러스터 내 해당 MU의 이전, 이후가 모두 포함되어 있을 경우 에러가 발생할 수 있음. 이 경우 이전 버전의 패키지를 모두 최신으로 변경한 후 서버를 시작해야 함
New Feature
Ver. 20.7.2.30
- 사전에 설정된 user에 대한 LDAP 인증 지원 추가됨
- alter ... partition ... 에서 attach 및 freeze 기능의 정보를 출력하는 alter_partition_verbose_result 파라미터가 추가됨
- fatal error 발생 로그를 수집하는 system.crash_log 테이블이 추가됨
- 디스크에 있는 데이터를 수정하는 alter 문을 제어할 수 있도록 allow_non_metadata_alters 파라미터가 추가됨. default 값은 사용 불가.
- sql outputs을 임의로 바꿀 수 있도록 formatrow 함수가 추가됨. column 함수와 조합하여 다양하게 사용 가능함
- MySQL과의 호환을 위해 from_unixtime 함수가 추가됨
- MergeTree 엔진 테이블에서 allow_nullable_key 파라미터가 enable일 경우 pk에 널 값이 들어갈 수 있음
Bug Fix
Ver. 20.7.2.30
- 단일 복제본에서 실행해야 하는 클러스터 쿼리(on cluster)에 대한 조기 타임아웃 수정
- 서버 충돌을 유발할 수 있는 캐시 layout의 외부 dictionary에 대하여 경쟁 조건(race condition) 수정
- order by에 여러 열이 사용될 때, LowCardinality 열에 의한 잘못된 정렬 연산이 수정됨
- 캐시 dictionary에 대하여 query_wait_timeout_milliseconds 파라미터 설정을 잘못 무효화하는 하드코딩된 타임아웃이 제거됨
- "Poco::Exception: no space left on device" 에러 내용에 대한 추가 정보의 잘못 마운트된 지점 수정됨
- optimize_duplicate_order_by_and_distinct 파라미터가 사용 가능으로 설정된 상태에서, 서브쿼리 내에서도 distinct 키워드가 사용되고 바깥 select에서도 distinct가 사용되었을 때 잘못 쿼리 최적화가 이루어지는 부분 수정
- distributed 테이블을 rename할 때 잠재적으로 발생하는 deadlock이 수정됨
- order by에 여러 열이 사용될 때, FixedString 타입의 열에 의한 잘못된 정렬 연산이 수정됨
- null과 비교할 때, set 타입의 index가 있는 MergeTree 테이블에서 읽기가 실패되는 문제가 수정됨
- drop database 문과 drop table 문을 동시에 수행할 때 "directory not empty" 에러가 발생하는 문제가 수정됨
- alter ... replcase/move partition ... 쿼리를 동시에 수행할 때 deadlock이 발생할 가능성 문제가 수정됨
- 종종 캐시 dictionary가 source의 현재 값 대신 default 값을 반환하는 문제가 수정됨
- null이 포함된 튜플을 비교할 때 잘못된 type을 반환하는 문제가 수정됨
- join_use_nulls 파라미터를 1로 설정하고 left asof join 시 충돌하는 문제가 수정됨
- NaN 값이 있는 float 타입에서 호출되는 uniqExact, topK, sumDistinct 및 유사한 집계 함수에 대해 잠재적으로 낮은 성능과 일부 잘못된 결과를 반환하는 문제가 수정됨
- union, join 쿼리에서 "Block structure mismatch" 에러가 발생하는 문제가 수정됨
- local replica에서 select 문을 위한 threads의 수를 불필요하게 제한하는 문제가 수정됨
- user가 있을 경우에도 create user if not exists 문 실행 시 에러가 발생되는 문제가 수정됨
- 쿼리 최적화할 때 any함수를 사용한 결과값의 별칭(alias)가 사라질 수 있는 문제가 수정됨
- 매우 큰 수의 limit 혹은 offset에 대하여 overflow가 발생하는 문제가 수정됨
Improvement
Ver. 20.7.2.30
- 많은 서버, 테이블, 삽입문이 있을 때 offline replica의 경우 주키퍼 노드의 과도한 성장(로그량을 말하는 듯)을 방지하고, 주키퍼에 더 적은 량의 로그를 보관하도록 할 것
- alter 또는 mutation 중에 에러가 발생할 경우 해당 내용이 사용자에게 전달됨
- system.event, system.metrics, processes, query_log 등의 시스템 테이블에 QueryTimeMicroseconds, SelectQueryTimeMicroseconds, InsertQueryTimeMicroseconds 지표 추가로 수집함
- System.events, system.metircs, processes, query_log 등의 시스템 테이블에 SelectedRows, SelectedBytes 지표 추가로 수집함
- system.query_log 시스템 테이블에 Current_database 정보도 추가됨
- Long 쿼리에 대한 잘못된 에러를 수정함. 예를 들어 올바른 쿼리에 대한 최대 쿼리 사이즈 초과 외에 구문 오류가 발생했던 문제 등
- truncate table 문에 대하여 table 키워드 없이 사용 가능하도록 지원됨
- semi left join 대신 left semi join을 사용할 수 있도록 하여 다양하게 조인할 수 있도록 함. 현재는 둘 모두 가능함
- s3 storage에 대한 요청 관련 몇몇 메트릭 지표가 추가됨
- --secure 옵션과 함께 clickhouse-benchmark의 기본 보안 포트 사용 가능함
- Log, TinyLog, StripeLog 엔진 테이블에서 insert에 대한 롤백 시 에러가 발생하여 정합성이 안맞는 문제가 해결됨
- Atomic database engine에 대하여 rename database 및 rename dictionary 문이 가능함. 내부적으로 uuid macro가 ReplicatedMergTree 테이블에 대하여 주키퍼 경로 내부에서 사용될 수 있음 이 기능은 create ... on cluster 쿼리로 가능하며 show_table_uuid_in_table_create_query_if_not_nil 파라미터를 true로 설정해야 함
- MergeTree 테이블 엔진이 ORDER BY 혹은 PARTITION BY를 포함하지 않으면 모든 컬럼에 대하여 ALTER to CLEAR를 요청하게 되고 이때 ALTER 는 중단되는 문제가 수정됨
Performance Improvement
Ver. 20.7.2.30
- 쿼리가 pk 범위 내에 정확하게 조건절로 들어가면 pk 탐색에 대한 최적화가 됨
- LowCardinality를 이용한 short 쿼리에 대하여 약간의 최적화가 됨
- 병렬 pk 탐색 및 parts에서 인덱스 단계 건너뛰기가 개선됨
- optimize_if_transform_strings_to_enum 파라미터가 1일 경우 IF와 TRANSFROM 함수의 string 타입 인자가 enum으로 변환되는 것이 개선됨
- optimize_redundant_functions_in_order_by 파라미터가 1일 경우 ORDER BY x, f(x)가 ORDER BY x로 변환되면서 ORDER BY에 대한 성능 최적화가 됨
- 서브쿼리가 WITH 을 포함할 경우 pushdown predicate이 사용 가능함
Experimental Feature
Ver. 20.7.2.30
- -
Build/Testing/Packaging Improvement
Ver. 20.7.2.30
- 일부 재귀 하위 모듈 제거됨
- 내부 쿼리에서 접근할 수 있는 사용자 선언(사용자 정의) 설정이 추가됨. 이는 clickhouse 엔진이 다른 시스템의 구성 요소로 사용될 때 필요함
- stress test 중 서버가 재시작될 때 timeout 에러가 발생하는 문제가 수정됨
Contents that needs to be tested
- truncate table 문에 대하여 table 키워드 없이 사용 가능하도록 지원됨
- 22.4.3.3 버전에서 테스트 결과 정상 작동함
localhost :) truncate datapipe_line.june01;
TRUNCATE TABLE datapipe_line.june01
Query id: 30df0486-2bf3-4149-ac50-084dd097f26f
Ok.
0 rows in set. Elapsed: 0.154 sec.
참고
- 클릭하우스 doc
2020 Changelog | ClickHouse Docs
728x90
반응형
'CDBMS > Clickhouse' 카테고리의 다른 글
[Clickhouse] Ver. 20.12 Release note 요약 (0) | 2024.01.07 |
---|---|
[Clickhouse] Ver. 20.11 Release note 요약 (0) | 2023.12.24 |
[Clickhouse] Ver. 20.10 Release note 요약 (0) | 2023.12.22 |
[Clickhouse] Ver. 20.9 Release note 요약 (0) | 2023.12.21 |
[Clickhouse] Ver. 20.8 Release note 요약 (0) | 2023.12.09 |