CS지식

InnoDB

두잇 두두 2024. 10. 10. 12:41
728x90

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 최소화 및 읽기/쓰기 성능 향상

자동 데드락 감지

자동화된 장애 복구

어댑티드 해시 인덱스

 

 

참고: https://www.youtube.com/watch?v=IftfkVSzOdI