본문 바로가기
공부/데이터베이스

10. 회복과 병행 제어 / 03 병행 제어

by 라이티아 2025. 9. 15.

1. 병행 수행과 병행 제어

병행 수행 concurrency

여러 사용자가 데이터베이스를 동시에 공유할 수 있도록 여러개의 트랜잭션이 동시에 수행되는 것

 

병행 수행은 실제로 여러 트랜잭션이 차례로 번갈아 수행되는 인터리빙 interleaving 방식으로 진행된다

이때 같은 데이터에 트랜잭션이 서로 접근하여 방해를 받을 수 있다

 

병행 제어 concurrency control

여러 개의 트랜잭션이 병행 수행되면서 같은 데이터에 접근하여 연산을 실행하더라도, 문제가 발생하지 않고 정확한 수행 결과를 얻을 수 있도록 트랜잭션의 수행을 제어하는 것

 

2. 병행 수행의 문제

갱신 분실 lost update

하나의 트랜잭션이 수행한 데이터 변경 연산의 결과를 다른 트랜잭션이 덮어써 변경 연산이 무효화 되는것

 

모순성 inconsistency

하나의 트랜잭션이 여러 개의 데이터 변경 연산을 실행할 때 일관성 없는 상태의 데이터베이스에서 데이터를 가져와 연산을 실행함으로써 모순된 결과가 발생하는 것

 

연쇄 복귀 cascading rollback

트랜잭션이 완료되기 전에 장애가 발생하여 rollback 연산을 수행하면, 이 트랜잭션이 장애 발생 전에 변경한 데이터를 가져가 변경 연산을 실행한 또 다른 트랜잭션에도 rollback 연산을 연쇄적으로 실행해야 한다는 것

 

3. 트랜잭션 스케줄

트랜잭션에 있는 연산을 실행하는 순서에 따라 트랜잭션들의 수행 결과가 달라지기도 하고, 병행 수행에 따른 문제가 발생하기도 한다

그렇기에 병행 수행할때는 트랜잭션들의 연산을 실행하는 순서가 중요하다

 

트랜잭션 스케줄

트랜잭션에 포함되어 있는 연산들을 수행하는 순서

하나의 트랜잭션에는 많은 연산이 포함되어 있어 여러 트랜잭션을 병행 수행하는 경우 트랜잭션들의 각 연산을 실행시키는 순서은 트랜잭션 스케줄도 여러 가지가 있을 수 있다

 

세가지 유형으로 나뉜다

트랜잭션 스케줄 의미
직렬 스케줄 인터리빙 방식을 이용하지 않고 트랜잭션별로 연산들을 순차적으로 실행시키는 것
비직렬 스케줄 인터리빙 방식을 이용하여 트랜잭션들을 병행해서 수행시키는것
직렬 가능 스케줄 직렬 스케줄과 같이 정확한 결과를 생성하는 비직렬 시케줄

 

4. 병행 제어 기법

여러 트랜잭션을 병행 수행하면서도 정확한 결과를 얻을 수 있는 질렬 가능성을 보장받기 위해 사용함

 

모든 트랜잭션이 따르면 직렬 가능성이 보장되는 나름의 규약을 정의하고, 트랜잭션들이 이 규약을 따르도록 하는 것

 

가장 많이 사용되는것은 로킹 기법인다

 

로킹 기법의 개념

로킹 locking 기법은 병행 수행되는 트랜잭션들이 동일한 데이터에 동시에 접근하지 못하도록 lock, unlock이라는 2개의 연산을 사용해 제어하는 것이다

한 트랜잭션이 먼저 접근한 데이터에 대한 연산을 마칠때 까지 다른 트랜잭션이 접근하지 못하도록 상호 배제 하여 직렬 가능성을 보장하는 것이다

 

2단계 로킹 규약 2 phase locking protocol

기본 로킹 규약의 문제를 해결하고 트랜잭션의 직렬 가능성을 보장하기 위해 lock과 unlock 연산 수행 시점에 대한 새로운 규약을 더한 것

 

2단계 로킹 규약을 따르려면 모든 트랜잭션이 lock과 unlock 연산을 다음과 같이 2단계로 나누어 실행해야 한다

  • 확장 단계
    트랜잭션이 lock 연산만 실행할 수 있고, unlock 연산은 실행할 수 없는 단계
  • 축소 단계
    트랜잭션이 unlock 연산만 실행할 수 있고, lock연산은 실행할 수 없는 단계

 

2단계 로킹 규약을 사용시 직렬 가능성을 보장할 수 있지만 교착 상태 deadlock 이 발생할 수 있다

 

교착 상태

트랜잭션들이 상대가 독점중인 데이터에 unlock이 실행되기를 서로 기다리며 영구 정지 상태가 되는 상태