acid
- atomicity .. 0 or 1
- consistency 불변식
- isolation : anti concurrency
- durability : fault tolerance
isolation의 cost는 높기 때문에 적절한 단계를 사용, trade off 존재한다
- read committed
- 커밋된 데이터만 보고 쓸 수 있음
- 트랜잭션 내에서 다른 트랜잭션이 commit 되는 경우 다른 것을 볼 수 있음
- snapshot 격리 ( repeatable read )
- 현재 트랜잭션의 상위 트랜잭션(이미 commit된)만 볼 수 있음, 히스토리 기반
- 읽는 쪽에서 쓰는 쪽을 차단하지 않고, 쓰는 쪽에서 읽는 쪽을 차단할 지 않음
- 여러 버전이 존재 다중 버전 동시성 제어(mvcc)
- 그러면 언제 합치지?
- serializable snapshot lsolation(ssl) 방법을 사용해야 할 것 같다
- 색인 문제 (여러 버전 존재)
- 갱신 손실 문제
- 원자적 쓰기 연산
- 명시적 잠금
- compare and set
- 충돌 해소 및 복제
- 쓰기 스큐 유발
- 특정 조건에 만족했을 때 동시성 문제
- 해결 방안
- 충돌 구체화하기, 미리 충돌이 일어날 것 같은 케이스 잠금 select for update
- 실제 직렬 수행
- 단일 스레드 통제
- 트랜잭션 순차적 실행
- 비효율적
- 2PL
- 쓰기가 없을 경우 여러 트랜잭션 동시에 읽을 수 있지만, 쓰려고 할때는 독점적으로 접근
- 서술잠금
- 색인잠금
- 직렬성 스냅숏 격리(ssl)
- 오래된 mvcc 객체 버전을 읽었는지 감지하기
- 과거의 읽기에 영향을 미치는 쓰기 감지하기
- 충돌이 많이 발생하면 비효율적