ComputerScience/Database

[Transaction] ACID, 동시성 제어, 격리수준(Isolation Level), Recovery

개랭갱깽스타 2021. 5. 1. 16:56

1. 트랜잭션, Transaction

더보기
데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위

 

2. 트랜잭션 특징, ACID

더보기

원자성, Atomicity

트랜잭션이 데이터베이스에 모두 반영되거나, 혹은 전혀 반영되지 않아야 된다. 부분적으로 성공하는 일이 없도록 보장하는 성질.
더보기
송금하는 사람의 계좌에서 돈은 빠져나갔는데, 받는 사람의 계좌에 돈이 들어오지 않는 일이 없어야 한다.

 

더보기

일관성, Consistency

트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다. 트랜잭션이 끝날 때 DB의 여러 제약조건에 맞는 상태를 보장하는 성질.
더보기
송금하는 사람의 계좌 잔고가 0보다 작아지면 안된다.

 

더보기

독립성, Isolation

둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
더보기
송금하는 사람의 계좌에서 돈은 빠져나갔는데 받는 사람의 계좌에 돈이 아직 들어가지 않은 데이터베이스 상황을 다른 트랜잭션이 읽으면 안된다.

 

더보기

지속성, Durability

트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.
더보기
한번 송금이 성공하면 은행 시스템에 장애가 발생하더라도 송금이 성공한 상태로 복구할 수 있어야 한다. -- ??

 

3. 트랜잭션 Commit, Rollback

Commit

더보기
하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 (               ) 있는 상태일 때 이를 트랜잭션 관리자에게 알려주기 위해 사용하는 연산
더보기
일관성, Consistency

 

Rollback

더보기
하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 (              )을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 (                )을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(Undo)하는 연산.
더보기
일관성, Consistency / 원자성, Atomicity
더보기

트랜잭션이 정상적으로 종료되지 않았을 때, last consistent state (ex. Transaction 의 시작상태) 로 rollback 할 수 있다.

트랜잭션이 행한 모든 연산을 취소시키거나 트랜잭션을 재시작

 

4. 트랜잭션 동시성 제어, Locking (Concurrency Control)

정의

더보기
트랜잭션이 데이터베이스를 다루는 동안, 다른 트랜잭션이 관여하지 못하도록 막는 것

 

동시성 제어가 제대로 이루어 지지 않을 때

더보기

트랜잭션1 Read / 트랜잭션2 Write

오손읽기(Dirty Read) / 반복읽기불가능(Non-repeatable Read) / 유령데이터읽기(Phontom Read)

 

더보기

트랜잭션1 Write / 트랜잭션2 Write

갱신손실(Lost Update) / 모순성(Inconsistency) / 연쇄복귀(Cascading Rollback)

 

종류

공유락과 베타락 사용, SharedLock & BetaLock

더보기
공유락(LS) - 트랜잭션이 읽기를 할 때 사용 / LS 요청은 허용, LX 요청 허용X
베타락(LX) - 트랜잭션이 읽거라 쓰기를 할 때 사용 / LS, LX 허용 X

 

2단계 락킹

더보기
락을 걸고 헤제하는 시점에 제한을 두지 않으면 두 개의 트랜잭션이 동시에 실행될 때 데이터의 일관성이 깨질 수 있어 이를 방지하는 방법

 

데드락, Deadlock

더보기
두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상
  • 발생조건 회피
더보기
상호배제 / 점유와 대기 / 비선점 / 순환대기

 

5. 트랜잭션 격리(고립)수준, Isolation Level

필요성, WHY

더보기
ACID 원칙을 엄격하게 지키려면 동시성(Concurrency)이 매우 떨어지기 때문 - DB의 성능이 떨어진다.

 

정의

더보기
트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준

 

종류

Level 0

더보기

Read Uncommitted

더보기
SELECT 문장이 수행되는 동안 해당 데이터에 Shard Lock 이 걸리지 않는 계층

 

Level 1

더보기

Read Commited

더보기
SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock 이 걸리는 계층

 

Level 2

더보기

Repeatable Read

더보기
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock 이 걸리는 계층

 

Levle 3

더보기

Serializeable

더보기
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock 이 걸리는 계층

 

6. 트랜잭션 복구방법

 

 

 

.참고

goodmilktea.tistory.com/62

 

7. 트랜잭션, 동시성 제어, 회복

목차 1. 트랜잭션 2. 동시성 제어 3. 트랜잭션 고립 수준 4. 회복 01. 트랜잭션 1. 트랜잭션의 개념 2. 트랜잭션의 성질 3. 트랜잭션과 DBMS 1.1 트랜잭션 트랜잭션(transaction): DBMS에서 데이터를 다루는

goodmilktea.tistory.com

mangkyu.tistory.com/30

 

[Database] 8. 트랜잭션, 동시성 제어, 회복

[ 본 사진은 쉽게 배우는 오라클로 배우는 데이터베이스 개론과 실습 ppt에서 캡처했습니다. ] 이번 장에서는 트랜잭션(Transaction), 동시성 제어(Locking or Currency Control), 회복(Recovery)에 대해 알아보

mangkyu.tistory.com

suhwan.dev/2019/06/09/transaction-isolation-level-and-lock/

 

Lock으로 이해하는 Transaction의 Isolation Level

개요 내게 transaction의 isolation level은 개발할 때 항상 큰 찝찝함을 남기게 하는 요소였다. row를 읽기만 할 때는 REPEATABLE READ로, row를 삽입 / 수정 / 삭제할 때는 SERIALIZABLE로 isolation level을 지정했지

suhwan.dev

gyoogle.dev/blog/computer-science/data-base/Transaction%20Isolation%20Level.html

 

트랜잭션 격리 수준(Transaction Isolation Level) | 👨🏻‍💻 Tech Interview

트랜잭션 격리 수준(Transaction Isolation Level) Isolation level 트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준 Isolation level의 필요성 데이터베이스는 ACID 특징과 같이 트랜잭션이 독립적인 수

gyoogle.dev

 

반응형