개발 한 스푼

병행 제어

idleday 2022. 10. 1. 23:30

병행수행 문제점

  1. 갱신 분실 (lost update)

  2. 모순성 (inconsistency)

  3. 연쇄복귀 (cascading rollback)

 

병행제어의 목적

  1. 시스템 활용 증대

  2. 데이터베이스 공유 최대화

  3. 응답 시단 단축

 

병행제어 기법

  1. 잠금(Locking)기법

한 트랜잭션이 실행되는 동안 특정 데이터 항목에 대해 다른 트랜잭션이 동시에 접근하지 못하도록 데이터를 상호배제하여 제어하는 기법.

한 트랜잭션이 특정 데이터 항목에 대하여 잠금(lock)을 설정하면, 해제(unlock)될 때까지 데이터를 독점적으로 활용할 수 있음.

    1.1 공용 로킹(shared locking) : 트랜잭션이 데이터를 read만, 다른 트랜잭션도 read 가능

    1.2 전용 로킹(private locking) : 트랜잭션이 데이터를 read, write가능, 다른 트랜잭션은 모두 불가

 

  2. 2단계 로킹 규약 (2PLP: 2-Phase Locking Protocol)

직렬 가능성을 보장할 수 있는 규약. 모든 트랜잭션이 lock과 unlock연산을 2단계(잠금을 설정하는 확장단계와 해제하는 축소 단계)로 구분하여 수행한다.

2단계 로킹 프로토콜은 데이터 오류 가능성을 사전 예방할 수 있고, 알고리즘이 간단하며, 직렬성을 보장하지만 데드락 문제 내포.

    2.1 확장단계(growing phase)

    트랜잭션이 새로운 lock연산만 수행 가능한 단계.

    2.2 축소단계(shrinking phase)

    트랜잭션이 새로운 unlock연산만 수행 가능한 단계. lock연산 실행불가.

    2.3.1 엄밀(strict) 2PLP : 모든 독점로킹은 트랜잭션 완료까지 새로운 unlock 실행 불가

    2.3.2 엄격(rigorous) 2PLP : 모든 로킹은 트랜잭션완료까지 새로운 unlock 실행 불가

 

  3. 타임스탬프 순서 기법

  4. 다중버전 병행제어

  5. 낙관적 병행제어

 


출처: https://noil0816.tistory.com/153

'개발 한 스푼' 카테고리의 다른 글

Maven과 전자정부프레임워크  (0) 2022.12.31
JSON과 JSONP  (0) 2022.12.28
VSCode로 SSH 원격 접속하기  (0) 2022.11.21
호이스팅(Hoisting)  (0) 2022.10.11
RDBMS와 Nosql  (2) 2022.10.03