Search
Duplicate

SingleStoreDB v8.5 Release

문서번호 : 11-2131444
SingleStoreDB 의 새로운 Release 가 출시되었습니다. 이제 SingleStoreDB v8.5 엔진을 설치하여 신규 클러스터를 구성하거나 기존 클러스터를 엔진을 업그레이드 할 수 있습니다. 이번 release 의 주요 내용과 업그레이드 시 고려해야 하는 사항을 알아보겠습니다.

주요 기능

ANN(Approximous-Nearest-Neighbor) Search

이번 release 부터 지원되는 벡터 인덱싱을 사용하면 ANN Search 를 통해 더 빠르게 유사 항목 조회가 가능합니다. 지원되는 인덱스 유형은 IVF (Inverted File), HNSW (hierarchical navigable small world), PQ (product quantization) 입니다.

쿼리 플랜 고정 (Pinning)

특정 쿼리에 대해 사용자가 미리 지정한 플랜을 사용하여 동작하도록 할 수 있습니다. 해당 기능을 사용하여 Scale-In/Out 작업이나 엔진 업그레이드 시 쿼리 플랜이 변경되는 것을 방지할 수 있습니다.

Extensions

PSQL 이나 WASM 으로 여러 개의 UDF, UDAF를 생성하는 코드 파일들을 패키징하여 한번에 생성, 배포, 관리를 할 수 있도록 EXTENSION 기능을 지원합니다. EXTENSION 은 CREATE/DROP EXTENSION 명령을 사용하여 생성 또는 삭제할 수 있습니다.

쿼리 기록 및 trace 이벤트

CREATE EVENT TRACE 명령을 사용하면 실행한 쿼리와 실행 결과를 이벤트로 기록하여 실패한 쿼리를 추적할 수 있습니다. information_schema의 MV_TRACE_EVENTS, LMV_TRACE_EVENTS View 에서 기록된 이벤트를 확인합니다. 이벤트의 상세한 내용은 JSON 포맷으로 기록되며, 대시보드(Grfana) 형태로 조회하면 실패한 쿼리를 필터링 하기 더 용이합니다.

Trace Log Rotation

SingleStoreDB 에 내장된 log rotation 기능으로 시간 또는 크기를 기준으로 memsql.log 를 rotation 시킵니다. 보관 주기를 초과한 파일은 자동으로 삭제되도록 설정할 수도 있습니다.

Resource Pool 을 위해 향상된 메모리 관리

Resource Pool 생성 시 사용할 수 있는 QUERY_MEMORY_PERCENTAGE 옵션이 추가되었습니다. 해당 옵션을 사용하면 개별 쿼리에 대한 메모리 최대 사용 비율을 제한할 수 있습니다.

Load Data

MongoDB 및 MySQL 에서 CDC Pipeline 을 사용하여 데이터를 load 할 수 있습니다. 소스 DB에 대해 link 생성 후 CREATE TABLES AS INFER PIPELINE구문을 사용하여 테이블을 생성하면 자동으로 pipeline 과 procedure 가 생성되고 데이터가 적재됩니다.

Shallow Copy

Columnstore 테이블에 대해 shallow copy 기능을 지원합니다. CREATE TABLE WITH SHALLOW COPY 구문을 사용하면 디스크에 있는 데이터를 빠르게 복사하며, 테이블을 생성(CREATE TABLE A LIKE B)한 후 데이터를 적재(INSERT INTO A SELECT * FROM B ) 할 때 보다 훨씬 빠른 성능을 확인할 수 있습니다.

%ROWTYPE, %TYPE 표기법 지원

WASM 이나 PLSQL 에서 변수 선언 시 %ROWTYPE, %TYPE 를 사용할 수 있으며, 이를 통해 더 쉽게 Oracle 의 PLSQL 과 포팅이 가능합니다.
Release Note 참고 기능에 대한 더 자세한 내용은 아래 Release Note 에서 확인하실 수 있습니다.

기타 개선 사항

추가된 Information Schema View와 Column 목록

