MariaDB

MySQL/MariaDB Storage 엔진 비교

my-log 2022. 5. 6. 17:40

1. InnoDB 엔진

1.1 특징

  • 3개 엔진중 유일하게 트랜잭션을 지원하여 ACID를 충족한다. 또한 외래키를 지원한다.
  • 데이터가 클러스터링 인덱스(프라이머리 키)기반으로 저장되며 세컨더리 인덱스는 리프노드에 프라이머리키 값을 저장한다.
  • MVCC 기능을 통해 잠금을 사용하지 않는 일관된 읽기 기능을 제공한다.
  • row-level lock을 사용하여 multi-user 환경에서 높은 성능을 제공한다.
  • InnoDB 버퍼풀을 사용하여 디스크의 데이터파일/인덱스를 메모리에 캐시하며, 쓰기버퍼 역할을 수행한다.
  • Undo 로그를 활용하여 트랜잭션 보장 및 격리 수준을 보장한다.
  • 체인지 버퍼를 사용하여 인덱스에 대한 UPDATE 작업을 버퍼링 하여 성능을 향상 시킨다 (유니크 인덱스 제외)
  • 리두 로그를 통해 자동화된 장애 복구를 지원한다.
  • MySQL 8.0 버전부터는 모든 데이터가 InnoDB 스토리지 엔진으로 사용될 만큼 모든 상황에서 사용될 수 있다.

1.2 단점

  • InnoDB 5.6버전 이하는 Full-Text 인덱스를 사용할 수 없다.
  • 메모리 및 디스크 사용량이 다른 엔진에 비해 많다.

2. MyISAM 엔진

2.1 특징

  • Full-Text 인덱스를 지원하여 빠른 검색이 가능하다.
  • 모든 테이블에 row-count 값을 저장하여 select count(*) 실행시 빠른 조회가 가능하다.
  • 엔진 구조및 파일 구조가 단순하여 InnoDB대비 메모리/디스크 공간이 적게 사용된다.
  • 키 캐시를 사용하여 인덱스에 대한 메모리 캐시 기능을 제공하고 부분적인 인덱스 쓰기 버퍼 기능을 제공한다.
  • InnoDB와 달리 데이터 파일이 클러스터링 되어 저장되지 않고, Heap 공간처럼 활용되어 Insert되는 순서대로 데이터파일에 저장된다.
  • 프라이머리 키와 세컨더리 인덱스의 리프노드는 모두 데이터 파일의 저장된 레코드의 ROWID 값을 가진다.
  • Table-level lock을 사용하여 읽기/쓰기에 성능에 제한이 있으므로 read-only 환경이나 DW환경에서 주로 사용된다.

2.2 단점

  • 트랜잭션을 지원하지 않기 때문에 비정상적인 종료 시 데이터 무결성을 보장하지 못한다.
  • 키 캐시는 인덱스 만을 대상으로 캐시 역할을 수행하기 때문에 테이블 데이터에 대해서는 디스크 I/O가 발생하며, 운영체제의 캐시나 버퍼링을 활용한다.
  • MyISAM의 장점 대부분이 InnoDB에서도 기능적으로 구현되어있기 때문에, MyISAM만의 장점이 크게 없다.

3. Archive 엔진

3.1 특징

  • 데이터가 메모리 상에서 압축(zlib)되고 압축된 상태로 디스크에 저장되기 때문에 적은 저장 공간을 사용한다.
  • 많은 양의 데이터를 작은 공간에 저장하기 위한 테이블을 만들 때 사용된다.(읽기 작업이 거의 발생하지 않는 로그 데이터를 저장하는 경우 등)
  • datafile의 크기가 작기 때문에 빠르고 효율적인 백업/복구가 가능하다.

3.2 단점

  • INSERT, REPLACE, SELECT 는 가능하지만 UPDATE, DELETE를 사용할 수 없다.
  • 인덱스를 지원하지 않기 때문에(AUTO INCREMENT 컬럼에 대한 인덱스만 생성 가능) SELECT할 때 TABLE FULL스캔을 해야한다.
  • SELECT문은 insert buffer를 flush하기 때문에 insert도중에 다량의 select문이 수행되면 insert 성능이 감소한다.

4. 주요 차이점 비교

'MariaDB' 카테고리의 다른 글

트랜잭션 격리 수준(ISOLATION LEVEL)  (0) 2022.05.06
MariaDB 이중화 구성  (2) 2022.05.06