본문 바로가기

Programming

동시성 제어

동시성 제어

공유를 목적으로 하는 데이터베이스의 특성상 가능 한 많은 트랜잭션을 동시에 수행시켜야 한다. 동시에 수행되는 트랜잭션은 다른 트랜잭션이 같은 데이터를 공유고 있다는 사실을 모를 수 있기 때문에 일관성이 훼손될 수 있다. 이때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능을 동시성 제어라고 한다.

갱신손실

두 개 이상의 트랜잭션이 한 개의 데이터를 동시에 갱신할 때 발생한다. 특정 데이터에 여러개의 트랜잭션의 작업이 이루어질 경우 특정 트랜잭션의 갱신 작업을 무효화시키는 문제이다.

해결방법

락 (lock) - 데이터의 사용여부를 알리는 방법. 락을 할 경우 다른 트랜잭션은 잠금이 풀릴 때까지 기다린다.


오손읽기

읽기 작업을 하는 트랜잭션 1이 쓰기 작업을 하는 트랜잭션 2가 작업한 중간 데이터를 읽기 때문에 생기는 문제다.작업 중인 트랜잭션 2가 중간에 작업을 철회할 경우 트랜잭션 1은 무효가 된 데이터를 읽고 잘못된 결과를 도출한다.


유령데이터 읽기

트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고(삽입) 트랜잭션 1이 다시 한 번 데이터를 읽을 때 생기는 문제다. 읽기 작업을 다시 한 번 반복할 경우 이전에 없던 데이터나 나타나는 현상이다.


트랜잭션 고립 수준 명령어

READ UNCOMMITTED - 고립 수준이 가장 낮은 명령어 ( SELECT문 공유락 걸지 않음 )
READ COMMITTED    - 오손 페이지의 참조를 피하기 위해 자신의 데이터를 읽는 동안 공유락을 걸지만 
                       트랜잭션이 끝나기 전에라도 해지 가능하다.
                        ( SELECT문 공유락을 걸고 끝나면 바로 해지 )

REPEATABLE READ   - 자신의 데이터에 설정된 공유락과 배타락을 트랜잭션이 종료할 때까지 유지하여 다른
                        트랜잭션이 자신의 데이터를 갱신할 수 없도록 한다.
                        ( SELECT문 공유락을 걸고 트랜잭션 끝까지 유지 )

SERIALIZABLE         - 실행 중인 트랜잭션은 다른 트랜잭션으로부터 완벽하게 분리된다. 데이터 집합에
                       범위를 지어 잠금을 설정할 수 있다.
                       ( SELECT문 공유락을 걸고 트랜잭션 끝까찌 유지 )

*사용법
SET TRANSACTION ISOLATION LEVEL READ 명령어


'Programming' 카테고리의 다른 글

데이터베이스 권한관련 명령어  (0) 2015.02.16
트랜잭션  (0) 2015.02.15
Unity 용어정리  (0) 2015.02.10
정규화  (0) 2015.02.07
데이터 모델링  (0) 2015.02.07