본문 바로가기

데이터베이스(DA, AA, TA)/MySQL

[MySQL] 적절한 스토리지엔진 선택

RDBMS(Relational Database Management System)는 표 형식으로 데이터를 저장하고 대부분은 SQL 언어로 데이터 조작을 수행하는 시스템입니다. 다양한 데이터를 저장한다거나 강력한 질의를 할 수 있어서 가장 범용성이 높은 스토리지입니다.


RDBMS의 오픈소스 구현은 MySQL이나 PostgreSQL 등이 있으며, 두 다 실제 운용환경에서 널리 사용되고 있습니다. 많은 기업에서 MySQL을 범용 스토리지로 사용하고 있습니다. RDMBS 종류마다 각기 특성이 있는데, 최근에는 기능적, 성능적으로 팽팽하게 경쟁하고 있으니, 지금까지 축적된 노하우 등을 기준으로 선택하면 됩니다.


MySQL 주요 스토리지 엔진에는 MyISAM과 InnoDB, Maria가 있습니다.


MyISAM

MyISAM은 MySQL 5.1의 표준 스토리지 엔진으로 되어 있습니다. MyISAM은 심플한 구조를 한 스토리지 엔진으로, 1개의 테이블이 실제 파일 시스템 상에 3개의 파일(정의, 인덱스 데이터)로 표현됩니다. 과거에 update나 delete를 한 적이 없는 테이블에 대해 insert 조작(추가처리)를 빠르게 할 수 있습니다. 또한 시작, 정지도 빠르며, 테이블 이동이나 이름변경을 파일시스템 조작으로 직접할 수 있는 등 DB 운용은 용이한 편입니다.

하지만, DB 프로세스가 비정상 종료하면 테이블이 파손될 가능성이 높다거나 트랜잭션 기능이 없고 update, delete, insert(추가처리 이외)가 테이블 락(Table Lock)으로 되어 있어서 갱신이 많은 용도로는 성능적으로 불리하다는 몇가지 단점도 존재합니다.


InnoDB

InnoDB는 MyISAM과는 대조적인 스토리지 엔진으로, 스토리지 엔진 전체에서 사전에 정의한 소수의 파일에 데이터를 저장하고, 트랜잭션을 지원하며, 비정상 종료시 복구기능이 있고, 데이터 갱신이 로우 락(Row Lock)으로 되어 있는 등 MyISAM에는 없는 장점이 있습니다. 다만 데이터량에 따라서는 시작, 정지가 수 분 정도 걸린다거나 테이블 조작을 모두 DB를 경유해서 수행해야 하는 등의 단점도 존재합니다.


Maria 등

Maria는 MyISAM의 후속으로 개발되고 있는 스토리지 엔진입니다. Maria는 MyISAM에 비해 트랜잭션 기능과 비정상 종료 시 복구기능을 추가한 것으로 MyISAM의 약점이 크게 보완되었습니다.

그 밖에도 Falcon, NDB, Heap 등 다수의 스토리지 엔진이 있으며, 각각 다양한 특징을 가지고 있습니다.


Maria vs. InnoDB

주요한 스토리지 엔진인 MyISAM과 InnoDB를 비교하여 실무에서는 적절한 스토리지 엔진을 선택합니다. 기본 엔진으로 InnoDB를 선택하고, 추가처리만 하는 경우에는 MyISAM을 사용하는 식으로 구분해서 사용하기도 합니다. 물론 절대적인 기준은 없고 case-by-case로 선택하는 경우가 많습니다. 하지만 확실한 것은 1대의 서버에 두 가지를 혼용하지 않는 것이 좋습니다. 이둘은 각기 다른 동작, 메모리 사용법을 취하므로 혼용하는 환경에서는 효율적인 CPU, 메모리 사용이 어려워집니다.



 액세스 패턴

 적합한 스토리지 엔진

 추가 처리만 한다.

 MyISAM 

 갱신빈도가 높다.

 InnoDB

 트랜잭션이 필요하다.

 InnoDB

 SELECT COUNT(*)를 사용

 MyISAM