해당 강의를 보고 공부한 내용을 정리하였습니다.
동시성 제어는 여러 개의 트랜잭션이 동시에 실행될 때, 데이터베이스의 일관성과 무결성을 보장하기 위한 기술적인 접근 방식입니다. 여러 트랜잭션이 동시에 실행될 경우, 서로 간섭이나 충돌이 발생하여 데이터의 일관성을 해치지 않도록 관리하는 것이 목표입니다.
K가 H에게 20만원을 이체할 때, H도 ATM에서 본인 계좌에 30만원을 입금한다면 여러 형태의 실행이 가능할 수 있다
예시에서 설명한 상황은Lost Update
라는 동시성 문제의 일종입니다. Lost Update는 두 개 이상의 트랜잭션이 동시에 같은 데이터를 수정하려고 할 때 발생할 수 있는 문제입니다.
위의 예시에서 K가 H에게 20만원을 이체하고자 하는 동안, 동시에 H가 ATM에서 30만원을 입금하는 상황이 발생하면 문제가 발생합니다. 두 개의 트랜잭션 모두 H의 계좌 잔액을 읽어서 변경하려고 합니다. 하지만 이러한 변경이 동시에 일어나면 데이터의 일관성이 깨질 수 있습니다.
데이터베이스 환경에서 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션 내의 작업(Operation)들이 어떤 순서로 실행되는지를 나타내는 개념을 Schedule(일정표) 라고 합니다. Schedule은 각 트랜잭션이 수행한 작업들의 실행 순서를 시간에 따라 나타내며, 여러 트랜잭션 간의 상호작용을 이해하는 데 중요한 개념입니다.
각 트랜잭션 내의 작업 순서는 바뀌지 않습니다.
Serial Schedule은 여러 트랜잭션이 겹치지 않고 순차적으로 한 번에 하나씩 실행되는 스케줄을 말합니다. 즉, 하나의 트랜잭션이 모두 완료된 후에 다음 트랜잭션이 시작되는 방식입니다. 이렇게 순차적으로 실행되는 스케줄은 각 트랜잭션이 다른 트랜잭션의 실행에 영향을 주지 않으므로 데이터의 일관성과 무결성을 보장할 수 있습니다.
Nonserial Schedule은 여러 트랜잭션이 겹쳐서(Interleaving) 실행되는 스케줄을 말합니다. 여러 트랜잭션이 동시에 실행되는 상황에서 각 트랜잭션 내의 작업(Operation)들이 서로 섞여서 실행되는 것을 의미합니다.
동시에 각 트랜잭션 간의 상호작용으로 인해 데이터 일관성 유지가 어려울 수 있습니다. 따라서 Nonserial Schedule의 경우 동시성 제어 기법을 사용하여 데이터 무결성을 보장해야 합니다.
Serial Schedule은 I/O 작업을 하는동안 하나의 트랜잭션 작업이 완료될 때까지 다른 트랜잭션은 실행되지 않기 때문에, CPU 자원이 낭비될 수 있습니다.
모든 작업이 순차적으로 실행되므로 병렬 처리가 이루어지지 않아 성능이 향상되지 않습니다. 따라서 실제로 사용하기에는 비효율적인 방식입니다.
Nonserial Schedule은 트랜잭션들이 겹쳐서 실행되므로 CPU 자원을 최대한 활용할 수 있습니다. I/O 작업을 처리하는 동안에도 다른 트랜잭션이 실행되어 CPU가 놀지 않습니다. 이로 인해 동시성이 증가하며, 동일한 시간 내에 더 많은 트랜잭션을 처리할 수 있습니다.
Nonserial Schedule은 여러 트랜잭션이 겹쳐서 실행되기 때문에, 트랜잭션들의 실행 순서에 따라 예상치 못한 결과가 발생할 수 있습니다. 특히, 동시성 제어가 제대로 이루어지지 않으면 데이터의 일관성을 유지하기 어렵습니다. 여러 트랜잭션이 동시에 데이터를 수정하는 경우, 각 트랜잭션의 작업이 서로 영향을 미칠 수 있어서 데이터의 무결성이 깨질 수 있습니다.