트랜잭션의 격리 수준은 여러가지 단계가 있습니다.
Lock 또는, MVCC(multiversion concurrency control)를 사용합니다.
Level0, Read Uncommitted는 트랜젝션에서 처리중인,
아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용합니다.
Dirty Read현상이 발생합니다.
정합성에 문제가 많아 주로 사용하지는 않습니다.
Level1, Read Committed는 커밋되어 확정된 데이터만 읽는 것을 허용합니다.
Non-Reapeatable Read(Inconsistent Analysis)현상이 발생합니다.
읽기를 공유하는 Lock를 이용해서 하나의 레코드를 읽을 때 Lock를 설정하고,
해당 레코드에서 빠지는 순간 Lock을 해제해서 구현하는 방식이 있습니다.
또는 쿼리시작 시점의 Undo데이터를 제공하는 방식으로 구현이 가능합니다.
성능과 정합성에 적절한 타협을 한 방식으로 DBMS에서 주로 사용합니다.
Level2, Repeatable Read는, 선행 트랜잭션이 읽은 데이터를 트랜잭션이 종료될 때 까지
이후 트랜잭션이 Update/Delete를 하는 것을 허용하지 않습니다.
Phantom Read(첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타남)현상이 발생합니다.
Lock을 커밋할 때 까지 유지하는 방식으로 구현하거나,
각 트랜잭션에 순차적으로 ID를 부여하여,
트랜잭션 ID보다 작은 번호에서 변경된 것만 읽게 하는 방식으로 구현이 가능합니다.
Level3, Serializable는, 트랜잭션을 순차적으로 처리하는 것을 의미합니다.
읽는 것이 가장 엄격하고 정밀한 isolation을 보장하지만,
동시 처리성능이 낮아 거의 사용되지 않습니다.
'공부 정리 > 면접 준비' 카테고리의 다른 글
[ 인공지능 ] 하이퍼 파라미터 튜닝은 어떻게 할 수 있을까? (0) | 2023.03.24 |
---|---|
[ 운영체제 ] Deadlock에 대해서 설명해 보세요. (0) | 2023.03.16 |
[데이터베이스] Transaction, ACID에 대해서 설명해 보세요. (0) | 2023.03.16 |
[ 인공지능 ] 모델의 성능 평가 지표에는 무엇이 있는가? (0) | 2023.03.09 |
[ 인공지능 ] Cross validation이란? (1) | 2023.03.09 |