MySQL InnoDB와 MyISAM

Gemini·2022년 8월 14일
0
post-thumbnail

Amazone RDS에서 MySQL instance를 생성할 때 아래와 같은 문구가 있다.

InnoDB와 MyISAM간 어떤 차이가 있길래 InnoDB 엔진에서만 자동 백업을 지원할까? 궁금해서 찾아봤다.


InnoDB

InnoDB는 사용자의 데이터를 보호하고 내결함성을 제공하는 commit, rollback 및 충돌 복구 기능과 같은 기능을 갖춘 MySQL용 transaction-safe (ACID 호환)스토리지 엔진이다.
row-level locking을 사용하며 non-locking 읽기 방식으로 다중 사용자의 동시성과 성능을 향상시킨다.

InnoDB는 일반 쿼리에 대한 I/O를 줄이기 위해 Primary key를 기반으로 클러스터형 인덱스에 사용자 데이터를 저장한다. 또한 데이터 무결성을 유지하기 위해 Foreign key 참조 무결성 제약 조건도 지원한다.

MyISAM

MyISAM은 My Indexed Sequential Access Method의 약어로 웹, 데이터 웨어하우징 및 기타 분석 환경에서 자주 사용된다.
MyISAM 스토리지 엔진은 모든 MySQL 구성을 지원한다.
2009년 12월까지 기본 스토리지 엔진이었으며, 이후 InnoDB로 기본 엔진이 변경되었다.
ISAM 알고리즘을 기반으로 하며 대용량 데이터에 빠르게 응답한다.
MyISAM은 최소한의 데이터에 대한 이력을 가지므로 데이터 웨어하우징 및 웹 애플리케이션에 더 적합하다.


MyISAM vs InnoDB

이제 MyISAM과 InnoDB에 대해 기본적인 이해를 가졌으니 두 엔진의 차이점을 알아보자.

Engine Type

MyISAMnon-transactional 스토리지 타입이며 롤백이 필요한 경우 수동으로 처리해야 한다.

InnoDBtransaction 스토리지 타입으로 쓰기가 처리되지 않을 경우 자동으로 롤백된다.

Locking

MySQL의 locking은 두 사용자가 하나의 행을 동시에 수정하는 것을 방지하기 위해 테이블을 잠구는 메커니즘으로 race condition을 방지하기 위해 사용된다.

MyISAM은 기본적인 table locking method를 사용하고 단일 세션에서 테이블을 수정할 수 있도록 한다. 즉 하나의 사용자만 테이블을 바꿀 수 있다. 만약 다른 사용자가 테이블을 바꾸려 시도한다면, 테이블이 잠겼다는 응답을 받게 된다. table locking method는 많은 메모리를 요구하지 않기 때문에 읽기 전용 데이터베이스에 유용하다.

InnoDB는 테이블의 row-level locking method를 사용한다. 이 메서드는 수정 프로세스에서 테이블의 행만 잠그는 방식으로 동일한 행에 다중 세션 접근을 지원한다. row-level locking은 다중 사용자가 접근하는 데이터베이스에 유용하다. 다만 많은 메모리를 필요로 하며, 조회와 데이터 수정에 대해 시간이 걸린다는 단점이 있다.

Foreign Key

외래 키는 테이블 데이터를 다른 테이블에 연결하는 열로, 두 데이블 간 연결된 내용과 다른 레코드를 추가하는 것을 방지한다.

MyISAM은 외래 키를 지원하지 않는다. 하지만 InnoDB는 외래 키를 지원한다.

ACID properties

ACID는 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)의 약자로 데이터베이스 transaction이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리킨다.

MyISAM은 ACID 성질을 지원하지 않지만 InnoDB는 지원한다.

성능

InnoDB는 rollbacks, commit 등 transaction 속성을 지원하고 쓰기 속도가 빠르다. InnoDB은 대용량 데이터에서 MyISAM보다 좋은 성능을 갖는다.

MyISAM은 trasaction 속성을 지원하지 않고 읽기 속도가 빠르다. InnoDB와 비교해 보면 대용량 데이터에서 성능이 떨어진다.

Reliability

InnoDB는 transaction log를 사용해 모든 작업을 기록하므로 신뢰할 수 있다. 따라서 장애 발생 시 로그를 사용해 빠르게 복구할 수 있다.

MyISAM은 데이터 무결성을 제공하지 않는다. 하드웨어 오류 및 취소된 작업으로 인해 데이터가 손상될 수 있다.

Caching and Indexing

InnoDB는 큰 버퍼 풀을 지원해 데이터와 인덱스를 캐싱할 수 있다. 하지만 full-text search에는 지원하지 않는다.

MyISAM의 버퍼는 인덱싱 전용이다. 또한 full-text search를 지원한다.


Conclusion

InnoDB는 장애 발생 시 로그를 통해 복구를 할 수 있지만, MyISAM은 안정적인 장애 복구를 지원하지 않으며, 테이블이 손상될 수 있기 때문에 RDS(MySQL)에서 InnoDB만 자동 백업을 지원한다는 것을 알 수 있다.

profile
백엔드 개발자입니다.

0개의 댓글