개발/ETC

DB 동시성 제어하는 방법 알아보기

devhooney 2025. 1. 6. 11:33
728x90

DB 시스템에서 동시성을 제어하는 방법에 대해서 알아보자 !!!

 

 

 

대표적인 동시성 제어 방식은 

MVCC(Multi Version Concurrency Control)

Lock-Based Concurrency Control이 있다.

 

 

1. MVCC

MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식이다.

각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않는다.

 

데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있다.

트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못한다.

 

읽기 작업 시 잠금을 사용하지 안항 높은 동시성을 제공한다.

읽기 작업이 잠금에 의해 지연되지 않아, 읽기 중심의 애플리케이션에서 우수한 성능을 낼 수 있다.

읽기 작업 시 잠금을 사용하지 않으므로, 쓰기 작업과의 충돌이 줄어든다.

하지만 여러 버전의 데이터를 유지해야 하므로 저장 공간이 더 많이 필요할 수 있다.

 

 

2. 광고

728x90

 

 

 

3. Lock-Based Concurrency Control

Lock-Based 방식은 데이터에 접근할 때 잠금을 사용하여 동시성을 제어한다.

트랜잭션이 데이터를 읽거나 수정할 때 해당 데이터에 잠금을 걸어 다른 트랜잭션의 접근을 제한한다.

잠금을 통해 데이터의 일관성과 무결성을 직접적으로 제어한다.

 

데이터에 접근할 때 잠금을 걸어 다른 트랜잭션의 접근을 제한한다.

읽기 작업은 공유 잠금을, 쓰기 작업은 배타 잠금을 사용하여 동시성을 제어 한다.

많은 다수의 트랜잭션이 동일한 데이터에 접근할 경우 성능 저하가 발생할 수 있다.

또 잘못된 잠금 순서나 설계로 인해 데드락 상태가 발생할 위험이 있다.

 

 

 

4. 요약

실제 데이터베이스 시스템, 특히 MySQL의 InnoDB는 MVCC와 Lock-Based 방식의 장점을 결합하여 동시성 제어를 최적화 한다.

읽기 트랜잭션은 MVCC를 사용하여 일관된 스냅샷을 기반으로 데이터를 읽어서, 잠금을 최소화하고 높은 동시성을 유지할 수 있다.

쓰기 트랜잭션은 잠금을 사용하여 데이터의 일관성과 무결성을 유지하면서, 동시에 데이터 충돌을 방지한다.

 

 

 

 

- 참고

https://www.geeksforgeeks.org/lock-based-concurrency-control-protocol-in-dbms/

https://monday9pm.com/mvcc-multi-version-concurrency-control-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-e4102cd97e59

728x90

'개발 > ETC' 카테고리의 다른 글

CORS 알아보기  (18) 2025.01.10
git 브랜치 생성, 전환하기  (36) 2025.01.08
스레드, 프로세스, 코어 알아보기  (51) 2025.01.03
단위 테스트, 통합 테스트 차이  (69) 2025.01.02
TCP 3-way handshake 알아보기  (61) 2024.12.29