본문 바로가기
컴퓨터공학/데이터베이스(database)

[Transaction]Transaction Isolation in SQL

by 바코94 2020. 6. 1.

실제 SQL에서 commit, rollback 시작은 암묵적으로 진행되고 종료는 commit, rollback이 명시적으로 해야한다. database system에서 auto commit을 지원하여 commit을 암묵적으로 해준다.

 

savepoint 지정해두면 abort 되었을때 이 지점으로 돌아가게 해준다.

 

weak levels of consistency(consistency vs performance)

대략적인 값을 파악하고 싶을 때 consistency를 포기하고 performance를 선택할 수 있도록 지원이 된다. consistency level을 설정하여 이 수준을 조정한다.

degree-two consistency

s lock인 경우 바로 lock을 푸는 것이 2PL와 다른 점이다. 이렇게 되면 정상적이지 않은 값을 읽을 수 있는데 이런 것이 허용되는 것이다. 이렇게 consistency를 포기하는 대신 performance를 선택하게 되는 것이다.

 

cursor stability 

사용자가 cursor을 통해 튜플을 읽어 들일 때 s락을 걸고 바로 푸는 형태로 구현되어 있다. cursor를 사용하는 환경에서는 degree-two consistency가 사용되는 것이다.

 

serializability level

read uncommited: 어떤 트랜잭션이 아이템을 읽을 때 미리 값을 바꾸고 commit이 안 된 상태도 허용하는 수준. 대충의 정보만 파악할 때 사용할 수 있다.

read commited: commited 된 값 만을 읽지만 s 락을 걸고 바로 푸는 것을 허용하는 수준. degree-two consitency와 같다. T1에서 아이템 Q를 두 번 읽을 때, 첫 번째 읽고 난 후 다른 트랜잭션이 Q를 바뀌게 되면 T1에서 읽은 Q값이 다른 상황도 발생한다. 이것을 감수하고 performance를 선택하는 수준이다.

repeatable read: commited 된 값을 읽고 계속해서 같은 아이템에 대해서 읽기 연산을 해도 아이템의 값이 동일함을 보장하는 수준. phantom 현상이 생길 수 있다. 즉, read하는 도중 insert나 delete를 하면 다른 데이터를 읽을 수 있다. T1에서 R(Q) R(Q) 두번 하면 L(Q) R(Q) R(Q) UL(Q) 와 같이 진행된다. 첫 번째 R(Q) 바로 다음에 insert를 하게 되면 다른 값이 읽혀지게 되는 것이 phantom 현상이다.

serializable: default

 

많은 상용 소프트웨어에서  read commited 수준을 사용하고 있다. 설정하는 방식은 다음과 같다.

SQL2에서는 read write, serializable이 기본이다. read uncommitted로 설정했을 때에는 read only가 기본 값이다. 

 

Transaction Isolation Effect

4가지 레벨에 대해서 locking의 효과는 다음과 같다.

Transaction Isolation Effect