[SQLP] 이론 5. Transaction

2021. 12. 3. 23:50Study/Database

1. 트랜잭션

 - 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위

 - 상호독립적

 - 트랜잭션 간에는 서로 간섭하지 않음

 

2. 4대 특징

 1) 원자성 Atomicity

    - All or Nothing

 2) 일관성 Consistency

    - 데이터 조작 전후 데이터가 일관성이 있어야함

 3) 고립성 Isolation

    - 동시에 데이터 조작을 실행할 경우, 모순 없이 실행되는 것을 보증

 4) 지속성 Durability

    - Commit 후 데이터 변경사항이 확정되는 것

 

3. 격리 수준 (ANSI표준)

Level Description Level 동시성  Dirty
Read
Non-Repeatable
Read
Phantom
Read
Read
Uncommitted
아직 Commit 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 낮음










높음
높음










낮음
O O O
Read
Committed
트랜잭션이 Commit 확정된 데이터만 다른 트랜잭션에서 읽도록 허용 X O O
Repeatable
Read
쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀜 X X O
Serializable 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌지 않음 (새 레코드도 X) X X X

 - 가장 이상적인것은 직렬화 이나, 동시성을 보장할 수 없으므로 사용하지 않음

 - 필요한 경우에만 수준을 변경함

 

4. Lock & Dead Lock

 1) Lock : 데이터 일관성 보장을 위한 작업, 다른 트랜잭션에서는 현재 수정중인 데이터를 수정할 수 없음

Lock Type Name Description
공유락 Shared Lock LS 트랜잭션이 읽기를 할 때 사용하는 락
베타락 Exclusive Lock LX 읽고 쓰기를 할 때 사용하는 락

    - 읽기 -> LS, 읽기/쓰기 -> LX 요청

    - 현재 LS 상태인 경우, LS만 허용 (LX는 대기상태)

    - 현재 LX 상태인 경우, LS, LX 모두 비허용 (대기상태)

  2) Dead Lock : 락이 걸려있는 여러 트랜잭션에서 서로에게 락 허용을 요청할 때, 무한 대기 상태에 빠질 수 있음 (교착상태)

 

5. 트랜잭션 처리 시 주의사항

  - 데드락 최소화를 위한 전략

  - Auto Commit (Commit 부하), 긴 트랜잭션 지양

  - 시스템 요건에 맞게 트랜잭션 격리 수준 조정 필요