1. 주요 스토리지 엔진의 특징
|
MyISAM |
InnoDB |
Archive |
스토리지 제한 |
256TB |
64TB |
None |
트랜잭션 |
No |
Yes |
No |
Locking 레벨 |
Table |
Row |
Row |
인덱스 |
B-Tree |
B-Tree |
No |
Cache |
Index |
Data/Index |
No |
파티셔닝 |
Yes |
Yes |
Yes |
Cluster Index |
No |
Yes |
No |
Foreign Key |
No |
Yes |
No |
MyISAM
1. MySQL에서 가장 오래된 스토리지 엔진
2. 파일 기반 스토리지 엔진이며 데이터에 대한 키(인덱스)만 메모리에 올려서 처리
3. 트랜잭션을 지원하지 않고 Table Level Lock으로 데이터 변경을 처리
4. Fulltext Indexing(텍스트 전문을 검색), Geometric Spatial Indexing(지리 정보를 처리) 제공
- 단 위의 Index를 사용하면 테이블 파티셔닝을 사용할 수 없음
5. Prefix 인덱스 압축 기법으로 키 사이즈를 줄임
InnoDB
1. MySQL에서 유일하게 트랜잭션을 지원함(일반적인 서비스에서 가장 많이 사용)
2. MVCC(다중 버전 동시성 제어) mechanism을 제공
3. Row Level Lock으로 데이터 변경을 처리
4. 인덱스와 데이터를 모두 메모리에 올림
- 메모리 버퍼 크기가 DB 성능에 큰 영향을 줌
5. Primary Key가 Cluster Index로 구성 됨
- Primary Key가 정의 되지 않으면 Unique Key가 Cluster Index로 구성 되고, 둘다 정의 되지 않으면 내부적으로 6바이트 크기의 키를 만들어서 Primary Key로 사용함
6. Primary Key 외의 Index는 Primary Key를 값으로
Archive
1. 로그 수집에 적합
2. 데이터가 메모리상에서 압축되고 압축된 상태로 디스크에 저장됨
- Row Level Lock 가능
3. 한번 INSERT 된 데이터는 UPDATE, DELETE를 사용할 수 없음
4. 트랜잭션이 크게 중요하지 않은 통계나 로그 분석 서비스의 기초 데이터(원시 데이터) 수집에 적합
2. 쿼리 연산
1. SQL을 병렬 처리 하지 않음(3rd Party 스토리지 엔진을 설치하여 병렬 처리 가능)
- CPU 코어 개수를 늘리는 Scale-Out 보다는 단위 처리량이 좋은 CPU로 Scale-Up 하는 것이 좋음
2. Join은 Nested Loop Join으로만 처리
- 내부적으로 Block Nested Loop Join(조인 버퍼 개념)으로 처리