MVCC 란?

양시준·2022년 4월 1일
0

TIL

목록 보기
19/21

MVCC 란?

Multi Version Concurrency Content의 약자로, 여기서 Multi Version은 하나의 레코드에 여러 버전이 관리된다는 의미이다.

데이터베이스 관리 시스템이 일반적으로 사용하는 동시성 제어 방식으로 데이터베이스로의 동시 접근(잠금을 사용하지 않는 일관된 읽기)을 제공한다.

MVCC를 사용하면 Locking 메커니즘이 불필요함에도 불구하고 오라클 등 일부 MVCC 데이터베이스에서는 Lock을 사용한다.

MVCC 의 탄생 배경

기존 Locking 메커니즘의 문제점

읽기 작업과 쓰기 작업이 서로 방해를 일으키기 때문에 동시성 문제가 발생한다.

데이터 일관성에 문제가 생기는 경우도 있어서 Lock을 더 오래 유지하거나 테이블 레벨의 Lock을 사용해야 하고, 동시성 저하가 발생한다.

이러한 문제점들을 해결하기 위해 MVCC라는(Multi-Version Concurrency Control, 다중 버전 동시성 제어) 메커니즘이 탄생하게 되었다.

MVCC 의 특징

  • lock 기법만 적용된 DBMS보다 훨씬 빠르게 동작한다.
  • 사용하지 않는 데이터가 매번 생기므로 데이터를 정리하는 시스템이 필요하다.
  • 데이터 버전이 충돌할 가능성이 있다.
    • 이런경우 애플리케이션 영역에서 문제를 해결해야 한다.

MVCC 의 구현

데이터베이스 내에 다중 버전의 데이터를 저장

PostgreSQL, Interbase, SQL Server에서 사용하는 방식이다.

데이터베이스 내에 다중 버전의 데이터를 저장하다가, 더 이상 필요하지 않을 때 데이터를 정리한다.

데이터베이스 내에 다중 버전의 데이터가 저장되기 때문에, 파일 사이즈가 증가한다.

최신 버전의 데이터만 데이터베이스에 저장

Oracle, MySQL DB에서 사용하는 방식이다.

데이터를 변경할 대마다 그 변경사항을 UNDO 영역에 저장한다.

중요한 것은 한 레코드에 여러 변경사항이 있으면 이전의 데이터를 덮어 씌우는게 아니라 새로운 버전의 데이터를 UNDO 영역에 생성하는 것이다.

이렇게 해서 하나의 데이터에 대해 여러 버전의 데이터가 존재하게 되고, 사용자는 마지막 버전(최신)의 데이터를 읽게 된다.

참고

profile
야크 털 깍기와 러버덕 디버깅을 좋아하는 개발자

0개의 댓글