Database/SQL

MySQL - MyISAM, InnoDB 등 스토리지 엔진

JaeHoney 2020. 9. 22. 23:16

 

스토리지 엔진이란?

 

MySQL두 가지 형태의 엔진이 존재합니다.

 

서버엔진
- 클라이언트의 요청을 받고 SQL문들을 처리하는 DB 자체의 기능 역할
- DB가 SQL문들을 이해할 수 있도록 쿼리를 파싱, 물리적 저장장치와 통신
- 디스크와 직접적인 접근을 제외한 대부분의 역할 수행


스토리지 엔진
- 서버 엔진이 필요한 데이터를 물리적인 장치에서 가져오는 역할
- 물리적 저장장치에서 데이터를 읽어오는 역할을 수행하고 플러그인 방식으로 스토리지 엔진을 필요에 따라 더 추가하거나 삭제


즉, 서버 엔진은 클라이언트로부터 요청을 처리하는 커넥션 핸들러, SQL 파서, 전처리기, 최적화된 실행을 위한 옵티마이저 등이 주를 이루고, 스토리지 엔진은 SQL문 자체를 분석하거나 최적화하고 데이터를 읽어오는 부분을 맡습니다.

 

MySQL에서 서버엔진은 하나지만 스토리지 엔진은 여러 개를 동시에 사용할 수 있고, 테이블사용할 스토리지 엔진을 지정하면 이후 해당 테이블의 모든 읽기 작업이나 변경 작업은 해당 스토리지 엔진이 처리하므로 상황에 맞는 스토리지 엔진을 선택하는 것이 중요합니다.

 

 

스토리지 엔진의 종류, 장단점

 

 

스토리지 엔진의 종류는 매우 다양합니다. 그래서 실무에서 주로 사용하는 두 가지에 대해서만 기술하려 합니다.

 

# MyISAM

 

1. 특징

 - MySQL의 기본 스토리지 엔진

 - 데이터를 매우 효율적으로 저장하고 데이터 저장에 실제적인 제한이 없음

 - 트랜잭션은 지원하지 않습니다

 - 테이블 레벨의 락을 지원 (안전하지만, 작업시 특정행을 수정하려고 하면 테이블 전체에 락이 걸려서 다른사람이 작업할수없다)

 - 백업, 복구 지원

 

2. 장단점

 2.1) 장점

   - 데이터 모델이 단순하고 직관적

   - 속도가 빠름

   - Full Text 인덱싱이 가능해서 복합 검색이 가능함

 2.2) 단점

   - 테이블 전체에 락을 걸기 때문에 갱신이 많은 시스템에서는 불리함 (Insert, Update, Delete)

   - 트랜젝션을 지원하지 않으므로 무결성이 보장되지 않음

 

3. 적합한 프로젝트

 - 트래픽이 많은 웹

 - 정적인 Table

 - Select 위주의 테이블

 - 갱신을 자주 하지 않는 시스템

 

 

# InnoDB

 

1. 특징

 - ACID 트랜잭션 지원

 - 데이터 로드 속도가 느림

 - 데이터 압축이 불가능

 - 백업, 복구 지원

 - 테이블 레벨이 아닌 ROW 레벨의 락을 지원

 - 외래키 지원

 - 자동 에러 복구

 

2. 장단점

 2.1) 장점

   - 트랜젝션을 통한 데이터 무결성이 보장

   - 제약조건, 외래키 생성 가능

   - 장애를 자동으로 복구할 수 있음

   - Row 레벨 락을 사용하기 때문에 Insert, Update, Delete 속도가 빠름

 

 2.2) 단점

   - 기능이 많아서 데이터 모델에 큰 노력 필요

   - 시스템 자원을 많이 사용함

   - Full Text 인덱싱이 안됨


 3. 적합한 프로젝트

 - 데이터 입력 및 수정이 잦은 시스템에서 적합

 - 온라인 트랜젝션을 지원하는 시스템

 - 보안성이 요구 되는 테이블 (트랜젝션이 가능하기 때문)

 - 대량의 Table

 

마무리

 

실무에서는 대부분 위 두가지 중 적절한 스토리지 엔진을 선택합니다. 기본 엔진으로 InnoDB를 선택하되, 추가처리를 할때만 MyISAM을 사용하는 식으로 사용되기도 합니다. 하지만 하나의 서버에 두 가지를 혼용한다면 이 두 가지는 각각 다른 메뉴얼을 사용하기 때문에 효율적인 자원 관리가 어려워 집니다.