: 여러 트랜잭션을 동시에 처리시, 트랜잭션의 결과를 다른 트랜잭션에게 어떻게 노출 할지 결정 하는것
동시성
과 데이터 무결성
을 적절하게 설정해야한다. (동시성이 올라갈 경우, 데이터 무결성문제가 발생할 수 있다.)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