[MySQL] Storage Engine - InnoDB

shinny·2024년 7월 14일

MySQL의 파일 시스템 > 데이터 디렉터리의 하위 디렉터리로 각 데이터베이스를 저장한다. 그래서 테이블을 생성하면, MySQL은 테이블 이름과 같은 이름을 가진 .frm 파일을 만들고, 그 안에 테이블 정의 정보를 저장하게 된다. (보니까, 8.0 버전부터는 .frm 파일을 생성하지 않고, .ibd만 생성된다.)

MySQL에는 여러 가지 스토리지 엔진이 있는데, 그 스토리지 엔진에 따라서 테이블 데이터와 인덱스를 저장하는 방식이 다르다.

SHOW TABLE STATUS LIKE 'content';

위 명령어를 사용하면, content 테이블의 정보를 확인할 수 있다.
그리고 어떤 Engine을 사용하는지도 확인할 수 있다.

MySQL 스토리지 엔진의 종류는 다음과 같다.

  • InnoDB 엔진
  • MyISAM 엔진
  • Memory 엔진
  • Archive 엔진
  • CSV 엔진
  • Federated 엔진

InnoDB 엔진

InnoDB 엔진은 가장 많이 사용되는 Storage Engine으로서, ACID(원자성, 일관성, 격리성, 지속성) 트랜잭션을 지원하는 대표적인 엔진이다. 뛰어난 성능과 장애 복구 기능을 가지고 있기 때문에, 정보의 무결성이 중요한 데이터일 때 InnoDB 엔진을 사용한다.

특징

Primary Key(기본 키)에 의한 클러스터링

InnoDB 엔진의 테이블은 클러스터 인덱스 위에 구성되어 있고, 다른 MySQL 스토리지 엔진과는 다른 인덱스 구조를 가진다. 모든 테이블은 프라이머리 키를 기준으로 클러스터링되고, 키 값 순서대로 디스크에 저장되기 때문에 기본 키 조회가 빠르고, range 스캔 등이 빠르게 처리되는 장점이 있다.

잠금이 필요 없는 일관된 읽기

MVCC(Multi Version Concurrency Control) 기술을 사용해서, 락 없이도 읽기 작업이 가능하다. 그래서 InnoDB에서는 락 없이 조회할 경우, Dirty Reads 문제가 발생할 수 있다. 하지만 InnoDB에서 Isolation Level 디폴트 값은 Repeatable Read이기 때문에, Dirty Reads(커밋되지 않은 데이터가 조회되는 것), Non-Repeatable Reads(동일한 트랜잭션 내에서 다른 값을 조회하게 되는 것)는 해결되고 실제로는 Phantom Reads가 발생 가능하다.

이외에도 외래키 지원, 자동 데드락 감지, 자동화된 장애 복구, 오라클의 아키텍처 적용 등의 특징이 있다.

MyISAM 엔진

트랜잭션을 지원하지 않기 때문에 InnoDB보다 빠르지만, 동시성 제어는 어렵다.
전문(full-text) 인덱싱, 압축, 공간 함수 등 여러 유용한 기능을 제공한다.
MyISAM은 테이블 정보를 데이터 파일과 인덱스 파일 두 곳에 저장하는데, 이 두 파일의 확장자는 각각 .MYD, .MYI이다.

Reference

  • MySQL 스토리지 엔진 종류 및 특징(링크)
profile
꾸준히, 성실하게, 탁월하게 매일 한다

0개의 댓글