-
Notifications
You must be signed in to change notification settings - Fork 0
5조 240821 트랜잭션 학습
Kim Minju edited this page Aug 21, 2024
·
4 revisions
- 트랜잭션의 격리 수준: 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할 지 말지를 결정하는 것
DIRTY READ | NON-REPEATABLE READ | PHANTOM READ | |
---|---|---|---|
READ UNCOMMITTED | 발생 | 발생 | 발생 |
READ COMMITTED | 없음 | 발생 | 발생 |
REPEATABLE READ | 없음 | 없음 | 발생 (InnoDB는 발생 X) |
SERIALIZABLE | 없음 | 없음 | 없음 |
- MySQL은 REPEATABLE READ를 주로 사용하고 Oracle의 경우 READ COMMITTED 수준을 많이 사용한다.
- 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부와 상관 없이 다른 트랜잭션에서 보여진다.

- Dirty Read: 어떤 트랜잭션이 처리한 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있는 현상
- Dirty Read 현상은 데이터가 나타났다가 사라졌다가 하는 현상을 초래함
- 어떤 트랜잭션에서 데이터를 변경했더라도 COMMIT이 완료된 데이터만 다른 트랜잭션에서 조회할 수 있다.
- Oracle DBMS에서 기본으로 사용되는 격리

- NON-REPEATABLE READ: 하나의 트랜잭션에서 똑같은 SELECT 쿼리를 실행했을 때 항상 같은 결과를 갖고지 않는다.

NON-REPEATABLE READ 상황
- ROLLBACK 가능성에 대비해서 동일 트랜잭션 내에서는 동일한 결과값을 보여준다.
- InnoDB 스토리지 엔진에서 기본으로 사용하는 격리 수준

- PHANTOM READ: 서로 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안보였다가 하는 현상 → (ex. INSERT QUERY)
- InnoDB는 REPEATABLE READ에서도 PHANTOM READ가 발생하지 않는다.
- 읽기 작업시에도 공유 잠금을 획득해야하며 동시에 다른 트랜잭션이 레코드를 변경하지 못한다.
- 가장 단순한 격리 수준이면서 동시에 가장 엄격한 격리 수준 → 동시 처리 성능도 다른 트랜잭션 격리 수준보다 떨어져요…