공부기록

트랜잭션 이론 본문

CS/DB

트랜잭션 이론

코타쿠 2021. 5. 26. 23:12

트랜잭션의 Isolation 속성은 트랜잭션 연산들을 수행할 때 자기 자신만 하는 것 처럼 보여야 한다는 것이다.

트랜잭션이 들어온 대로 동기화되어 실행되는 것을 serializable이라고 하는데 실제 DBMS는 여러가지 트랜잭션을 동시에 처리해야하기 때문에 실제로 serialize하게 트랜잭션들을 수행하지는 않는다.

 

트랜잭션들은 active, partially commit, commit, abort가 있다. 오류가 생기면 abort, 그렇지 않으면 commit한다.

 

동시에 트랜잭션을 수행하기 때문에 발생하는 오류들이 있다. 실제 없는 값을 읽는 dirty read, 내가 update한 값이 사라지는 lost update, 같아야 하는 값을 다르게 읽어버리는 unrepeatable read가 있다.

 

트랜잭션 연산의 순서를 스케줄이라고 하는데, 트랜잭션들을 isolation을 지키면서 concurrent하게 수행하기 위해서는 스케줄을 기준에 따라 선별할 필요가 있다.

 

isolation을 지키기 위한 기준에는 conflit serializability와 view serializability가 있다.

 

conflict serializablity에 관한 설명이다.

하나의 데이터에 대해서 두 연산이 있을 때 한쪽 연산이라도 write하면 conflict하다고 하며 이는 순서를 swap할 수 없다.

conflict serializability는 conflict하지 않은 연산들을 swap했을때 serialize한 스케줄을 만들 수 있는지 확인하는 것이다.

이것은 graph를 통해서 확인할 수 있다. 그래프에 cycle이 존재하면 conflict serializabe 하지 않은 것이다. 그렇지 않다면 위상정렬을 통해 스케줄을 만들 수 있다. 

 

view serializability에 관한 설명이다.

view serializable하려면 두개의 스케줄 S와 S`가 있을 때, 읽는 값이 같고 마지막 쓰는 값이 같다면 view equivilent 한 것이다.

view equivilant한 스케줄에는 blind write가 있다.

이것을 찾는 알고리즘은 NP이기에 유용하지 않다. 먼저 conflict serializable한지 아닌지 보고 아니라면 blind write가 있는 지 없는 지 본다. blind write가 있다면 고려해본다.

 

트랜잭션의 durability, atomicity를 지키기 위해선 recovery가 있어야한다.

문제는 트랜잭션의 순서에 따라 Cascading rollbacks이 있을 수 있다. 즉 하나의 트랜잭션을 롤백하기위해 이전의 트랜잭션을 롤백해야하는 경우가 생기는 것이다. 이를 위해 cascadless rollback을 할 필요가 있는데 이때 Ti가 쓰고 Tj가 읽으면 Ti commit이 Tj commit 이전에 있어야 한다. 

이것과 관련한 strict 스케줄이 있는데 Wj 의 커밋 or Abort이후에 Oi가 일어나야 한다는 것이다.

즉 트랜젝션이 terminate하기 전까지는 다른 트랜잭션이 read, write할 수 없다.

 

우리가 해야 하는 스케줄은 Conflict or View Serializable 하고 Avoid Cascading 해야한다.

이를 위해 프로토콜이 필요하고 Locked based Protocol이 현존하는 가장 성능좋은 locking 프로토콜이다.

 

 

 

 

 

 

 

 

'CS > DB' 카테고리의 다른 글

트랜잭션 동시성 오류와 고립수준  (0) 2021.05.31
동시성 제어  (0) 2021.05.26
ORM  (0) 2021.05.17
SQL DB VS NOSQL DB  (0) 2021.05.15
정규화  (1) 2021.05.01