transaction
-
트랜잭션 (Transaction)2024.01.22
트랜잭션 (Transaction)
2024. 1. 22. 23:32
DBMS에서 데이터를 다루는 논리적인 작업의 단위
- 트랜잭션을 정의하는 이유
- DB에서 데이터를 다룰때 장애가 일어날 때 데이터를 복구하는 작업의 단위가 된다.
- DB에서 여러 작업이 동시에 같은 데이터를 다룰 때 작업을 서로 분리하는 단위가 된다.
- 트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다. (all or nothing)
ex) 은행 이체 업무
BEGIN
1\. A계좌에서 10,000원을 인출하는 UPDATE문
2\. B계좌에서 10,000원을 입금하는 UPDATE문
END
- 트랜잭션의 수행 과정

- 트랜잭션 1을 생성한다
- 트랜잭션 2를 생성한다
- T1의 값을 DB에서 주기억장치 버퍼로 읽어온다
- T2의 값을 DB에서 주기억장치 버퍼로 읽어온다
- T1에서 도서 가경을 7100원으로 업데이트 한다
- T2에서 도서 가격 +100원 값으로 업데이트 한다
- T1값을 주기억장치 버퍼에서 DB에 기록한다 (COMMIT)
- T2값을 주기억장치 버퍼에서 DB에 기록한다 (COMMIT)
- 트랜잭션의 성질 (ACID)
- 원자성 (Atomicity) : 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야한다.
all or nothing
- 일관성 (Consistency) : 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야한다.
- 고립성 (Isolation) : 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터값을 훼손하는 일이 없어야한다.
- 지속성 (Durability) : 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야한다.
- 원자성 (Atomicity) : 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야한다.
- 동시성 제어 (concurrency control)
- 트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능
상황 | 트랜잭션1 | 트랜잭션2 | 발생문제 | 동시 접근 |
상황1 | 읽기 | 읽기 | 문제 없음 | 허용 |
상황2 | 읽기 | 쓰기 | 오손 읽기, 반복 불가능 읽기, 유령데이터 읽기 | 허용/불가 중 선택 |
상황3 | 쓰기 | 쓰기 | 갱신손실(절대 허용하면 안 됨) | 허용불가 (Lock을 이용) |
- 갱신 손실 (lost update)
- 두개의 트랜잭션이 한 개의 데이터를 동시에 갱신(update)할 때 발생
- 데이터베이스에서 절대 발생하면 안되는 현상
- T2에서 잘못 된 결과를 만든 다음 T1의 갱신 작업을 무효화 하고 덧쓰기 작업을 수행하게 될 수 있다.
이때 T1에서 갱신손실 문제 가 발생한다.
- 락(Lock)
- 갱신손실 문제를 해결하려면 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요하다
- 데이터를 수정 중이라는 사실을 알리는 방법의 잠금장치이다
- 공유락 (LS, shared lock) : 읽기
배타락 (LX, exclusive lock) : 읽고 쓰기
요청 / 상태 | LS 상태 | LX 상태 |
LS 요청 | 허용 | 대기 |
LX 요청 | 대기 | 대기 |
'💻 IT > DB' 카테고리의 다른 글
일하면서 배운 MYSQL ++계속 추가 (0) | 2024.05.16 |
---|---|
mariadb sql문 (+생각 날 때 마다 추가 예정) (0) | 2024.02.29 |
데이터 모델링 (0) | 2024.02.26 |