View Name
Column Name
Detail
CORRELATED_COLUMN_STATISTICS
correlated 컬럼에 대한 메타 데이터를 제공
PROJECTIONS
projections 정보를 제공 (projections은 추후 패치를 통해 제공 예정)
RESOURCE_POOL_PRIVILEGES
리소스 풀에 부여된 권한 정보를 제공
MV_BACKUP_HISTORY
error_code
실패한 백업에 대한 에러 코드
MV_BACKUP_HISTORY
error_message
실패한 백업에 대한 에러 메세지
MV_SYSINFO_DISK
read_operations_cumulative_per_device
클러스터 기동 후 장비에서 수행된 Read 작업의 수
MV_SYSINFO_DISK
write_operations_cumulative_per_device
클러스터 기동 후 장비에서 수행된 Write 작업의 수
MV_SYSINFO_DISK
device_name
read_operations_cumulative_per_device, write_operations_cumulative_per_device 를 count 한 장비의 이름
MV_TRACE_EVENTS
모든 trace 이벤트 정보를 제공
MV_TRACE_EVENTS_STATUS
trace 이벤트의 상태 정보를 제공
LMV_TRACE_EVENTS
각 노드별 모든 trace 이벤트 정보를 제공
ADVANCED_HISTOGRAMS
JSON_KEY
JSON 컬럼에 대한 JSON_KEY 확인 (JSON 컬럼이 아닌 경우 NULLl)
L/MV_QUERY_PROSPECTIVE_HISTOGRAMS
JSON_KEY
JSON 컬럼에 대한 JSON_KEY 확인 (JSON 컬럼이 아닌 경우 NULLl)
L/MV_PROSPECTIVE_HISTOGRAMS
JSON_KEY
JSON 컬럼에 대한 JSON_KEY 확인 (JSON 컬럼이 아닌 경우 NULLl)

추가된 Command와 Function

Type
Name
Detail
Function
REGEXP_MATCH(<string>, <pattern>[, <parameters>]])
string에서 정규식 패턴과 일치하는 문자열을 반환
Command
CREATE AGGREGATE … GROUP BY [ CUBE | ROLLUP ]
Wasm 기반의 UDAF에 GROUP BY [CUBE|ROLLUP] 지원
Command
CREATE EVENT TRACE
trace 이벤트 생성을 위한 명령 지원
Command
DROP EVENT TRACE
trace 이벤트 삭제를 위한 명령 지원
Command
INSERT … ON DUPLICATE KEY UPDATE … ELSE DELETE ….
ON DUPLICATE KEY 절과 동일한 키에 DELETE 사용 지원

Engine Variables

Variable Name
Detail
enable_idle_table_optimizations
idle 테이블에 대한 테이블 메모리 오버헤드를 줄이는 데 사용 (ON | OFF, default: ON)
enable_idle_table_eviction
idle 테이블에 대한 테이블 메모리 오버헤드를 줄이는 데 사용 (FULL | SKIPLISTSONLY | OFF, default: ON)
privilege_caches_update_mode
많은 양의 보안 관련 작업(role, group, user 생성 등) 수행 시 성능 개선을 위해 사용 (always | never, default: always)
optimizer_use_average_rowsize
쿼리 최적화 비용 계산 시 row 크기 추정 허용을 위해 사용 (ON | OFF | AUTO, default: OFF)
query_parallelism_per_leaf_core
기존 query_parallelism 을 대신하여 사용 단일 쿼리가 각 leaf 노드에서 사용할 수 있는 core 의 비율을 지정 (0~1, default: 1.0)
use_user_provided_index_types_in_show
DESCRIBE <table_name> 또는 SHOW COLUMNS 구문을 통해 표시되는 내용을 제어에 사용 (TRUE | FALSE, default: TRUE)
throttle_replay_behind_tail_mb
Chidl Aggregator 가 Master Aggregator 의 트랜잭션 로그 복제 시 지연 허용 범위 제한에 사용 (Mega Byte) (10MB~4GB, default 2048)
enable_json_statistics
JSON 통계 지원 활성화를 위해 사용 (TRUE | FALSE, default: FALSE)
trace_events_queue_size
trace 이벤트 기록에 사용하는 최대 크기 (Byte) (default: 0, trace 이벤트 기록 시 권장 크기: 16 MB)
optimizer_disable_transitive_predicates
쿼리 재정의 시 조건절 이행(Transitive Predicate) 을 활성화하기 위해 사용 (TRUE | FALSE, default: FALSE)
java_pipelines_java11_path
Java 바이너리의 경로를 지정
pipeline_cdc_java_heap_size
CDC-in pipeline 의 JVM heap 크기 제한을 위해 사용 (default: 128)

업그레이드 시 확인 사항

중요
SingleStoreDB 7.3 이상 버전을 사용하는 클러스터에서만 SingleStoreDB 8.5로 직접 업그레이드가 가능합니다.
DR 구성에 의해 실행 중인 보조 클러스터도 함께 업그레이드 해야 한다면, 보조 클러스터를 하나씩 업그레이드한 후 마지막으로 기본 클러스터를 업그레이드하여 복제가 업그레이드 중에도 동작하도록 합니다.
MemSQL 6.7 ~ SingleStoreDB 7.0 에서 업그레이드하려면 SingleStoreDB 7.3으로 업그레이드 한 후 SingleStoreDB 8.5 로 업그레이드합니다. (이전 버전에 대한 업그레이드는 공식 Docuement 를 참고합니다. )

