동시성, Lock, MVCC
동시성 제어 (Concurrency Control) 이란?
다중 트랜잭션의 상호간섭 작용에서 Database를 보호하는 것 (Lock이나 Transaction 격리 수준 조절을 통해 해결)
동시에 실행되는 트랜잭션 수를 최대화하면서도 입력, 수정, 삭제, 검색 시 데이터 무결성이 유지되도록 하는 데
MVCC (Multi Version Concurrency Control) 란?
MVCC는 RDBMS에서 동시성을 높이기 위해 등장한 기술로 서로 다른 Session이 동일한 데이터에 접근시, 각 세션마다 스냅샵 이미지를 보장해주는 메커니즘.
하나의 레코드에 대해 2개의 버전이 유지되고, 필요와 특정 상황에 따라 데이터가 보여지는 구조ex) RDBMS에서 쓰기(Write) 세션이 읽기(Read) 세션을 blocking하지 않고, 읽기 세션이 쓰기 세션을 blocking 하지 않음
Lock 메커니즘의 문제점은?
동시성 제어 성능 저하 발생 (동시에 수행 될 수 있는 트랜잭션 제한적)
읽기 작업과 쓰기 작업이 동시에 실행 되다보니, 서로 방해를 일으켜서, 데이터 일관성에 문제가 생길 수 있음
위 문제를 해결 하기 위해선 Lock을 더 오래 유지하거나 기준을 높여야 되고 => 동시성 저하로 이어짐
Lock 의 종류 (공유락 vs 베타락)
공유락 (Shared Lock, Read Lock)
- 트랜잭션이 조회를 할 때 사용되는 락
- 데이터 조회만 수행하기에 공유락에서는 동시 접근 가능
베타락 (Exclusive Lock, Write Lock)
- 트랜잭션이 데이터 변경시 사용되는 락
- 트랜잭션이 완료될 때까지 유지되며, 베타락 내에선 어떠한 접근도 허용 X