update member set firtst_name = '김' where id=1;Q. 이 상황에서 commit or rollback 전, 다른 사용자가 select * from member where id=1 을 요청하면 어디에 있는 데이터를 조회할까?
A. MySQL 서버의 isolation 시스템 변수에 따라 다르다.
이처럼 MVCC 는 하나의 레코드에 대해 2개의 버전이 유지되고, 필요에 따라 어느 데이터가 보여지는지 달라지는 구조다.
Q. undo 영역은 언제 제거가 될까?
A. 데이터가 commit 이 됐다고 undo 영역의 백업 데이터가 바로 삭제되는 것은 아니다. undo 영역을 필요로 하는 트랜잭션이 더는 없을 때 비로소 삭제된다.
장점
증가된 동시성 : MVCC는 데이터에 대한 깨끗한 스냅샷을 제공하여 여러 트랜잭션이 동시에 실행될 수 있도록 합니다. 이는 락 경합을 감소시켜 트랜잭션이 불필요하게 차단되는 것을 방지한다.
최적화된 성능 : 명시적인 락이 필요하지 않기 때문에 MVCC는 빠른 읽기 및 쓰기 작업이 가능하다. 특히 높은 동시성 환경에서 성능이 최적화된다.
향상된 격리 : MVCC는 각 트랜잭션의 시작 시간에 맞춰진 스냅샷을 제공함으로써 동시에 실행되는 트랜잭션 간에 격리를 제공한다. 이는 트랜잭션이 독립적으로 작동하고 일관되게 데이터를 다룰 수 있도록 한다.
단점
증가된 저장 공간 사용량 : MVCC는 각 레코드의 여러 버전을 유지해야 하므로 저장 공간 사용량이 증가할 수 있다. 그러나 이 오버헤드는 저장 및 가비지 컬렉션 메커니즘을 최적화함으로써 수용 가능한 수준으로 감소시킬 수 있다.
복잡한 가비지 컬렉션 : MVCC가 생성한 레코드 버전을 관리하기 위해 정교한 가비지 컬렉션 메커니즘이 필요하다. 이로 인해 데이터베이스 시스템에서 특히 높은 트랜잭션 환경에서 일부 복잡성이 발생할 수 있다.
특정 상황에서 일관성 보장 감소 : MVCC는 특정 상황에서 일관성 보장이 감소할 수 있다. 이러한 상황은 일반적으로 읽기-쓰기 충돌이나 데이터베이스 시스템이 read-committed 및 read-uncommitted와 같은 덜 강력한 일관성 보장을 제공하는 isolation level 을 사용하는 경우에 발생할 수 있다. 그러나 이는 일반적으로 MVCC의 다양한 이점을 고려할 때 허용할 수 있는 트레이드오프 이다. (상황에 따라 isolation level 을 잘 설정해야한다.)
Real MySQL 8.0 1
https://appmaster.io/blog/mvcc-in-relational-databases