업그레이드 전 확인

Backup

업그레이드 작업 전 데이터베이스를 백업합니다. 클러스터에서 구성하는 정보(리소스 풀, 엔진 변수, 사용자, 권한, role, passwords, Pipeline Transforms)는 백업 명령을 통해 백업되지 않으므로 OS 단에서 별도의 스크립트를 사용하여 미리 백업해두는 것이 좋습니다. ( MemSQL 6.8 이전 버전의 클러스터에서 생성한 백업은 SingleStoreDB 7.8 이후 버전의 클러스터에서는 복구 할 수 없습니다. )

Plancache

새로운 SingleStoreDB 버전으로 업그레이드하면 이전에 컴파일된 모든 plan 이 무효화되므로 최초 쿼리 실행 시에는 기존보다 시간이 느려질 수 있습니다.

비동기 엔진 변수

SingleStoreDB 7.3 이후부터 비동기 엔진 변수 convert_nonunique_hash_to_skiplist 에 대해 TRUE로 설정됩니다.

OpenSSL 3.0으로 업그레이드

SingleStoreDB 8.1 이후 보안 연결을 설정할 때 OpenSSL 3.0 을 사용합니다. 따라서 보안 연결에 사용하는 클라이언트인증서의 서명(Signature)에 SHA 또는 MD5 Hash 암호화를 사용한다면 SHA256 (또는 그 이상의 알고리즘)을 사용하는 인증서로 교체되어야 합니다. TLS v1, TLS v1.1, TLS v1.2 을 모두 지원하며, FIPS 활성화 시에는 TLS v1.2만 지원합니다.

클러스터 체크

-- 모든 노드가 Online 상태인지 확인 SHOW LEAVES; SHOW AGGREGATORS; -- Orphan 파티션이 없는지 확인 SHOW CLUSTER STATUS; -- rebalance 또는 redundancy 조정이 필요하지 않은지 확인 EXPLAIN REBALANCE PARTITIONS; EXPLAIN RESTORE REDUNDANCY;
SQL
복사

업그레이드

업그레이드 방법 (Offline/Online) 을 선택하고, 기존 설치와 동일한 설치 파일 형식을 사용하여 업그레이드를 진행합니다.
Online 업그레이드를 진행하려면 클러스터에 H/A 설정이 되어있어야 합니다.
업그레이드 명령 실행 전 --precheck-only 옵션을 사용하여 업그레이드 동작에 문제가 없는지 미리 확인할 수 있습니다.
인터넷에 엑세스 할 수 없는 환경이라면 엔진 설치 파일을 사전에 다운로드하여 클러스터 환경에 옮겨 놓습니다. 이 때 다운로드 받은 설치 파일의 버전이 v8.5가 맞는지 확인합니다.

업그레이드 실패로 인한 Roll back

SingleStoreDB는 downgrade 를 지원하지 않습니다. 따라서 업그레이드를 실패했다면 업그레이드 작업 전 만든 백업을 사용하여 roll back합니다.
# 현재 구성되어 있는 클러스터로부터 setup 정보(.yaml)를 추출 $ sdb-deploy generate-cluster-file # 업그레이드 실패한 클러스터의 노드 전체 삭제 $ sdb-admin delete-node --stop --all # v8.5 엔진 삭제 $ sdb-deploy uninstall --version 8.5 # 호스트 정보 삭제 $ sdb-toolbox-config unregister-host --all # setup 정보(.yaml) 로 다시 클러스터 구성 $ sdb-deploy setup-cluster --cluster-file /path/to/cluster/file # 사전 백업 파일을 Restore > RESTORE DATABASE <database_name> FROM "backup_path" [WITH FILE = incr_backup_id] [sync_options] [(OPTION resource_pool = resource_pool_name)]
Bash
복사

업그레이드 후 확인

버전에 따른 엔진 변수 Default 값 차이
일부 엔진 변수의 default 값이 이전 버전과 달라지더라도 업그레이드를 통해 새로운 버전의 클러스터를 사용하는 경우 이전 버전의 값을 그대로 사용합니다. default 값이 변경된 엔진 변수가 확인된다면 직접 테스트를 수행하여 관리자가 값을 변경합니다.
새로운 기능의 활성화
일부 새로운 기능은 v8.5로 새로 설치 및 구성된 클러스터에서는 자동으로 활성화되지만 업그레이드를 하는 경우에 비활성화 됩니다. 이러한 기능들은 필요성을 확인 후 직접 테스트를 수행하여 관리자가 활성화 여부를 결정합니다.

References

History

일자
작성자
비고
2024.01.10
mk.Kang
최초 작성