1. 개요

먼저 이해해야 할 것은 크게 DB Engine과 Storage Engine으로 구분된다는 것이다. 실제 A-C-I-D는 Storage Engine에서 구현된다. 


2. MyISAM

에전 MySQL은 MyISAM을 Storage Engine으로 사용하였다. MyISAM은 블로그나 게시판성 시스템과 같이 Write보다 Read가 많은 시스템에 적합하다. 다시 설명하자면 Single-append, Multi-read 인 경우이다. 이 때는 myisampack을 이용하여 Read-only용 압축 테이블을 유지할 수 있어 디스크 용량 측면에서도 유리하다.


3. InnoDB

3-1. 소개

InnoDB는 Transaction-safe한 Storage Engine으로 2005년 Oracle이 Innobase를 인수한 후 Oracle의 일부가 되었으며, MySQL 5.5 이후 기본적으로 사용되고 있다. 즉 5.5 이전에서는 MyISAM이 기본이었다는 이야기다. MyISAM과 유사한 면이 있지만 보다 많은 기능을 제공한다. (MVCC 지원, ACID Transaction 처리, FK 지원, row-level lock 등) 또한 Undo, Tablespace 등 Oracle의 개념을 많이 수용하고 있다.

사용 정책의 경우 듀얼 라이선스 정책을 취하고 있는데 GNU GPL이면서도 상업적인 용도로 판매 가능하다.

InnoDB는 MyISAM 대비 동시처리에 효과적인 구조로 되어 있다. 예를 들어 MyISAM은 Table과 Index를 각각 다른 파일로 관리하는데 반해 InnoDB는 Tablespace 개념을 사용한다. 

[ MyISAM의 각 테이블 별 파일 ]

  • *.frm : 테이블 정의 파일
  • *.MYD : 테이블 데이터 파일
  • *.MYI : 테이블 인덱스 파일

3-2. 단점

물론 장점만 있는 것은 아니다. InnoDB는 더욱 많은 메모리와 디스크를 사용한다. 또한 데이터가 깨졌을 때  단순 파일 백업/복구만으로 처리가 가능한 MyISAM과 달리 InnoDB의 경우 복구 방법이 어렵다. MyISAM이나 Memory 방식이 지원하지 않는 FK의 경우도 테이블 간 데이터 체크로 인한 lock, 특히 dead lock이 발생할 가능성이 있다.

3-3. 설정

만약 MySQL 5.5 이상에서 MyISAM 방식을 사용하고자 한다면 다음과 같이 한다.

  • my.cnf에서 default-storage-engine=myisam 설정
  • 기동 시 --default-storage-engine 옵션 사용
  • 현재 세션만 적용하고 싶다면 "SET default_storage_engine=" 사용

3-4. 성능

  • innodb_flush_log_at_trx_commit : Commit 로그에 대한 디스크 플러스 발생 시점 결정, 간격을 늘이면 성능 향상을 기대할 수 있다. 단, 트랜잭션 유실 가능성도 커진다.

3-5. 기타

  • Percona의 경우 XtraDB라는 Engine을 자체 개발하여 InnoDB를 대체하여 사용하고 있다. XtraDB는 Percona가 아닌 MySQL에서 사용할 수 있도록 독립적인 Engine으로 제공되기도 한다. MariaDB 역시 Percorna의 XtraDB를 내장하고 있다.여담이지만 Percona의 기술지원 수준이 높고 XtraDB를 개발했다는 점 등을 들어 엔터프라이즈급에서는 MariaDB보다 인기가 있다..고 할 수도 있다.
  • MVCC는 Multi Version Concurrency Control의 약자로 Snapshot과 유사한 개념으로 lock을 사용하지 않는 일관된 읽기를 통해 동시성을 높이는데 주 목적이 있다. InnoDB의 경우 MVCC 구현을 위하여 Undo Log를 이용한다.

4. 기타 Storage Engine

한편 MyISAM, InnoDB 이외에도 Archive, BerkleyDB 등을 사용할 수 있다.