InnoDB란
MySQL이 5.5 버전부터 기본적으로 사용하는 스토리지 엔진
※ 원래는 MyISAM이 기본 엔진이였다.
InnoDB의 특징
외래 키 지원 => 데이터 베이스에서 참조 무결성 보장
※ MyISAM은 외래키를 지원하지 않음(애플리케이션 레벨에서, 직접 수정해야함)
레코드 수준의 잠금
(Row-level Locking) 지원 [record = row] (레코드 자체를 잠그는 거시 아니라, 인덱스의 레코드를 잠금)
UPDATE crew SET 좋아하는 크루 = '레모네' WHERE 분야 = 'BE' (분야가 BE인 레코드 모드 잠김)
만약 설정하지 않고 full scan 시 모두 잠김 => index를 잘 설계해야 한다.
※ MyISAM은 테이블 수준의 잠금을 지원(동시성, 병목 현상 발생 가능성 높음)
ACID를 보장하는 트랜잭션 지원
Atomicity: Undo Log, Redo Log
Undo Log: 변경하기 이전의 값을 기록, 롤백 시 변경하기 전 값 복구 가능
Redo Log: 커밋되기 전에 변경된 모든 사항을 기록, 트랜잭션이 실패하면 이 값으로 복구
디스크에 위치해 있어 영구적으로 기록 MySQL 서버 장애 발생 시 마지막 커밋 상태 복구 가능
Isolation: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 행 수준 잠금, MVCC(Multi-Version Concurrenct Control)
MVCC(Multi-Version Concurrenct Control): 하나의 레코드에 대해 여러개의 버젼을 관리한다 => 잠금을 걸지 않고도 한 트랜잭션 내에 항상 같은 결과를 볼 수 있다.
그 외(공부 할 것)
프라이머리 키를 클러스터링 인덱스로 사용
버퍼 풀을 사용하여 디스트 I/O 최소화 및 읽기/쓰기 성능 향상
자동 데드락 감지
자동화된 장애 복구
어댑티드 해시 인덱스
'CS지식' 카테고리의 다른 글
스피링 부트 내장 톰캣 (0) | 2024.10.17 |
---|---|
락 (2) | 2024.10.10 |
Nginx vs APACHE (1) | 2024.10.08 |
DB Index (0) | 2024.10.08 |
Cache & Redis (0) | 2024.10.07 |