PLOD

[DB]Concurrency Control 본문

개발 공부/Database

[DB]Concurrency Control

훌룽이 2022. 12. 11. 18:00

병행 제어에 앞서, 먼저 병행에 대해서 알아보자.

병행(Concurrency)은 매우 빠르게 여러 트랜잭션 사이를 이동하면서 조금씩 처리를 수행하는 방식이다. 

따라서 실제로는 한 번에 한 트랜잭션만 수행하지만, 마치 동시에 여러 트랜잭션을 수행하는 것처럼 보이도록 하는 것이다. 

 

병행 제어(Concurrency Control)는 이렇게 트랜잭션이 병행 수행될 때 트랜잭션이 데이터베이스의 일관성을 파괴하지 않고, 다른 트랜잭션에 영향을 주지 않도록 트랜잭션 간의 상호작용을 제어하는 것을 말한다. 

 

병행 제어의 목적은 다음과 같다. 

 

  • 데이터베이스의 일관성 유지(consistency)
  • 데이터베이스 공유 최대화
  • 시스템 활용도 최대화
  • 사용자 응답 시간 최소화(Minimize response time)
  • 단위 시간당 트랜잭션 처리 건수 최대화

 

 

* Lock-Based Protocols

 

Lock(ing)은 트랜잭션이 접근하려는 데이터를 다른 트랜잭션이 접근하지 못하도록 잠그는(lock) 병행 제어 기법이다. lock에는 exclusive-lock과 shared-lock 이 있다. lock을 사용함으로써 여러 곳에서 동시다발적으로 들어오는  data transaction 명령을 실행 할 수 있다. 잠금을 허용할 수 없는 경우, 먼저 선점한 lock이 풀어줄 때 까지 기다린다.

 

로킹 단위가 클수록 병행 제어가 단순해지고 관리하기가 편하지만 병행성 수준이 낮아진다.

반면 로킹 단위가 작을수록 병행 제어가 복잡해지고 오버헤드가 증가하지만, 병행성 수준이 높아지고 데이터베이스 공유도가 높아진다. 

 

* Lock의 종류

- S Lock(Shared-Lock) : 공유 잠금(Shared Lock) 데이터를 읽어올 때 주로 걸리는 lock

- X Lock(eXclusive-Lock) : 단독 잠금(Exclusive Lock) 데이터를 입력/수정/삭제 할 때 걸리는 lock

 

*DeadLock(교착상태)

 

교착 상태란, 여러 트랜잭션이 특정 데이터에 lock을 한 채 다른 트랜잭션이 lock을 수행한 데이터에 접근하려고 할 때 실행을 하지 못하고 서로 무한정 기다리는 상태를 말한다. 

 

DeadLock이 일어나게 되면 시스템은 rollback 을 실행하여 transaction 이전 상태로 되돌린다. DeadLock을 피하기 위해 Lock을 사용하지 않으면 DBMSinconsistance 해진다. 그렇기 때문에 DeadLock은 필연적이다. DeadLock이 생길시 rollback을 사용하면 된다.

 

*기아 상태(Starvation)

특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태를 말함.

 

 

* 트랜잭션 격리 종류

 

1) Read Uncommitted

 

 

 

Dirty Read를 허용함 (Dirty Read란 commit 되지 않은 데이터 변경을 읽을 수 있다는 것이다)

Read Uncommitted는 S Lock조차 걸지 않기 때문에 다른 세션에서 커밋되지 않은 데이터를 볼 수 있다.

 

2) Read Committed

 

 

Dirty Read를 허용하지 않음 T1 수행 중간에 T2가 수행되지 않음

Non repeatable read가 발생할 수 있음

동일한 select 문인데 서로 다른 결과가 발생함

실제 select할 때 S Lock을 소유한다. 하지만 select가 끝나 동시에 S Lock을 해제 한다. 이 말은 트랜잭션 내에서 select가 끝나더라도 다른 세션에서 insert나 update가 가능하다는 말이다.

 

3) Repeatable Read

 

Dirty Read를 허용하지 않고 반복읽기를 보장한다. 이미 읽은 데이터는 다시 읽어도 동일한 값이 되도록 보장하는 것이다.

=> Phantom Read 발생 가능

 

참고 )

[데이터베이스] 트랜잭션에 대해서 (tistory.com)

 

[데이터베이스] 트랜잭션에 대해서

트랜잭션이란 하나의 논리적인 작업 단위를 이루는 여러 연산들의 집합을 말한다. 예를들어, 한 계좌의 돈을 다른 계좌로 이체하는 계좌 이체 작업은 각 계좌의 잔고를 변경하는 두 개의 갱신

pjh3749.tistory.com

 

'개발 공부 > Database' 카테고리의 다른 글

[SQL] GROUP 함수  (0) 2023.02.13
[SQL] SQL 함수  (0) 2023.02.05
[DB]Transaction  (0) 2022.12.11
[DB] Query Optimization  (0) 2022.12.11
[DB] Query Processing + query cost  (0) 2022.10.30
Comments