Transaction
데이터베이스 내에서 수행되는 작업의 최소 단위, 데이터베이스의 무결성을 유지하며 DB의 상태를 변화시키는 기능을 수행
하나 이상의 query를 포함해야 하고, ACID 4가지 규칙을 만족해야 함.
ACID
- Atomicity(원자성) : transaction에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 말아야 함 (all or nothing)
- Consistency(일관성) : transaction이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미, 송금 전후 모두 잔액의 data type은 integer여야 한다는 것
- Isolation(고립성) : 여러 transaction은 동시에 수행 됨. 이때 각 transaction은 다른 transaction의 연산 작업이 끼어들지 못하도록 보장하여 독립적으로 수행, 따라서 동시에 수행되는 transaction이 동일한 data를 가지고 충돌하지 않도록 제어해줘야 함. (동시성 제어)
- Durability(지속성) : 성공적으로 수행된 transaction은 데이터베이스에 영원히 반영되어야 함을 의미, transaction이 완료되어 저장된 데이터베이스는 정전, 장애, 오류 등에 영향을 받지 않아야 함
동시성 제어(concurrency control)
- transaction이 동시에 수행될 때 일관성을 해치지 않도록 transaction의 데이터 접근을 제어하는 DBMS의 기능
- 갱신손실 : 여러 개의 transaction이 한 개의 데이터를 동시에 갱신(update) 할 때 어느 한 transaction의 갱신이 무효화 되는 것
-> 데이터를 수정중에 있는 transaction은 해당 데이터를 Lock로 잠금장치를 하여 다른 transation이 접근하지 못하게 하는 방법으로 갱신손실 해결, Lock 걸린 데이터는 Unlock이 될 때까지 다른 transaction들은 접근하지 못하고 대기
COMMIT & ROLLBACK
- commit : transaction 작업을 완료했다고 확정하는 명령어, transaction 작업 내용을 실제 DB에 저장하고, DB가 변경
- rollback : 작업 중 문제가 발생했을 때, transaction 처리 과정에서 발생한 변경 사항을 취소하고, 이전 commit 상태로 되돌림
DeadLock
두 transaction이 각각 lock을 설정하고, unlock을 하지 않은 상태에서 서로의 lock이 걸린 데이터에 접근하려고 할 때, 서로 대기를 계속하여 영원히 처리되지 않은 상황이 발생
해결방법
1. 예방기법
각 transaction이 실행되기 전에 필요한 데이터를 모두 locking 해주는 것, 하지만 locking 해줘야 하는 데이터가 많다면 사실상 모든 데이터를 전부 locking 한 것과 동일하여 transaction의 병행성을 보장하지 못할 수 있음
2. 회피기법
자원을 할당할 때 timestamp을 사용하여 deadlock가 일어나지 않도록 회피하는 방법
3. 탐지/회복 기법
transaction이 실행되기 전에는 아무런 검사를 하지 않고, deadlock이 발생하면 이를 감지하고 회복 시키는 방법