책너두 (데이터 중심 애플리케이션 설계) 24일차 (~272p)
- Book/데이터 중심 애플리케이션 설계
- 2023. 4. 10.
요약
- 트랜잭션의 완화된 격리 수준 중 하나인 직렬성 스냅숏 격리에 대해 이해하게 됨.
- 직렬성 격리와 좋은 성능을 공존할 수 있는 방법임.
- 낙관적 동시성 제어 기법으로 볼 수 있고, 스냅숏 격리를 기반으로 함.
- SSI 는 쓰기 스큐를 처리하기 위해
뒤처진 전제에 기반한 결정
을 이용한다.- 오래된 MVCC 읽기 감지
- 과거의 읽기에 영향을 미치는 쓰기 감지
- 직렬성 스냅숏 격리는 트랜잭션 상세 동작 추적시 오버헤드 발생함.
- 2단계 잠금과 달리 잠금을 기다리지 않아도 되기에 빠름
- 단일 CPU 코어 처리량에도 제한되지 않으므로 여러 파티션으로부터 읽고 쓸 수 있음.
메모
직렬성 스냅숏 격리(SSI)
- 직렬성 격리와 좋은 성능을 공존할 수 있는 방법임
- 이 알고리즘 (Serializable Snapshot Isolation, SSI)은 최근에 등장함.
- 오늘날에 SSI는 단일 노드 데이터베이스(포스트그레스큐엘)와 분산 데이터베이스(파운데이션DB) 모두에 사용됨.
- 역사가 짧지만, 미래에 새로운 기본값이 될 정도로 충분히 빨라질 가능성이 있음.
비관적 동시성 제어 대 낙관적 동시성 제어
- 2단계 잠금은 비관적 동시성 제어 메커니즘임.
- 트랜잭션을 기다린다.
- 반대로
직렬성 스냅숏 격리
는 낙관적 동시성 제어 기법임.- 트랜잭션을 기다리지 않도록 허용한다.
- 예비 용량이 충분하고 트랜잭션 경쟁이 너무 심하지 않으면 낙관적 동시성 제어 기법이 비관적 동시성 제어보다 성능이 좋은 경향이 있음.
- SSI 는 스냅숏 격리를 기반으로 하므로, 모든 읽기는 데이터베이스의 일관된 스냅숏을 보게됨.
- 낙관적 동시성 제어 기법과 크게 다른 점임.
뒤처진 전제에 기반한 결정
- 쓰기 스큐의 경우 스냅숏 격리하에서는 트랜잭션이 커밋되는 시점에 원래 질의의 결과가 더이상 최신이 아닐 수 있음.
- 도중에 데이터가 변경됐을 수 있음. ex) 호출 대기 의사 수
- 트랜잭션은 어떤 전제를 기반으로 어떤 동작을 한다.
- 즉, 트랜잭션에서 실행하는 질의와 쓰기 사이에는 인과적 의존성이 있을 지도 모름.
- 트랜잭션이 뒤처진 전제를 기반으로 동작하는 상황을 감지하고 그런 상황에서는 트랜잭션을 어보트 시켜야 함.
- 데이터베이스가 질의 결과가 바뀌었는지 알려면 다음 두 가지 상황을 고려해야 함.
- 오래된 MVCC 객체 버전을 읽었는지 감지하기
- 과거의 읽기에 영햐을 미치는 쓰기 감지하기
오래된 MVCC 읽기 감지하기
- 트랜잭션 MVCC 가시성 규칙에 따라 다른 트랜잭션의 쓰기를 무시하는 경우를 추적해야 함.(p263 예시 참고)
- 트랜잭션이 커밋하려고 할 때, 데이터베이스는 무시된 쓰기 중에 커밋된 게 있는지 확인해야하고, 커밋된 게 있다면 트랜잭션은 어보트되야 함.
- SSI는 불필요한 어보트를 피해서 일관된 스냅숏에서 읽으며 오래 실행되는 작업을 지원하는 스냅숏 격리의 특성을 유지한다.
과거의 읽기에 영향을 미치는 쓰기 감지하기
- 트랜잭션이 데이터베이스에 쓸 때, 영향받는 데이터를 최근에 읽은 트랜잭션이 있는지 색인에서 확인해야 함.
- 영향받는 키 범위에 쓰기 잠금을 획득하는 거랑 비슷한 동작이지만, 읽는 쪽에서 커밋될 때까지 차단하지 않음.
- 즉, 트랜잭션이 읽은 데이터가 더 이상 최신이 아니라고만 트랜잭션에게 알려줄 뿐임.
- p264 예시 참고
직렬성 스냅숏 격리의 성능
- 데이터베이스가 트랜잭션의 동작을 매우 상세하게 추적하면 어보트돼야 하는 트랜잭션을 정확히 판별할 수 있음.
- 하지만 기록 오버헤드가 심해질 수 있음.
- 직렬성 스냅숏 격리는 2단계 잠금과 비교해서, 잠금을 기다리느라 차단될 필요가 없는 점이 이점이었음.
- 순차실행과 비교하면 직렬성 스냅숏 격리는 단일 CPU 코어 처리량에 제한되지 않음.
- 즉, 데이터가 여러 장비에 걸쳐서 파티셔닝돼 있더라도 트랜잭션은 직렬성 격리를 보장하면서 여러 파티션으로부터 읽고 쓸 수 있음.
'Book > 데이터 중심 애플리케이션 설계' 카테고리의 다른 글
책너두 (데이터 중심 애플리케이션 설계) 26일차 (~298p) (0) | 2023.04.20 |
---|---|
책너두 (데이터 중심 애플리케이션 설계) 25일차 (~284p) (0) | 2023.04.18 |
책너두 (데이터 중심 애플리케이션 설계) 23일차 (~259p) (0) | 2023.04.10 |
책너두 (데이터 중심 애플리케이션 설계) 22일차 (~250p) (0) | 2023.04.08 |
책너두 (데이터 중심 애플리케이션 설계) 21일차 (~245p) (0) | 2023.04.07 |