개발

데이터베이스의 병행제어기법

대왕판다 2022. 7. 16. 12:05

데이터베이스의 병행제어

  • 병행제어란 ?

    • 여러개의 트랜잭션이 동시에 수행될 때 DB의 일관성을 파괴하지 않도록 트랜잭션간의 상호작용을 제어하는 것
    • 병행(concurrency)는 매우 빠르게 여러 트랜잭션 사이를 이동하면서 조금씩 처리를 수행하는 방식
  • 병행 제어의 목적은 일관성 외에도,

    • DB 공유도 최대화, 시스템 활용도 최대화, 사용자 응답 시간 최소화 등이 있다.
  • 병행 제어를 하지 않을 경우 트랜재션들이 동시에 DB에 접근하며 문제가 생긴다.

     

     

병행제어에 실패한다면

  1. 갱신 분실 (Lost Update)

    • 같은 데이터에 둘 이상의 트랜잭션이 동시에 갱신할 때, 갱신 결과의 일부가 없어지는 것.
    • 동일한 데이터 X에 값을 더하는 두 트랜잭션이 있을 때, 후행하는 트랜잭션은 선행 트랜잭션 값이 더해지기 전의 값을 받아오기에 두 트랜잭션이 올바르게 반영되지 않는 상황.
  2. 모순성 (Inconsistency)

    • 하나의 트랜잭션이 여러 데이터 갱신을 수행할 때, 일관성 없는 상태의 DB에서 데이터를 가져와 데이터에 불일치가 발생하는 현상
    • 갱신 분실과 비슷하지만, 한 트랜잭션이 여러 값을 연산하게 될 경우 각 값이 참조하는 시기가 모두 달라 데이터의 불일치가 발생
    • 트랜잭션 1이 X, Y 값을 X->Y 값 순서로 갱신할 때 그 사이에 X, Y값을 갱신하는 또 다른트랜잭션 2가 개입해 트랜잭션 1의 일관성이 깨지는 상황
  3. 연쇄 복귀(Cascading Rollback)

    • 병행 수행되던 둘 이상의 트랜잭션 중, 하나의 트랜잭션만 실패했지만 두 트랜잭션 모두 복귀되는 현상
  4. 비완료 의존성 (Uncommitted Dependency)

    • 하나의 트랜잭션 수행이 실패 후 회복하기 전에 다른 트랜잭션이 실패한 결과를 참조

 

병행제어 기법

  1. 로킹

  2. 타임스탬프

    • 데이터에 접근하는 시간을 미리 정해 시간 순으로 접근.
    • 직렬 가능성을 보장하지만, 연쇄 복귀를 초래할 수 있음.
  3. 낙관적 병행제어

    • 트랜잭션 종료 시 일괄적으로 검사
    • 트랜잭션을 위해 유지되는 로컬 사본에 대해서만 갱신
  4. 다중 버전 병행제어

    • 여러 버전 값을 유지하며 조회 성능을 최대한 유지하기 위한 방법
    • 트랜잭션이 충돌할 경우 대기가 아니라 롤백함으로써 연쇄복귀초래 가능성O

 

로킹(Locking)

로킹이란?

  • 병행 수행되는 트랜잭션들이 동일한 데이터에 동시에 접근하지 못하게 하여 직렬 가능성을 보장한다.
  • lock, unlock 연산을 이용해 제어
  • 로킹되는 단위가 커지면 트랜잭션 데이터 단위(로크)가 커져 수가 줄어들고 제어기법이 간단해져 병행성이 감소
  • 반대로 로킹 단위가 작아져 병행성이 증가하지만 제어기법이 까다로워진다.

 

직렬 가능성 ? 트랜잭션들이 병행 수행되더라도 순차적으로 수행된 것과 동일한 DB 일관성을 보장하는 것

데드락 ? 2개 이상의 트랜잭션이 서로 상대방이 보유하고 있는 로크를 요청하면서 기다리고 있는 상태