Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

IT 개발일지

[Database] 1. ACID - Atomicity 본문

카테고리 없음

[Database] 1. ACID - Atomicity

맛난밤송이 2024. 4. 3. 00:45

Atomicity(원자성)

- 더이상 쪼개질 수 없다는 특성이라는 의미를 함축 => 트랜잭션이 여러가지 쿼리가 하나의 작업으로 묶여있기 때문에 해당 트랜잭션을 더이상 쪼갤 수 없음.

- Transaction의 모든 쿼리는 성공해야 함

- 만약, 트랜잭션 도중 한 Query가 실패하면, 이전에 트랜잭션 내에서 성공적으로 실행되었던 모든 쿼리들은 ROLLBACK되어야 한다.

- 만약 데이터베이스가 다운되었다면, 이전에 트랜잭션 내에서 성공적으로 실행되었던 모든 쿼리들은 ROLLBACK되어야 한다.

 

예시

- 해당 SQL구문은 Account A에서 Account B로 100$를 송금할 때의 상황을 가정한 것이다.

 

* 초기

account_id balance
1 $1000
2 $500

 

-- MySQL 예시
START TRANSACTION;

SELECT balance FROM accounts WHERE id = 1;

UPDATE accounts set balance = balance - 100 WHERE id = 1;

-- Crash 발생--

 

* Crash 이후

account_id balance
1 $900
2 $500

 

- A에서 100달러를 차감한 Query까지는 성공하였지만, B에서 100달러를 추가해야 하는 쿼리를 수행하기 직전, 모종의 이유로 데이터베이스 down

- 해당 경우를 방지하기 위해, 마지막 Commit 상태였던 A : $1000, B: $500 인 상태로 ROLLBACK해줘야 한다.


Transaction 처리 방식

 

1. 트랜잭션 중 Disk에 기록

   1. Query 느림(I/O작업)

   2. Commit 빠름

   3. Rollback 느림(디스크에 저장된 값을 Rollback해야 하므로)

예시 DBMS: Oracle, PostgreSQL, MySQL (InnoDB 엔진의 경우)

 

2. 트랜잭션 중 Memory에 기록

   1. Query가 빠름

   2. Commit 느림(Disk에 flush하는 과정)

   3. Rollback 빠름

 

 


출처

- Fundamentals of Database Engineering, Udemy