여러 클라이언트가 같은 데이터에 접근할 때 문제가 발생한다.
트랜잭션을 서로 격리해서 다른 트랜잭션이 영향을 줄 수 없도록 한다.
동시성 관련 다양한 문제들
- 커밋되지 않은 데이터 읽기 (dirty read)
- 커밋되지 않은 데이터 덮어쓰기 (dirty write)
- 읽는 동안 데이터 변경 1
- read skew : 읽는 시점에 따라 데이터 변경- 읽는 동안 데이터 변경 2
- 한 트랜잭션의 결과가 다른 트랜잭션의 쿼리 결과에 영향- 변경유실 (lost update)
- 같은 데이터를 쓸 때 발생
Read Uncommitted
Read Committed
구현 -> 커밋된 값과 트랜잭션 진행 중인 값을 따로 보관
구현 -> 행(record) 단위 잠금(lock) 사용해서 같은 데이터를 수정하는 트랜잭션이 끝날 때 까지 대기
Repeatable Read
구현 -> MVCC(Multi-Version Concurrency Control)
읽는 시점에 특정 버전에 해당하는 데이터만 읽음
Serializable
참고
https://www.youtube.com/watch?v=poyjLx-LOEU
https://medium.com/@10x.developer.kr/db-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B2%A9%EB%A6%AC-%EC%88%98%EC%A4%80-%EA%B7%B8%EB%A6%BC%EA%B3%BC-%EC%98%88%EC%8B%9C%EB%A1%9C-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1%ED%8E%B8-5bef68de8b7b