CS/Database

[MySQL] MySQL의 스토리지 엔진 비교 (InnoDB, MyISAM, Archive)

별토끼. 2021. 8. 4. 23:14
반응형

트랜잭션을 공부하다가 InnoDB가 언급되었는데 거의 이름만 아는 수준이어서 공부를 하게 되었다. 분명 예전에 배운 것 같은데, 어디다 까먹는지 참. 포스팅해놓고 두고 두고 기억하자.

MySQL의 엔진

MySQL은 크게 서버 엔진과 스토리지 엔진 두 가지 구조로 되어있다.

 

  1. 서버 엔진
    클라이언트가 Query 요청 시, 쿼리 파싱과 스토리지 엔진 데이터를 용청하는 작업을 수행한다.
  2. 스토리지 엔진
    물리적 저장장치에서 데이터를 읽어온다.

우리가 자주 듣는 InnoDB, MyISAM 등이 여기에 속한다. 스토리지 엔진은 데이터를 직접 다루기 때문에 엔진 종류마다 동작 원리가 다르다. 어제 포스팅했던 트랜잭션이나 성능 이슈와 밀접하기 때문에 꼭! 잘! 알아둬야 한다.

스토리지 엔진의 종류

엔진의 종류는 8가지나 있는데 어차피 모두 다 기억하진 못하므로, 도큐멘트( https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html )를 참고하자. 일단, 자주 사용하고 들었던 InnoDB, MyISAM, Archive 를 이해해보자.

InnoDB

  • 복잡하다
  • default 스토리지 엔진이다.
  • transaction-safe하고, 커밋과 롤백, 데이터 복구 기능을 제공한다.
  • row-level locking을 제공 (외에도 다양한 종류의 lock이 있긴하다)
  • 동시 처리에 효과적이나, deadlock이 발생할 수 있다. (참고 영상 : https://www.youtube.com/watch?v=FXzBRD3CPlQ&t=263s )
  • clustered index에 저장하여 Primary Key 기반의 query의 I/O 비용을 줄인다.
  • 외래키를 허용해 무결성을 보장.
  • 단순 select 기능에서는 MyISAM에 비해 안좋은 성능을 보인다.

MyISAM

  • 간단하다
  • 트랜잭션을 지원하지 않는다.
  • table 단위로 locking을 제공하여 멀티 스레드 환경에 부적합하다
  • 읽기 위주의 간단한 작업에 적합
  • 대량의 insert를 하는 배치 작업에 적합
  • 비교적 작은 웹에도 적합하다.

Archive

  • 로그 수집, 원시 로그 데이터 관리에 적합한 엔진
  • 메모리 상에서 압축된 상태로 저장
  • row-level locking이 가능
  • 한번 insert된 데이터는 update나 delete가 불가능
  • 인덱스 지원 안함
  • 테이블 파티셔닝 지원
  • 트랜잭션은 지원하지 않는다.

출처
https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-configurable
http://asuraiv.blogspot.com/2017/07/mysql-storage-engine.html
https://stackoverflow.com/questions/3818759/what-is-innodb-and-myisam-in-mysql

반응형