종식당

[매일메일 2025-03-06] 데이터베이스 시스템에서 동시성을 제어하는 방법에 대해 설명해주세요. 본문

매일메일

[매일메일 2025-03-06] 데이터베이스 시스템에서 동시성을 제어하는 방법에 대해 설명해주세요.

종식당 2025. 3. 12. 10:17
728x90
반응형

☘️ MVCC(Multi-Version Concurrency Control)

MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식이다. 각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않는다.

 

데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있다. 트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못한다.

 

또한, 읽기 작업 시 잠금을 사용하지 않아 높은 동시성을 제공한다. 읽기 작업이 잠금에 의해 지연되지 않아, 읽기 중심의 애플리케이션에서 우수한 성능을 보인다. 그리고 쓰기 작업과의 충돌이 줄어든다. 하지만 여러 버전의 데이터를 유지해야 하므로 저장 공간이 더 많이 필요할 수 있다.

🌱 Lock-Based Concurrency Control

Lock-based 방식은 데이터에 접근할 때 잠금(Lock)을 사용하여 동시성을 제어한다. 트랜잭션이 데이터를 읽거나 수정할 때 해당 데이터에 잠금을 걸어 다른 트랜잭션의 접근을 제한한다. 즉, 잠금을 통해 데이터의 일관성과 무결성을 직접적으로 제어한다.

 

데이터에 접근항 때 잠금을 걸어 다른 트랜잭션의 접근을 제한한다. 읽기 작업은 공유 잠금을, 쓰기 작업은 배타 잠금을 사용하여 동시성을 제어한다. 많은 다수의 트랜잭션이 동일한 데이터에 접근할 경우 성능 저하가 발생할 수 있다. 또 잘못된 잠금 순서나 설계로 인해 교착 상태가 발생할 위험이 있다.

MVCC와 Lock-Based Concurrency Control 둘 중 어떤 걸 사용해야 하나요? 🤔

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

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

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

 

728x90
반응형