Transaction
- transaction: a unit of progam execution that accesses and possibly updates various data items.
- 예를 들어 A 계좌에서 B 계좌로 돈을 송금하기 위한 트랜잭션
- Two main issues
- hardware failures and system crashes
- concurrent execution of multiple transactions
ACID Properties
데이터베이스의 데이터 무결성(integrity)을 보존하기 위해 데이터베이스 시스템이 보장해야 하는 속성들
- Atomicity (원자성): 모든 트랜잭션은 데이터베이스에 적절히 반영되거나 아무것도 반영되지 않아야 한다.
- Consistency (일관성): 독립된 트랜잭션의 수행은 데이터베이스의 일관성을 보존해야 한다.
- Isolation (독립성): 다수의 트랜잭션이 동시에 실행되더라도 각 트랜잭션은 동시에 실행되는 다른 트랜잭션의 실행을 알지 못해야 한다.
- 중간의 트랜잭션 결과는 실행 중인 다른 트랜잭션에게서 숨겨져야 한다.
- Durability (지속성): 트랜잭션이 성공적으로 종료된 후 그 변화는 시스템 오류가 있더라도 데이터베이스에 지속되어야 한다.
Example of Fund Transfer
- Atomicity requirement
- 3번 스텝에서 트랜잭션이 실패하면 일관되지 않은 데이터베이스 상태로 인한 돈의 손실이 발생
- Durability requirement
- 사용자가 트랜잭션이 완료되었다는 것을 알게된 후에는 소프트웨어나 하드웨어의 오류가 있더라도 데이터베이스의 업데이트가 지속되어야 한다.
- Failure Types: transaction / system / media failures
- Consistency requirement
- 계좌 A와 B의 합은 트랜잭션 수행 이후에도 변화하지 않아야 한다.
- 다음을 포함
- 명시적 무결성 제약 조건: 기본 키 및 외래 키
- 암묵적 무결성 제약 조건 - ex. 계좌의 잔액 합과 대출 금액 합을 뺀 값이 현금 보유량과 같아야 한다.
- 트랜잭션 수행 동안에는 일시적으로 일관적이지 않을 수 있으나 끝난 후에 데이터베이는 일관되야 함.
- 잘못된 트랜잭션 로직이 비일관성을 초래 가능
- Isolation requirement
- step 3과 6 사이에 다른 트랜잭션 T2가 부분적으로 수정되니 데이터베이스에 접근하면 비일관성을 볼 수 있다.
- Isolation은 트랜잭션을 순차적으로 실행함으로써 보장가능하지만 동시 트랜잭션의 이익이 크다.
Concurrent Executions
- Multiple transactions의 장점
- 프로세서와 디스크 활용도 증가는 트랜잭션 처리량 증가로 이어진다.
- 트랜잭션 평균 응답 시간을 줄인다. -> 짧은 트랜잭션이 긴 트랜잭션을 기다리지 않아도 된다.
- Concurrency control schemes
- isolatiion을 달성하기 위한 메커니즘
Schedules
- Schedule: 동시 실행되는 트랜잭션들의 명령어들의 실행되는 순서를 지정하는 시퀀스
- 성공적으로 실행 종료하는 트랜잭션은 commit instruction을 마지막에 갖는다.
- 실패하면 마지막에 abort instruction을 갖는다.
Schedule 1
- T1: A -> B로 $50 송금
- T2: A -> B로 A잔액의 10% 송금
- serial schedule : T1 -> T2
Schedule 2
- serial schedule: T2 -> T1
Schedule 3
- serial schedule은 아니지만 Schedule 1과 동일함
Schedules 1, 2, 3에서 A + B은 보존됨
Schedule 4
- A + B이 보존되지 않음
Serializability
- Basic Assumption: 각 트랜잭션은 데이터베이싀 일관성을 보존한다.
- A schedule is serializable if it is equivalent to a serial schedule.
Simplified view of transactions
- read and write instructions를 제외한 operations를 무시
Conflicting Instructions
- instruction I_i와 I_j이 적어도 한 번 write하는 동일한 item Q가 존재한다면 transaction T_j와 T_i는 conflict
- I_i와 I_j 사이 충돌이 발생하면 둘 사이에는 시간적 실행 순서가 강제된다.
- 만약 두 instruction의 순서가 연속적이고 충돌하지 않는다면 순서를 뒤바꿔도 결과는 유지된다.
Conflict Serializability
- schedule S의 non-conflicting instructions을 바꿔서 schedule S'을 만들 수 있다면 S와 S'은 conflict equivalent하다.
- schedule S is conflict serializable if it is conflict equivalent to a serial schedule.
Recoverable Schedules
- Recoverable schedule: 트랜잭션 T_j가 T_i에 의해 쓰여진 데이터 아이템을 읽었다면 T_i의 commit은 T_j의 commit 이전에 나타나야 한다.
Cascading Rollbacks
- Cascading rollback: 하나의 트랜잭션 실패가 다른 트랜잭션들의 롤백을 초래
Cascadeless Schedules
- Cascadeless schedule: cascading rollback이 발생하지 않음
- 트랜잭션 T_j가 T_i에 의해 쓰여진 데이터 아이템을 읽으려면 T_i의 commit이 T_j의 read operation보다 선행되어야 함.
- 모든 cascadeless schedule은 recoverable하다.
Concurrency Control
- 데이터베이스는 모든 가능한 schedule이 다음과 같은 메커니즘을 제공해야 한다.
- conflict or view serializable
- recoverable and preferably cascadeless
- Concurrency control 스키마는 동시성의 양과 그것들이 초래하는 오버헤드의 양의 tradeoff
- 스키마에 따라 오직 conflic-serializable schedule만 허용하거나 view-serializable 하지만 conflict serializable하지 않은 schedule만 허용한다.
Transaction Isolation
- Dirty Read: 커밋되지 않은 다른 세션의 트랜잭션이 변경한 열을 읽을 수 있음
- 변경한 트랜잭션이 롤백하면 읽은 데이터가 사라짐
- Non-repeatable Read: 한 트랜잭션에서 읽은 열을 다른 세션의 트랜잭션에서 변경하고 커밋할 수 있음
- 첫 세션의 트랜잭션에서 다시 읽는다면 값이 변경됨
- Phantoms: 한 세션에서 특정 조건에 해당하는 열의 집합을 읽을 수 있고 다른 세션은 조건에 맞는 열을 추가한 후 커밋할 수 있음
- 첫 세션의 트랜잭션에서 다시 조회하면 새로운 열을 발견함
Weak Levels of Consistency
- 성능과 정확성의 tradeoff를 고려하여 적절한 일관성 수준을 선택
Levels of Consistency in SQL-92
- Serializable - default
- Repeatable read - 커밋된 레코드만 읽으며 동일한 read는 동일한 값을 읽음
- Read committed - 커밋된 레코드만 읽을 수 있으나 동일한 read가 다른 값을 읽을 수 있음
- Read uncommitted - 커밋되지 않은 레코드도 읽음
'대학공부 > 데이터베이스' 카테고리의 다른 글
7. Concurrency Control (0) | 2025.04.05 |
---|---|
6. Recovery System (2) | 2025.04.04 |
4. Relational Database Design (Normalization) (0) | 2025.03.23 |
3. Database Design and E-R Model (0) | 2025.03.19 |
2. SQL (0) | 2025.03.18 |