Development/면접을 위한

[4월 23일] 오늘의 주제: DB

DevKTak 2023. 4. 23. 15:19

Transaction isolation level 종류 및 특징

  • READ UNCOMMITTED (레벨 0)
    • SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 계층
    • 각 트랜잭션에서의 변경내용이 commit 이나 rollback 여부에 상관없이 다른 트랜잭션에서 값을 읽을 수 있다.
    • Dirty Read 발생!
    • 정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것을 권장

  • READ COMMITTED (레벨 1)
    • SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층
    • 트랜잭션이 수행되는 동안 다른 트랜잭션이 접근할 수 없어 대기하게 됨
    • Commit이 이루어진 트랜잭션만 조회 가능
    • Oracle, SQL Server에서 기본으로 사용
    • Non-Repeatable Read 발생!

  • Repeatable Read (레벨 2)
    • 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸리는 계층
    • 트랜잭션 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장
    • MySQL에서 기본으로 사용
    • Phantom Read 발생!

  • Serializable (레벨 3)
    • 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸리는 계층
    • 가장 엄격한 격리 수준으로 완벽한 읽기 일관성 모드를 제공함
    • 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 및 입력 불가능

* Dirty Read: 트랜잭션 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있게 되는 현상

* Non-Repeatable Read: 한 트랜잭션에서 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션 값을 수정 또는 삭제하면서 두 쿼리의 결과가 상이하게 나타나는 일관성이 깨진 현상

* Phantom Read: 한 트랜잭션 안에서 일정 범위의 레코드를 두 번 이상 읽었을 때, 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상, 트랜잭션 도중 새로운 레코드 삽입을 허용하기 때문에 나타남

Isolation Level 선택 시 고려사항

  • 동시성을 증가시키면 데이터 무결성에 문제가 발생하고, 데이터 무결성을 유지하면 동시성이 떨어지게 된다.
  • 레벨을 높게 조정할 수록 발생하는 비용이 증가한다.

* 무결성(integrity): 데이터의 정확성, 일관성, 유효성이 유지되는 것

 

 

https://nesoy.github.io/articles/2019-05/Database-Transaction-isolation

 

공유 락과 배타 락

https://hudi.blog/mysql-8.0-shared-lock-and-exclusive-lock

 

MySQL 8.0의 공유 락(Shared Lock)과 배타 락(Exclusive Lock)

락의 종류와 전략은 DBMS 벤더사마다 조금씩 다르다. 본 포스팅은 MySQL 8.0 InnoDB 기준으로 설명한다. DBMS에서 특정 데이터에 대한 동시 접근이 발생한 경우 일관성과 무결성 지키기 위해 해당 데이

hudi.blog

 

 

'Development > 면접을 위한' 카테고리의 다른 글

[4월 16일] 오늘의 주제: 네트워크  (0) 2023.04.18