기주

[DB] 트랜잭션 동시에 실행해서 성능올리기 ( confilct serializable한 nonserial schedule을 허용하기 ) 본문

TIL

[DB] 트랜잭션 동시에 실행해서 성능올리기 ( confilct serializable한 nonserial schedule을 허용하기 )

기주그지마 2024. 4. 8. 17:25

 

 

 

nonserial schedule(논시리얼 스케쥴)  : 트랜잭션이 순차적이지않고 겹쳐서 실행되는 스케쥴

장점)

  • 트랜잭션이 겹침
  • 동시성이 올라간다 (성능이 향상된다)
  • I/O작업마다 다음 트랜잭션 동작 실행한다

(I/O 입출력 작업은 CPU가 유휴상태로 있는 작업이다. 그래서 CPU가 유휴상태로있는 시간동안 다른 트랜잭션의 동작을 실행함으로써 CPU의 유휴시간이 줄어들고 성능이 좋아진다.)

 

단점)

  • 결과가 이상해질 수 있다

(동시에 트랜잭션을 수행하다보니 잘못된 값을 읽거나 써서 결과가 이상해질 수 있다)

 

 

 

- serial schedule(시리얼 스케쥴) : 트랜잭션이 순차적으로 수행되는 스케쥴

 

장점)

  • 결과가 이상해질 가능성이 없다

(하나의 트랜잭션이 완전히 끝나고 다음 트랜잭션이 수행되기때문에 결과가 이상해질 가능성이없음)

 

단점)

  • 동시성이 떨어져서 성능이 저하된다.
  • CPU가 노는 구간(I/O작업)이 많이 생긴다.

 

 

 

 

 

성능이 좋으면서 결과가 이상해지지 않으려면?)

 

-> "Conflict Serializable한 논시리얼 스케쥴을 허용하자!"

 

-> 어떤 시리얼 스케쥴과 하나라도 Conflict equivalent하다면 그 스케쥴은 Conflict Serializable하다

 

 

 

 

 

 

 

 

 

-스케쥴 : 여러 트랜잭션들이 동시에 실행될때, 각 트랜잭션에 속한 operation들의 실행순서

 

-> 각 트랜잭션내 operation들의 순서는 바뀌지 않는다

 

 

 

-operation : 실행되는 하나의쿼리

 

 

 

- Conflict : 세가지 조건을 모두 만족하면 Conflict 성립

(두 operation 사이에서)

 

 

다음의 세가지조건을 만족하면 Conflict 성립

  1. 서로 다른트랜잭션소속
  2. 같은 데이터에 접근
  3. 최소하나는 write operation

-> conflict 관계에 있는 operation은 순서가 바뀌면 결과도 바뀐다

 

 

 

-Conflict Equivalent : 두조건 모두 만족하면 Conflict Equivalent 성립

(두 스케쥴 사이에서)

  1. 두 스케쥴은 같은 트랜잭션들을 가진다
  2. 어떤 Conflict Operations의 순서도 양쪽 스케쥴이 모두 동일하다

 

 

-*Conflict Serialzable : 시리얼 스케쥴과 Conflict Equivalent 하다

 

 

concurrency control : 어떤스케쥴도 serializable하게 만드는 것

 

 

다양한 Isolation Level(격리수준)을 적절히 이용해서  동시성을 조절할 수 있다

 

isolation level을 높이면 serializable 수준이 올라가고 트랜잭션이 순차적으로 실행됨에따라 성능이 떨어진다(동시성하락) 

 

 

'TIL' 카테고리의 다른 글

[ERROR] ReferenceError: exports is not defined in ES module scope  (0) 2024.05.28
Express static  (0) 2024.05.25
[DB] soft delete 논리삭제  (0) 2024.04.05
N+1 문제 해결하기  (0) 2024.04.05
3계층구조)  (0) 2024.04.05