728x90
< 목차 >
0. TL;DR
1. 트랜잭션의 개념
2. 트랜잭션의 4가지 성질
3. 동시성
0. TL;DR
- 트랜잭션: DBMS에서 데이터를 다루는 ‘논리적 작업 단위’
- 트랜잭션의 4가지 성질: 원자성, 일관성, 고립성, 지속성
- 락(lock): 트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금장치
1. 트랜잭션의 개념
: DBMS에서 데이터를 다루는 ‘논리적 작업 단위’
- 단일 SQL문을 사용하기도 하지만 여러 개의 SQL문을 순차적으로 수행하기도 함
- 장애 시에 데이터를 복구(롤백)하는 단위가 되기도 함
- DB에서 여러 작업이 같은 데이터를 동시에 다룰 때, 작업을 분리하는 단위가 되기도 함
- 전체가 수행되거나 아예 수행되지 않아야 함 (all or nothing)
- DB에 저장된 데이터를 다루고, DBMS에 의해 처리됨
BEGIN TRANSACTION // 트랜잭션의 시작
A 계좌에서 10000을 인출 (UPDATE)
B 계좌에서 10000을 입금 (UPDATE)
COMMIT TRANSACTION // 끝을 표시 (작업이 무사히 완료됨을 의미)
2. 트랜잭션의 4가지 성질
원자성 | 전부 수행되거나 수행되지 않음 |
일관성 | 수행 전 or 수행 후, 늘 일관된 상태 유지 |
고립성 | 수행 중에 다른 트랜잭션이 끼어들어, 변경 중인 데이터 값을 훼손하는 일이 없어야 함 |
지속성 | 성공적으로 완료한 데이터는 영구히 저장 |
(1) 원자성
: 트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 단위로 동작해야 함을 의미
- 전부 수행하거나 전부 수행되지 않거나
- BEGIN TRANSACTION, COMMIT TRANSACTION 명령어 사용
- 중간에 작업을 멈추면, 회복(recovery) 알고리즘을 이용해 변경 내용 취소
- 자의적으로 트랜잭션 취소하는 명령어: ROLLBACK
명령어 | 문법 | 설명 |
BEGIN | BEGIN {TRAN | TRANSACTION} | 트랜잭션 시작 표시 |
COMMIT | COMMIT {TRAN | TRANSACTION} | 트랜잭션 종료 표시 |
ROLLBACK | ROLLBACK {TRAN | TRANSACTION} [<savepoint>] | 트랜잭션 전체 or 부분 취소 |
SAVE | SAVE {TRAN | TRANSACTION} [<savepoint>] | 중간 저장 포인트 생성 |
(2) 일관성
: 실행되는 과정에서는 일시적으로 일관성이 유지되지 않을 수 있지만, 모든 작업이 완료된 경우에는 일관성이 유지되어야 함
테이블이 생성될 때, CREATE문과 ALTER문의 무결성 제약 조건을 통해 명시한다.
(3) 고립성
: 동시에 수행되는 트랜잭션이 상호 존재를 모르고 독립적으로 수행되는 것
고립성(isolation) 유지를 위해 변경 중인 임시 데이터를 타 트랜잭션이 읽고 쓸 때 제어가 필요하다. (= isolation level)
(4) 지속성
: 트랜잭션이 정상적으로 완료 or 부분완료 한 데이터는 DBMS가 DB에 기록
DBMS 시스템은 작업한 내용을 로그에 기록하고,
문제 발생 시에 로그 파일을 이용해 복구 작업을 수행한다.
트랜잭션과 DBMS
3. 동시성
- 동시성 제어: 일관성을 해치지 않도록 접근을 제어하는 것
- 갱생 손실 문제: 2개의 트랜잭션이 1개의 데이터를 동시에 갱신할 때 발생 ⇒ 이를 해결하기 위해서 lock을 사용
락(lock)
: 트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금장치
동시 처리할 때, 순서를 제어하여 갱신손실 문제를 해결한다.
- 공유락(shared lock): 읽기를 사용할 때 사용
- 배타락(exclusive lock): 읽고, 쓰기를 할 때 사용
이러한 락의 규칙은 다음과 같다.
- 데이터에 락이 걸려있지 않으면 락 요청 가능
- 타 트랜잭션이 데이터 X를 읽기만 할 경우: LS(X, 공유락) 요청은 허용하고, LX(X, 배타락)은 허용 안 함
- 타 트랜잭션이 데이터 LS(X)를 획득한 경우: LS(X)의 요청은 허용, LX(X)는 허용 안 함
- 타 트랜잭션이 데이터 LX(X)를 획득한 경우: LS(X)와 LX(X) 모두 허용 안 함
- 트랜잭션이 락을 획득받지 못하면 대기 상태 유지
728x90
'CS (Computer Science)' 카테고리의 다른 글
[개발 공부 103일차] DB 개론 | 데이터베이스 모델링 개념 (2) | 2024.09.25 |
---|---|
[개발 공부 102일차] DB 개론 | 데이터베이스 보안과 권한 관리 (0) | 2024.09.24 |
[개발 공부 100일차] DB 개론 | 관계대수 (2) | 2024.09.22 |
[개발 공부 99일차] DB 개론 | 관계형 데이터 모델 (25) | 2024.09.21 |
[개발 공부 97일차] DB 개론 | 데이터베이스의 유형 및 특징 (5) | 2024.09.08 |