[Database] 병행 제어(Concurrency Control)

[Database] 병행 제어(Concurrency Control)

1. 병행 제어(Concurrency Control)의 개념

  • 동시에 여러개의 트랜잭션을 병행 수행할 때, 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션간의 상호작용을 제어하는 것
    • 병행성 : 트렌잭션들이 동시에 인터리빙(Interleaving)하게 실행되는 것
    • 인터리빙 : 트랜잭션이 번갈아가며 조금씩 처리를 수행하는 것



2. 병행 제어의 목적

  • DB의 공유도 최대화
  • 시스템 활용도 최대화
  • 응답 시간 최소화
  • 단위 시간당 트랜잭션 처리 건수 최대화
  • DB의 일관성 유지



3. 병행 제어의 필요성

  • 트랜잭션이 병행제어 없이 DB에 동시에 접근할 경우, 다음과 같은 문제점이 발생



4. 잠금(lock)

  • 하나의 트랜잭션이 사용중인 데이터를 다른 트렌젝션이 접근하지 못하게 하는 것
  • 데이터를 갱신할 때 순서
    • 잠금(lock) -> 실행(Execute) -> 해제(Unlock)
  • 교착 상태 : 데이터를 사용중인 트랜잭션이 잠가놓은 자원을 사용하기 위해 다른 트랜잭션들이 무한정 대기하는 현상



5. 병행 제어 기법의 종류

2단계 잠금 규약 기법

  • 트랜잭션 스케쥴의 직렬성을 보장하는 대표적인 기법
  • 2단계는 다음과 같다
    • 확장 단계 : 잠금만 수행할 수 있음(해제 불가)
    • 축소 단계 : 해제만 수행할 수 있음(잠금 불가)
  • 장점: 직렬성 보장/ 단점 : 교착 상태 예방 불가능

타임 스탬프 기법

  • 동시성 제어를 위한 직렬화 기법으로 트랜잭션 간의 순서를 미리 정함.
  • 시스템에 도착한 순서대로 타임 스탬프를 부여하여, 순서대로 실행하도록 한다.
  • 교착 상태가 발생하지 않는다.

락킹

  • 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션은 그 데이터를 액세스 할 수 없게 하는 방법
  • 트랜잭션은 데이터를 액세스하기 전에 Lock을 요청하고 액세스를 마치고 Lock을 해제
  • 이미 Lock이 걸려 있을 때는 Lock이 풀리기 전에는 액세스 할 수 없음
  • Locking 단위가 작으면 병행성 수준이 높아지며 대신 Locking 오베허드는 증가



출처

댓글

이 블로그의 인기 게시물

[Python] # -*- coding: utf-8 -*-를 쓰는 이유

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?