티스토리 뷰

Storage Engine



먼저 MySQL에는 크게 두 가지의 엔진이 존재한다. 하나는 서버 엔진이고 하나는 스토리지 엔진이다.


서버 엔진은 쿼리 요청이 왔을 때 쿼리 파싱(Query parsing)을 하여 스토리지 엔진에 데이터를 요청하는 작업을 한다.


스토리지 엔진물리적 저장장치에서 데이터를 읽어오는 작업을 한다.


여기서 스토리지 엔진을 중점적으로 알아보려고 한다. 스토리지 엔진이 중요한 이유는 첫째로, 트렌젝션 처리와 밀접한 관련이 있다는 것이고, 둘째로 엔진마다 동작 원리가 달라서 상황에 따라 천차만별의 성능을 보이기 때문이다.


MySQL에서 사용가능한 엔진은 여럿 존재한다. 이 글에서 중점적으로 다룰 대표적인 엔진 MyISAMInnoDB가 있고, 이 외에도 Archive, Memory, Merge, Cluster, BDB, Custom의 엔진까지 총 8가지가 존재한다. 이 다양한 엔진들 중에서 가장 대중적으로 사용되는 두 엔진을 알아보도록 하자.




MyISAM



기존의 ISAM(Indexed Sequential Access Method) 엔진을 보완하여 나온 엔진이다.



장점


엔진 자체가 아주 기본적인 기능만 제공하여 상당히 가볍다. 


검색(SELECT)작업이 상당히 빠르다.


검색하고자 하는 내용에 대한 복합검색이 가능하다.



단점


트랜잭션 세이프하지 않다. 따라서 트랜젝션을 처리하고자 한다면, 프로그래머가 코드레벨에서 처리해 주어야 한다.


쓰기 작업시 Table level locking이 걸리기 때문에 상당히 속도가 느리다.


데이터 무결성에 대한 보장이 되지 않는다. 따라서 이 또한 개발자가 무결성 조건을 만족하도록 코드를 작성해 주어야 한다.


또한 외래키의 생성이 불가능하다.




InnoDB



현재 MySQL의 기본 스토리지 엔진이다. MyISAM에 비해서 상당히 많은 기능을 제공한다.



장점


데이터 무결성을 보장해준다. 따라서 프로그래머가 신경 써주지 않아도 된다.


Row level locking으로 MyISAM보다 동시성에서 우위를 보인다. 따라서 데이터 수정 작업(UPDATE, INSERT, DELETE)에 유리하다.


트랜젝션을 지원하여, 개발자가 트랜젝션을 코드레벨에서 설정하는 부담이 적다. Commit과 Rollback을 지원하는 것이다.


장애복구, 외래키 지원 등 다양한 기능을 제공한다.



단점


많은 기능을 제공하다 보니 상당히 엔진이 무거워서 작업속도가 상대적으로 느리다.


시스템 자원을 많이 사용한다.




사용 범위






위의 두 엔진들을 보면 완전히 반대 성향을 띄고 있다. 비유를하자면 MyISAM은 메모장과 같이 아주 기본적인 기능만을 제공하는 대신 상당히 가볍다는 장점이 있고, InnoDB는 이클립스와 같은 IDE같이 다양한 기능을 제공하는 대신 복잡도가 높고 무겁다는 단점이 있다.


따라서 MyISAM의 경우는 SELECT와 같은 검색에 상당히 강력하다. 테이블 단위로 락킹이 걸리므로 동시에 여러가지 데이터 수정작업이 일어나는 테이블에 사용할 경우 상당히 성능의 저하될 우려가 크다. 따라서 정적인 데이터를 저장하고 자주 읽기 작업이 일어나는 테이블에 적합하다.


그리고 InnoDB는 다양한 기능이 있는 만큼 중요한 데이터를 다루는 테이블에 적용시키면 상당히 유용하다. 중요 데이터를 다룰 때, 무결성이 보장되고, 트랜젝션 처리가 가능하고, 오류 복구 기능을 제공하는 InnoDB는 아주 적합하다고 할 수 있다. 또한 락킹의 단위가 행단위이기 때문에 읽고 쓰는 상황이 많은 경매 테이블에 적합하다.




테이블 단위로 엔진을 다르게 적용할 수 있을까?



스토리지 엔진은 동일 DB내의 테이블마다 다르게 지정이 가능하다. 따라서 자신이 사용하는 테이블의 특성에 따라서 엔진을 달리해주어 최적화된 DB를 생성하는 것이 바람직 하겠다.




MyISAM vs InnoDB




MyISAM

InnoDB

트랜젝션

미지원

지원

외래키

미지원

지원

모델 복잡도

단순

복잡

무결성

미지원

지원

시스템 자원 사용

적음

많음

복구

미지원

지원

lock

Table level locking

Row level locking 




참고



https://idchowto.com/?p=20166

https://ojava.tistory.com/25

https://asuraiv.blogspot.com/2017/07/mysql-storage-engine.html?showComment=1538481134877#c3964286210493837866

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함