InnoDB 스토리지 엔진 소개
InnoDB 스토리지 엔진 소개
MySQL을 한 번이라도 써 봤다면 어디선가 들었을 이름, InnoDB예요. MySQL 8.4에서 InnoDB는 기본(default) 스토리지 엔진이라서, 별도로 다른 엔진을 지정하지 않았다면 CREATE TABLE 문장에 ENGINE 절이 없어도 InnoDB 테이블이 만들어져요. 높은 신뢰성과 높은 성능을 동시에 잡으려는 범용 스토리지 엔진이죠. InnoDB가 뭘 잘하는지, 어떤 특징을 갖고 있는지 중심으로 살펴볼게요.
출처: https://dev.mysql.com/doc/refman/8.4/en/innodb-introduction.html
InnoDB의 핵심 장점
InnoDB의 장점은 크게 네 가지로 정리할 수 있어요.
- ACID 모델을 따르는 DML — InnoDB의 데이터 조작(INSERT·UPDATE·DELETE)은 ACID를 지키며, 트랜잭션은 커밋(commit), 롤백(rollback), 크래시 복구(crash-recovery)를 지원해서 사용자 데이터를 보호해요.
- 행 단위 잠금과 일관된 읽기 — 행 레벨 잠금(row-level locking)과 Oracle 스타일의 일관된 읽기(consistent read) 덕분에 다중 사용자 환경에서 동시성과 성능이 좋아져요.
- 클러스터형 인덱스 기반 데이터 배치 — InnoDB 테이블은 기본 키 기준으로 데이터를 디스크에 배치해요. 각 테이블은 클러스터 인덱스(clustered index) 라는 기본 키 인덱스를 갖는데, 이게 기본 키 조회 때 I/O를 최소화하도록 데이터를 정리해 둔답니다.
- 외래 키(FOREIGN KEY) 제약 지원 — 데이터 무결성을 위해
FOREIGN KEY제약을 지원해요. 외래 키가 있으면 INSERT·UPDATE·DELETE가 관련 테이블 간 불일치를 만들지 않도록 검사돼요.
InnoDB가 기본 엔진인지 확인하기
직접 확인해 보고 싶다면 SHOW ENGINES 문장을 실행하면 돼요. 각 스토리지 엔진의 지원 여부와 함께 어떤 엔진이 기본값인지 출력되거든요.
SHOW ENGINES;
기본 엔진이 InnoDB로 설정돼 있는지 확인하려면 default_storage_engine 시스템 변수를 조회하면 됩니다.
SELECT @@default_storage_engine;
언제 InnoDB가 아니라 다른 엔진을 쓰나요
InnoDB가 기본이기는 하지만, 용도에 따라 다른 엔진을 고르는 경우도 있어요. 예를 들어 읽기 전용 분석 쿼리가 주를 이루는 환경이나, 특수한 저장 방식이 필요한 경우에는 성능 특성을 비교해서 선택하기도 하죠. 다만 일반적인 OLTP 워크로드에서는 InnoDB가 권장되는 안전한 선택이라는 점을 기억해 두면 좋아요.
더 알아보기
- InnoDB의 잠금과 트랜잭션 모델:
Section 17.7, "InnoDB Locking and Transaction Model" - 클러스터 및 보조 인덱스:
Section 17.6.2.1, "Clustered and Secondary Indexes" - 외래 키 제약:
Section 15.1.20.5, "FOREIGN KEY Constraints" - ACID 모델:
Section 17.2, "InnoDB and the ACID Model"