필요 지식
- InnoDB는 레코드 기반 저장구조
- RID (page #, slot #) 를 통해 레코드 접근
- B-tree 기반 클러스터링 인덱스
- Secondary Index는 PK를 참조함
- 레코드 기반 잠금을 지원하지만 실제 물리적 잠금은 인덱스에 걸림
트랜잭션의 성질
A: Atomicity
C: Consistency
I: Isolation
D: Durability
참고: CAP 이론
참고: Eventual Consistency
참고: NoSQL의 특성
트랜잭션과 Serial Schedule
- 가장 쉽게 ACID를 지원하는 방법은?
- 한 번에 하나씩의 트랜잭션만 실행
Serial Schedule
새 트랜잭션 A, B, C가 있을 때 한 번에 하나씩 실행했을 때 가능한 결과들의 집합 -> 3!
Serializable
실제 데이터베이스의 트랜잭션 결과가 Serial Schedule의 부분집합인 경우 Serializable이라고 함
Lock 없이 트랜잭션이 가능할까?
Transaction에서 발생할 수 있는 문제들
Lost Update Problem
- 두 개의 트랜잭션이 동시에 한 아이템의 데이터를 변경했을 때 발생하는 문제점
- 트랜잭션을 지원하는 데이터베이스에서는 발생하면 안됨
(P1) Dirty Read Problem
(P2) Non-repeatable Read Problem
(P3) Phantom Read Problem
Transaction Isolation Level
ANSI SQL (SQL92)
MVCC
Repeatable Read
Read Committed
Read Uncommitted
Serializable
기타
분산 환경에서의 트랜잭션
2 PC
MySQL과 2PC
팀 토의
로그를 먼저 남기고 disk에 나중에 남긴다. 언제 남기지?
로그에 차면 남긴다?
DB WAL(write ahead) 전략
shared memory와 buffer는 다른가?
버퍼는 wal을 하기 위해 로깅을 하기 위해
로깅이 무조건 디스크에 적히는게 아니다.
recovery
lock
x-lock은 내가 독점
s-lock은 쓰기만 내가 독점
그러면 x-lock 왜씀?
mysql은 repeatable read