일단 진행시켜

트랜잭션, 동시성 제어 본문

🗄️Data Base 아는 것도 다시보자

트랜잭션, 동시성 제어

2024. 8. 5. 22:57

1. 트랜잭션

  • DBMS에서 실행되는 단일 작업 단위
  • 한 번에 실행되어야 하는 단위
  • 특히 여러 트랜잭션이 동시에 발생할 수 있는 다중 사용자 환경에서 데이터 무결성과 일관성을 보장하는 데 중요

 

2. 트랜잭션 주요 속성: ACID

 

2.1. 원자성

  • 트랜잭션 내의 모든 작업이 성공적으로 완료되도록 보장한다.
  • 작업이 실패하면 트랜잭션 중단 -> 모든 변경 사항이 rollback -> 원래 상태 유지

 

2.2. 일관성

  • DB의 무결성 제약 조건과 규칙을 유지하면서 DB를 하나의 유효한 상태에서 다른 유효한 상태로 가져오도록 보장한다.

 

2.3. 독립/격리성

  • 외부 간섭 없이 트랜잭션이 독립적으로 발생하도록 보장한다.
  • 트랜잭션의 중간상태는 다른 트랜잭션에서 보이지 않으므로, 트랜잭션의 부분적인 결과를 볼 수 없게 된다.

 

2.4. 영구성

  • 일단 트랜잭션이 commit 되면 시스템 오류가 발생하더라도 변경 사항이 영구적으로 유지되도록 보장한다.

 

 

DBMS에서 Transaction을 구현하려면 아래와 같은 SQL문을 사용한다.

 

 

BEGIN TRANSACTION;

INSERT INTO accounts (account_id, balance) VALUES (1, 1000);
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT;

 

새 계좌 1을 삽입하고, 1에서 2라는 계좌로 100을 이체하는 작업이다.

이러한 작업 중 하나라도 실패하면 일관성무결성이 깨진다.

 

 

일관성: 모든 작업이나 트랜잭션 이후 데이터의 정확성과 유효성

무결성: 정확성, 유효성, 일관성 유지

 

 

 

작업 중 하나라도 실패하더라도, 일관성과 무결성을 유지해야 한다.

그러기 위해서 트랜잭션 rollback을 한다.

 

 

 

다시 표로 정리해보자.

 

Atomicity ALL or NOTHING
commit / rollback
Consistency ex. 계좌 잔액음 음수가 될 수 없음
Isolation 트랜잭션 작업 수행 중에는 다른 트랜잭션에 영향을 주어서도/받아서도 안 됨
Durability 시스템 문제 여부와 상관없이 완료된 데이터는 영구적으로 DB에 저장

 

 

 

 

 

 

2. 동시성 제어 메커니즘

특히 다중 사용자 환경에서 트랜잭션을 올바르게 처리하기 위해 동시성 제어 메커니즘을 사용한다.

여러 사용자가 동시에 DB에 접근할 때 발생할 문제를 방지/해결한다.

 

 

동시성 제어의 장점?

➡️ 여러 사용자가 동시에 같은 DB에 접근할 때 발생할 문제를 해결해 줌

➡️ 데이터 무결성, 일관성 유지

➡️ 직렬성 보장: 순차적 처리 결과와 동일한 상태를 유지

➡️ 시스템 처리량 증가

 

 

동시성 제어의 문제점❗

1. 갱신 손실(Update Loss)

  • 두 트랜잭션이 동시에 같은 데이터를 업데이트할 때 한 트랜잭션의 변경사항이 다른 트랜잭션에 의해 덮어쓰게 되어
  • 의도와는 다른 결괏값이 저장됨

2. 상태 결정 오류(Error in Determining Status)

  • 여러 트랜잭션이 동시에 실행될 때 데이터의 상태를 잘못 판단하여 생기는 오류
  • 데이터 일관성을 해침

3. 모순(Contradiction)

  • 동시성 제어가 제대로 이루어지지 않으면 두 개 이상의 트랜잭션이 서로 상충되는 작업을 수행할 수 있음
  • 하나의 트랜잭션이 변경하는 동안 다른 트랜잭션이 해당 데이터를 변경하면 데이터 무결성이 깨지게 됨

4. 연쇄 복귀(Cascading Rollback)

  • 한 트랜잭션이 rollback 할 때, 연관된 트랜잭션도 같이 rollback을 못 하는 경우