[Mysql아키텍쳐3] InnoDB특징/MyISAM특징
내부적으로 어떻게 작동는지 이해하기
출처 RealMysql 서적을 기반으로 이해한 내용 정리
1.InnoDB 스토리지 엔진 특징
1) 트랜잭션 지원 -> 데이터 무결성 보장
트랜잭션 위주로 진행되기 때문에 ACID특징을 보장함(커밋/롤백지원)
그래서 데이터의 일관성,정확성이 높다.
https://pearlluck.tistory.com/17
2) 동시성 수준 높음 -> Row-level의 LOCK기능
클라이언트들이 같은 데이터를 사용하게 되면, 테이블 전체가 아니라 수행하는 ROW 단위에 대해서만 락을 건다.
그래서 여러 클라이언트가 동시에 사용할 수 있는 동시성이 높음
특정 ROW에 업데이트가 일어나면 그 ROW만 잠김
그래서 A클라이언트가 수정하는 동안 B클라이언트는 같은 테이블의 다른 행에 접근할 수 있음
3) INSERT/UPDATE/DELETE 속도가 빠름
Innodb구조 중 버퍼풀안에 캐시저장소가 있음
그리고 버퍼링 작업으로 변경된 데이터를 모아놨다가 일괄적으로 디스크영역에 접근하는 방식
그래서 디스크 영역에 접근하는 IO가 줄어서 읽기 작업보다 쓰기작업에 더 유용
*SELECT는?
InnoDB의 내부모델이 복잡해서 읽는 작업은 더 간단한 MYISAM이 더 빠르다.
4) 자동복구 가능
백업기능을 하는 Undo로그로 비정상종료시 자동으로 복구가능
5) MVCC(Multi Versioning Concurrency Control) 기능 제공
격리수준에 따라서 읽기 내용이 바뀌는 경우가 있다.
디폴트값은 repeatable Read방식으로 커밋된 데이터만 읽는다.
그래서 동시성과 일관성을 보장
++ MVCC와 고립수준
6) 클러스터드 인덱스 지원
PK기준으로 자동으로 묶어서(클러스팅되어서) 저장하는 방식
즉, PK값의 순서대로 정렬이 된 상태로 디스크에 저장되기 때문에 PK로 스캔하면 검색속도가 빠르다.
++인덱스방식 추가
7) 사용 : 데이터무결성/일관성이 중요하고, 데이터 쓰기작업(INSERT/UPDATE/DELETE)위주 작업
2. MYISAM구조
1) 트랜잭션 지원X -> 데이터 무결성 보장X
데이터의 일관성,정확성이 떨어져서 부분업데이트가 발생할 수 있음
2) 동시성 수준 낮음 -> Table-level의 LOCK기능
클라이언트들이 같은 데이터를 사용하게 되면, Table단위에 대해서 락을 건다.
그래서 여러 클라이언트가 동시에 사용할 수 있는 동시성이 낮아짐
특정 ROW에 업데이트가 일어나도 그 ROW 뿐만 아니라 테이블 전체가 잠김
그래서 A클라이언트가 수정하는 동안 B클라이언트는 같은 테이블 전체에 접근할 수 없음
3) SELECT 속도가 빠름
키캐시만 가지고 있는 간단한 구조이기 때문에 SELECT 작업 속도가 굉장히 빠름
*INSERT/UPDATE/DELETE는?
InnoDB처럼 디스크 영역에 접근하는 IO를 줄일 수 있는 방법이 없음
그래서 쓰기 작업보다 읽기 작업에 더 유용
4) 자동복구X
백업기능을 하는 Undo로그 없음, 비정상종료시 데이터가 파손될 가능성이 있음
5) B+트리 지원
클러스터드 인덱스랑 트리구조는 같은데 단말노드에 데이터가 없음
6) 사용 : 트랜잭션이 불필요하고, 읽기위주(SELECT)작업