Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

dongdorodongdong

병행제어(동시성 제어) 본문

Database

병행제어(동시성 제어)

d5ngs 2019. 3. 24. 20:51

정의

- 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호 작용을 제어 하는 것.

- 트랜잭션의 Isolation 성질을 보면 트랜잭션을 독립적으로 만들어 주었다. 근데 만약에 여러 트랜잭션이 하나의 값에 접근을 한다면? 여러 문제가 발생할 수 있다.


> 다중 프로그램 환경에서 여러 개의 트랜잭션을 병행 수행 한다는 것은 같은 시간에 여러 개의 명령을 동시에 실행한다는 것이 아니라, 시분할, IO인터럽트 기법 등을 이용하여 일정한 시간 내에 각 트랜잭션에 있는 명령들이 시간적으로 번갈아 실행되는 것이다. 또, 병행 수행된 각각의 트랜잭션 결과는 각 트랜잭션을 독자적으로 수행시켰을 때의 결과와 같아야 하는데 이것을 직렬성(Serializability)이라고 한다.



목적

  1. 데이터베이스 공유 최대화
  2. 시스템 활용도 최대화
  3. 데이터베이스 일관성 유지
  4. 응답시간 최소화



문제점

- 병행 제어 없이 트랜잭션들이 데이터베이스에 접근한다면 다음과 같은 문제점이 발생

  1. 갱신 분실(Lost Update)
    - 2개 이상의 트랜잭션이 같은 데이터를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상
  2. 모순성 (Inconsistency)
    - 복수의 사용자가 동시에 같은 데이터를 갱신할 때 데이터들이 상호 일치하지 않아 모순된 결과가 발생
  3. 연쇄 복귀(Cascading Rollback)
    - 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback되는 경우 다른 트랜잭션들도 함께 Rollback 되는 현상
  4. 비완료 의존성(Uncommitted Dependency)
    - 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상



기법

  1. 로킹 기법
  2. 타임 스탬프 기법
  3. 검증(낙관적) 기법


교착상태(Deadlock)
  • 모든 트랜잭션이 실행을 전혀 하지 못하고 무한정 기다리고 있는 상태

  • 필요 충분 조건
    - 상호 배제(Mutual Exclusion)
    - 대기 (Wait-For)
    - 선취 금지(No Preemption)
    - 순환 대기(Circular Wait)

  • 해결책
    - 회피 : 자원을 할당할 때마다 deadlock이 일어나지 않도록 실시간 알고리즘을 이용하여 검사
    - 예방 : 트랜잭션을 실행시키기 전에 deadlock 발생이 불가능 하도록 만드는 방법
    - 탐지 : deadlock이 발생한 뒤에 deadlock 발생 조건의 하나를 제거하는 기법


로킹(Locking)

  • 주요 데이터의 액세스를 상호 배타적으로 하는 것.
  • 트랜잭션이 데이터를 Read, Write하기 위해서는 반드시 Lock을 걸어야 함.
  • 트랜잭션이 종료되기 전에 반드시 Unlock을 해주어야 함.
  • Lock을 설정하고 데이터를 사용하면 다른 트랜잭션은 접근하지 못한다.
  • Lock을 건 트랜잭션만이 Lock을 해제할 수 있다.

  • Shared Lock
    - 트랜잭션은 데이터를 읽을 수 있지만 기록할 수 없다.
    - 다른 트랜잭션도 Shared Lock을 동시에 설정할 수 있다.

  • Exclusive Lock
    - 트랜잭션은 데이터를 읽을 수 있고 기록할 수 있다.
    - 다른 트랜잭션은 Exclusive Lock이 설정된 데이터에 어떠한 Lock도 설정할 수 없다.

  • 로킹단위
    - 한꺼번에 Lock을 할 수 있는 단위
    - 데이터베이스 > 파일> 레코드 > 필드 등이 있다.
    > 로킹 단위가 크면 로크의 수가 작아 관리가 용이하다. 하지만 로크의 수가 작기 때문에 병행성 수준이 낮고 오버헤드가 감소한다.

2단계 로킹 규약(Two-Phase Locking Protocol)
  • Lock을 걸고 해제하는 시점에 제한을 두지 않으면 두 개의 트랜잭션이 동시에 실행될 때 데이터의 일관성이 깨질 수 있어서 로킹 단계를 2개로 구분하여 이를 방지하는 방법
  • 교착 상태가 발생할 수도 있다.
  • 확장 단계
    - 트랜잭션은 새로운 Lock 연산만 할 수 있고, Unlock 연산은 할 수 없는 단계

  • 축소 단계
    - 트랜잭션은 Unlock 연산만 할 수 있고, Lock 연산은 할 수 없는 단계


타임 스탬프(Time Stamp Ordering)
  • 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법.
  • 트랜잭션이 실행을 시작하기전에 시간표(Time Stamp)를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법.
  • 교착 상태가 발생하지 않는다.




검증 기법(낙관적 기법)
  • 읽기 전용 트랜잭션이 대부분일 경우, 병행 제어를 하지 않아도 문제가 없다는 점을 이용.
  • 검증과 확인하는 과정이 필요하다.


'Database' 카테고리의 다른 글

시스템 카탈로그(데이터 사전)  (0) 2019.03.24
정규화  (0) 2019.03.24
Transaction  (0) 2019.03.24
스키마  (0) 2019.03.24
릴레이션  (0) 2019.03.24