[SQL] 트랜잭션

멋쟁이펭귄맨·2021년 8월 1일
0

이 게시글은 패스트캠퍼스의 '데이터베이스와 SQLD 합격패스 Online' 강의를 요약한 내용입니다.


1. 트랜잭션의 정의

  1. 데이터베이스 트랜잭션은 DBMS 혹은 유사한 시스템에서 상호작용 단위
  2. 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다

2. 트랜잭션의 4가지 특징(ACID)

특징설명
원자성(Atomicity)- 데이터 조작이 전부 성공 혹은 실패할지 보증하는 구조
- COMMIT : 조작 과정에 문제 없으면 처리 확정
- ROLLBACK : 조작 중간에 문제 발생 시, 첫 과정 직전 상태로 복귀
일관성(Consistency)- 데이터 조작 전후에 일관성 유지 필요
- 데이터베이스 오브젝트에 정합성 제약 추가 가능
고립성(Isolation, 격리성)- 복수의 사용자가 동시에 데이터 조작을 실행할 경우 각각의 처리가 모순 없이 실행되는 것을 보증
지속성(Durability)- 트랜잭션이 COMMIT 되면 변경 사항이 영구적으로 확정되는 것을 보장
- 데이터 조작 완료 후 통지 받는 시점에서 결과를 잃지 않고 유지

3. 트랜잭션 처리의 필요성


` ### 3.1 트랜잭션 원자성의 중요성 >데이터 조작이 전부 성공 혹은 실패할 지 보증하는 구조

3.1.1 전부 성공 케이스

3.1.1 전부 실패 케이스

  • 트랜잭션은 전부 성공하거나 혹은 전부 실패해야 한다.
  • 부분 성공이라는 단어는 절대로 존재하면 안됨.

3.2 트랜잭션 고립성의 중요성

동시에 데이터 조작을 실행할 경우 각각의 처리가 모순 없이 실행되는 것을 보증

사용자 A와 사용자 B가 좌석을 예매하려고 할 때, A가 선택한 좌석은 B가 선택할 수 없어야 하며, 마찬가지로 B가 선택한 좌석은 A가 선택할 수 없어야 한다.


4. 트랜잭션 격리 수준 (ANSI 표준 격리 수준 ISOLATION LEVEL)


4.1 ANSI 표준 격리 수준(직렬화 가능 기능으로부터 격리 수준 완화)

동시성과 격리성은 Trade - Off 관계에 있다.

격리 수준설명
Read Uncommitted- COMMIT 되지 않은 읽기
- 트랜잭션에서 처리 중인 아직 COMMIT 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
Read Committed- COMMIT 된 읽기
- 트랜잭션이 COMMIT 확정된 데이터만 다른 트랜잭션이 읽도록 허용
- Oracle 데이터베이스의 기본 설정
Reapeatable Read- 반복 읽기
- 트랜잭션 내에서 쿼리를 두 번 이상 수행 시, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지
Serializable- 직렬화 가능
- 트랜잭션 내에서 쿼리를 두 번 이상 수행 시, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌지 않음은 물론이고 새로운 레코드가 나타나지도 않음

가장 이상적인 격리 수준의 보장은 Serializable이나 DBMS 운영 시 동시성이 크게 떨어지면서 성능상 이슈가 발생함.


4.2 격리 수준 완화에 따른 직렬화 가능에서 없었던 현상 발생


1. Dirty Read (Dirty 읽기)

  • 어떤 트랜잭션이 COMMIT 되기 전 다른 트랜잭션에서 데이터 읽음
  • 데이터 변경후 (COMMIT 후) 아직 COMMIT 되지 않은 값을 읽었는데 변경을 가한 트랜잭션이 최종적으로 롤백된다면, 그 값을 읽은 트랜잭션은 비 일관된 상태에 놓임

2. Non - Repeatable Read (애매한 읽기)

  • 어떤 트랜잭션이 이전에 읽은 데이터를 다시 읽어 들일 때, 그전의 결과와 다른 현상
  • 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 이 값을 수정 또는 삭제하여 두 쿼리의 결과가 다르게 나오는 현상

3. Phantom Read (유령 읽기)

  • 어떤 트랜잭션을 읽을 때, 선택할 수 있는 데이터가 추가되거나 사라지는 현상
  • 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 나타나는 현상

4.3 격리 수준과 3가지 현상의 관계


격리 수준Dirty ReadNon-Repeatable ReadPhantom Read
Read Uncommitted가능가능가능
Read Committed불가능가능가능
Reapeatable Read불가능불가능가능
Serializable불가능불가능불가능

profile
안녕하세요

0개의 댓글

관련 채용 정보