
: 여러 트랜잭션을 동시에 처리시, 트랜잭션의 결과를 다른 트랜잭션에게 어떻게 노출 할지 결정 하는것
동시성과 데이터 무결성을 적절하게 설정해야한다. (동시성이 올라갈 경우, 데이터 무결성문제가 발생할 수 있다.)Transaction? 사람이 설계한 논리적인 작업 단위
원자성 (Atomicity): 모두 반영되던가, 아니면 전혀 반영되지 않아야함.
일관성 (Consistency): 작업 처리 결과가 항상 일관성이 있어야함. (진행중에 DB변화가 있어도 처음에 참조한 DB로 진행되어야함.)
독립성 (Isolation): 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없음.
지속성 (Durability): 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 함.
: 레벨이 낮을 수록 고립정도는 낮고, 성능은 높다.
= (아직 커밋되지 않은) 트랜잭션의 변경내용이 데이터를 다른 트랜잭션이 읽는것을 허용Dirty Read= (아직 커밋되지 않은) 트랜잭션의 변경내용이 데이터를 다른 트랜잭션이 읽는것을 비허용Undo 영역에 백업된 레코드에서 값을 가져온다.Phantom Read 발생가능하다.범위 내에서 조회한 데이터의 내용이 항상 동일함을 보장한다.Lock? 데이터의 일관성을 보장하기 위한 방법
Exclusive Lock(배타적 Lock 또는 Write lock)
어떤 트랜잭션에서 데이터를 변경하고자 할 때(ex . 쓰고자 할 때) 해당 트랜잭션이 완료될 때까지 해당 테이블 혹은 레코드(row)를 다른 트랜잭션에서 읽거나 쓰지 못하게 하기 위해 Exclusive lock을 걸고 트랜잭션을 진행시키는 것이다.
→ exclusive lock에 걸리면 shared lock을 걸 수 없다. (shared lock은 아래에서 설명)
→ exclusive lock에 걸린 테이블,레코드등의 자원에 대해 다른 트랜잭션이 exclusive lock을 걸 수 없다.Shared Lock(공유 Lock 또는 Read Lock)
어떤 트랜잭션에서 데이터를 읽고자 할 때 다른 shared lock은 허용이 되지만 exclusive lock은 불가하다.
쉽게 말해 리소스를 다른 사용자가 동시에 읽을 수 있게 하되 변경은 불가하게 하는 것이다.
→ 어떤 자원에 shared lock이 동시에 여러개 적용될 수 있다.
→ 어떤 자원에 shared lock이 하나라도 걸려있으면 exclusive lock을 걸 수 없다.
| Isolation Level | Dirty Read | Non-Repeatable Read | Phantom Read |
|---|---|---|---|
| Read Uncommitted | O | O | O |
| Read Committed | - | O | O |
| Repeatable Read | - | - | O |
| Serializable | - | - | - |
Reference