트랜잭션이란?
데이터베이스의 상태를 변환시키기 위해 수행하는 작업의 단위
트랜잭션 ACID
1. 원자성
트랜잭션 내에서 실행한 작업들은 하나의 작업과 같이 모두 성공하든가 모두 실패해야 한다.
2. 일관성
모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다.
3. 고립성
하나의 트랜잭션의 실행은 동시에 실행중인 다른 트랜잭션들의 간섭을 받아선 안된다.
4. 지속성
수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야한다
이상현상
1. 삽입이상
튜플 삽입 시 특정 속성에 해당 하는 값이 없어 NULL이 들어가는 현상
2. 수정이상
튜플 수정 시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상
3. 삭제이상
튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
트랜잭션 고립 레벨
- 트랜잭션들끼리 일관성있는 데이터를 얼마나 허용할 것인지 정해놓은 수준
- 즉, 트랜잭션 수행 중 다른 트랜잭션이 해당 데이터를 조회하는 것이 가능한지의 정도를 결정해 놓은 것
- 고립 수준이 높을 수록 일관성은 보장되지만 그만큼 동시성이 떨어진다. (성능 하락)
READ UNCOMMITED (Level 0)
- 아직 commit 하지 않은 데이터를 다른 트랜잭션에서 읽을 수 있는 경우
- Dirty Read, Non Repeatable Read, Phantom Read 발생 가능
READ COMMITED (Level 1)
- 트랜잭션 수행이 완료되고 commit 된 데이터만 읽을 수 있다.
- Non Repeatable Read, Phantom Read 발생 가능- 일반적으로 DBMS에서 Default로 설정하는 레벨
REPEATABLE READ (Level 2)
- 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회된다.
- Phantom Read 발생 가능
SERIALIZABLE (Level 3)
- 특정 트랜잭션에서 읽고 쓰고 있는 데이터는 다른 트랜잭션에서 삽입, 수정, 삭제가 불가능하다.
- 모든 이상 현상 방지 가능
- 동시성 처리 성능 하락
격리 수준 문제점
Dirty Read
- 어떤 트랜잭션에서 아직 실행이 끝나지 않은 트랜잭션에 의한 변경사항을 보게 되는 경우
Non Repeatable Read
- 트랜잭션이 T1이 값을 읽고 이후에 T2가 그 값을 수정하고 다시 T1이 값을 읽었을때 다른값이 읽게됨
Phantom Read
- T1이 하나의 행을 읽는 후에 T2가 T1이 만족한 행에 새로운 행을 넣으면 T1은 이전에 존재하지 않았던 행을 보게 된다.
'Computer Science' 카테고리의 다른 글
[CS] 프로세스와 쓰레드 (0) | 2023.01.14 |
---|---|
[CS] 알고리즘 (0) | 2022.12.30 |
댓글