티스토리 뷰

Database

MVCC 메커니즘

서보민 2018. 7. 26. 19:08

MVCC

MVCC (MultiVersion Concurrency Control) 이란 Write 세션이 Read 세션을 블로킹하지 않고 그 반대로 Read세션이 Write세션을 블로킹하지 않고 서로 다른 세션이 동일 데이터에 접근했을 때 각 세션마다 다른 버전의 문서(스냅샵 이미지)를 보장해주는 메커니즘을 의미한다.

다음 그림은 이해하기 위한 예제로 쇼핑몰에서 상품을 관리하는 서로 다른 두 관리자가 있다고 가정한다.

먼저 두 관리자가 상품 가격을 업데이트하기 위해 왼쪽에 있는 관리자1이 오른쪽에 있는 관리자2보다 2초 일찍 상품에 대해서 전체 조회를 진행했다.


Figure 1. 상품 전체 조회

관리자 1이 Blue jeans 상품의 가격을 $15로 업데이트하고 트랜잭션을 완료했다.


Figure 2. 관리자1 청바지 가격 업데이트

관리자 2가 Blue jeans 상품의 가격을 $25로 업데이트하고 트랜잭션을 완료하기를 시도한다.



Figure 3. 관리자2 청바지 가격 업데이트

이때, 데이터베이스는 관리자 1과 2에 대해 다른 버전의 문서(스냅샵)를 가지고 있기 때문에 서로 독립적으로 트랜잭션을 완료할 수 있다.

하지만 데이터베이스는 누가 먼저 똑같은 작업에 대해 UPDATE를 시도하고 수정했는지 알고 있어 가장 최근에 UPDATE를 시도한 사용자(관리자2)에게 충돌이 발생해 작업을 완료할수 없다는 에러 메시지를 출력하고, 사용자(관리자2)는 해당 부분을 다시 읽어 충돌이 발생한 지점을 해결하면 된다.

이처럼 사용자는 데이터베이스에서 상품에 대한 정보를 가져오고 수정할때 하나의 테이블에 읽고쓰는것처럼 느끼지만 MVCC 메커니즘은 앞에서 설명한 방식으로 각각의 사용자에게 서로 다른 버전의 문서(스냅샵 이미지)를 제공해 충돌을 최소화 할수 있게 해준다.

물론 동시성제어를 위해 MVCC말고 몇가지 방식이 있다. 대체적으로 구현이 간단한 락(lock)을 많이 쓰이고 있지만 락(lock)을 사용할 경우, 하나의 데이터에 대해서 위와 같은 동작을 진행할 때, 한명(관리자1)은 쓰고 다른 한명(관리자2)은 먼저 쓰기 동작을 한 사람(관리자1)이 쓰기를 완료할 때까지 대기해야하는 현상이 발생해 느리다는 단점을 가지고 있다.

대표적으로 MVCC 메커니즘을 지원하는 데이터베이스는 PostgreSQL, Oracle이 있다.


이 글은 Oracle, PostgreSQL, MySQL Core Architecture를 보고 이해한 대로 정리한 문서입니다.

잘못된 부분을 알려주신다면 수정하도록 하겠습니다.


'Database' 카테고리의 다른 글

ElephantSQL 사용  (0) 2020.05.05
MongoDB 사용법  (0) 2018.03.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함