스토리지 엔진은 테이블의 유형을 의미하며, 데이터베이스의 스토리지 엔진은 컴퓨터에서 테이블이 저장되는 방식을 결정합니다. 본 문서에서는 클라우드 데이터베이스 MySQL이 지원하는 스토리지 엔진을 소개합니다.
InnoDB 엔진
InnoDB 엔진은 가장 일반적으로 사용되는 OLTP 스토리지 엔진으로, 다중 버전 동시성 제어(MVCC) 및 행 수준 잠금 기술을 채택하여 고성능 및 신뢰할 수 있는 트랜잭션 처리 능력을 제공합니다. MySQL의 다른 스토리지 엔진에 비해 InnoDB는 외래 키 및 롤백 등을 포함한 더 나은 데이터 무결성을 지원하며, 더 높은 수준의 쿼리 기능을 제공합니다. 또한 Tencent Cloud는 InnoDB에 대해 많은 커널 최적화를 수행하여 더욱 뚜렷한 성능 우위를 가지게 되었으며, 고성능 및 고동시성 애플리케이션 시나리오에서 널리 사용됩니다.
클라우드 데이터베이스 MySQL은 기본적으로 InnoDB 스토리지 엔진을 지원하며, MySQL 5.6 이상 버전에서는 MyISAM 엔진과 Memory 엔진을 더 이상 지원하지 않습니다. 주요 이유는 다음과 같습니다:
현재 MySQL 버전에서 TencentDB는 InnoDB에 대해 많은 커널 최적화를 수행하여 이미 뚜렷한 성능 우위를 가지게 되었습니다.
MyISAM은 테이블 수준 잠금 메커니즘을 채택하고, InnoDB는 행 수준 잠금 메커니즘을 채택합니다. 일반적으로 InnoDB가 더 높은 쓰기 효율성을 가집니다.
설명:
테이블 수준 잠금은 MySQL에서 잠금 단위가 가장 큰 유형의 잠금으로, 현재 작업 중인 전체 테이블에 잠금을 설정하는 것을 의미합니다.
행 수준 잠금은 MySQL에서 잠금 단위가 가장 작은 잠금 유형으로, 현재 작업 중인 행에 대해서만 잠금을 설정하는 것을 의미합니다.
MyISAM은 데이터 무결성 보호에 결함이 있으며, 이러한 결함은 데이터베이스 데이터의 손상이나 심지어 손실을 초래할 수 있습니다. 또한 이러한 결함 대부분은 설계상의 문제로, 호환성을 파괴하지 않고는 수정할 수 없습니다.
MyISAM 및 Memory를 InnoDB로 이전하는 비용이 낮으며, 대부분의 애플리케이션은 테이블 생성 코드만 수정하면 이전을 완료할 수 있습니다.
MyISAM의 발전은 InnoDB로 이전되고 있으며, 최신 공식 MySQL 8.0 버전에서는 시스템 테이블이 모두 InnoDB를 채택했습니다.
Memory는 데이터 무결성을 보장할 수 없으며, 인스턴스 재시작 또는 주-예비 전환 시 테이블의 모든 데이터가 손실됩니다. 가능한 한 빨리 InnoDB로 마이그레이션하는 것을 권장합니다.
RocksDB 엔진
RocksDB는 매우 인기 있는 고성능 지속성 KV(key-value) 스토리지이며, TXRocks는 Tencent TXSQL 팀이 이를 기반으로 개발한 트랜잭션 스토리지 엔진입니다. TXRocks 트랜잭션 스토리지 엔진은 RocksDB LSM Tree 스토리지 구조 덕분에 InnoDB의 페이지 반만 채워짐 및 단편화로 인한 낭비를 줄이고, 압축 형식 저장을 사용할 수 있어, TXRocks는 InnoDB에 근접한 성능을 유지하면서도 저장 공간이 InnoDB 대비 절반 이상 절약됩니다. 따라서 트랜잭션 읽기/쓰기 성능이 요구되며 대량의 데이터를 저장하는 비즈니스에 더 적합합니다.
더 많은 저장 공간 절약
InnoDB에서 사용하는 B+Tree 인덱스 구조에 비해 LSM Tree는 상당한 비율의 저장 공간을 절약할 수 있습니다.
쓰기 증폭이 더 낮음
InnoDB는 In-Place 수정 방식을 채택하여 단일 레코드만 수정하더라도 전체 페이지를 디스크에 플러시해야 할 수 있으며, 이로 인해 비교적 높은 쓰기 증폭 및 랜덤 쓰기가 발생합니다. 반면에 RocksDB는 Append-Only 방식을 사용하여 상대적으로 쓰기 증폭이 더 낮습니다.
LibraDB 엔진
LibraDB 엔진은 읽기 전용 분석 엔진으로, 클라우드 데이터베이스 MySQL에서 지원하는 새로운 기능이며, 이 기능은 읽기 전용 인스턴스를 기반으로 서비스를 제공합니다. 플러그인식 엔진 설계를 통해 유연한 생성 및 파기가 가능하며, 사용자에게 대규모 데이터 처리 및 효율적이고 실시간의 복잡한 분석 능력을 제공합니다. LibraDB 엔진은 주로 효율적인 분석 쿼리에 서비스를 제공합니다. 이는 고객에게 실시간이면서 고성능의 복잡한 SQL 처리를 제공하는 확장 읽기 전용 분석 컴포넌트입니다. LibraDB 엔진의 컬럼 기반 스토리지 기능, 벡터화된 병렬 실행 엔진 및 분산 병렬 실행을 위해 확장된 옵티마이저를 활용하면 고객이 데이터베이스 내에서 효율적인 분석 능력을 쉽게 경험할 수 있습니다. 또한 LibraDB의 컬럼 기반 스토리지는 높은 QPS 변경, 트랜잭션의 ACID를 위해 특화된 최적화를 수행하여 쿼리 데이터의 실시간성 및 일관성을 보장합니다.
대규모 병렬 컴퓨팅 MPP
MPP(Massively Parallel Processing) 아키텍처를 지원하여 워크로드를 여러 노드에 분산시켜 데이터 처리 성능을 향상시킬 수 있습니다.
벡터화 실행 엔진
LibraDB 엔진에서는 벡터화된 실행 모드를 구현하여 메모리 내 컬럼 기반 데이터에 대해 하나의 배치(batch)마다 SIMD 명령어를 한 번 호출함으로써 함수 호출 횟수를 줄이고 캐시 미스(cache miss)를 감소시켰습니다.
고속 변경 시나리오에서 컬럼 기반 스토리지 지원
LibraDB 엔진은 스토리지 계층의 최적화 및 지원을 통해 고동시성 시나리오에서의 데이터 변경 시 데이터 일관성을 보장하며, 읽기/쓰기 인스턴스의 빈번한 데이터 변경으로 인한 지연으로 분석 시기를 놓치는 상황을 방지합니다.
데이터 로딩 기능 지정
libraDB 엔진은 지정된 객체 로딩 기능을 지원합니다. 데이터 로딩 콘솔 설정에서 또는 명령줄 SQL을 통해 로드할 LibraDB 객체를 지정할 수 있습니다.
각 엔진이 지원하는 버전 및 아키텍처
|
InnoDB 엔진 | MySQL 5.6、5.7、8.0 | 단일 노드, 이중 노드, 삼중 노드, 클라우드 디스크 버전 |
RocksDB 엔진 | MySQL 5.7、8.0 | 이중 노드 |
LibraDB 엔진 | MySQL 5.7、8.0 | 이중 노드, 삼중 노드 |