JangGeonWu
janggeonwu97
JangGeonWu
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • SQLD (21)
    • 개인 공부용 (17)
    • Django (9)
    • Tableau (6)
    • ElasticSearch (8)
    • 빅데이터 엔지니어 (5)
    • Spring 퀵 스타트 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 개인 공부 기록용 블로그

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
JangGeonWu

janggeonwu97

SQLD

3-7-2. 트랜잭션

2022. 10. 3. 13:35

1. 트랜잭션의 특징

업무 처리를 위한 논리적인 작업 단위인 트랜잭션은 다음과 같은 4가지 주요 특징을 가진다. 영문 첫 글자를 따 ACID라고 부른다.

  • 원자성(Atomicity): 트랜잭션은 분해가 불가능한 업무의 최소단위이므로 전부 처리되거나 아예 하나도 처리되지 않아야 한다.
  • 일관성(Consistency): 일관된 상태의 데이터베이스에서 하나의 트랜잭션을 성공적으로 완료하고 나면, 그 데이터베이스는 여전히 일관된 상태(모순되지 않는 상태)여야 한다.
  • 격리성(Isolation): 실행 중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없다
  • 영속성(Durability): 트랜잭션이 일단 그 실행을 성공적으로 완료하면, 그 결과는 데이터베이스에 영속적으로 저장된다.

 

2. 트랜잭션 격리성

트랜잭션 격리성은, 일관성과 마찬가지로 Lock을 강하게 오래 유지하면 강화되고 Lock을 최소화할수록 약화된다.

아래는 격리성이 낮은 상태에서 어떤 현상들이 일어나는지를 정리한 것이다.

 

가. 격리성이 낮으면 발생하는 것

1) Dirty Read: 다른 트랜잭션이 수정한 후 커밋하지 않은 데이터를 읽는 것을 의미한다. 변경을 가한 트랜잭션이 커밋하면 상관 없지만, 롤백한다면 그 값을 읽은 트랜잭션은 비일관된 상태에 놓이게 된다.

 

2) Non-Repeatable Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 OR 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말한다. 

 

3) Phantom Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 다른 트랜잭션이 삽입을 수행하는 바람에 없던 레코드가 갑자기 나타나는 현상을 말한다.

 

나. 트랜잭션 격리성 수준: ANSI/ISO SQL 표준에서 정의한 4가지 트랜잭션 격리성 수준은 다음과 같다.

 - Read Uncommitted: 트랜잭션 처리 중인 아직 커밋되지 않은 데이터를, 다른 트랜잭션이 읽는 것을 허용함

 - Read Committed: 트랜잭션에 커밋된 데이터만 읽도록 허용, Dirty Read를 방지

 - Repeatable Read: non-repeatable read 문제를 방지해 준다. 단, phantom read는 방지 못해줌

 - Serializable Read: phantom read까지 방지해준다.

 

SQL Server, DB2는 위 4가지 격리성 수준을 다 지원하나, Oracle은 Read Committed, Serializable Read만 지원한다.

대부분의 DBMS는 Read Committed 기반이라 Dirty Read가 발생할 가능성은 낮다.

 

다중 트랜잭션 환경에서 DBMS가 제공하는 기능을 이용해 동시성을 제어하려면, 트랜잭션 시작 전에 명시적으로 Set Transaction 명령어를 수행하기만 하면 된다.

 

더보기

set transaction isolation level read serializable; --> 트랜잭션 격리성 수준을 serializable로 상향 조정함

물론 격리성 수준 높이면 일관성 유지에 도움은 되나 '동시성'에서 문제가 발생, 따라서 '동시성 제어'라는 것이 고려되어야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'SQLD' 카테고리의 다른 글

3-7-3. 동시성 제어  (1) 2022.10.03
3-7-1. Lock  (0) 2022.10.03
2-1-8. 표준 조인  (0) 2022.09.20
2-1-7. 조인  (1) 2022.09.20
2-1-6. ORDER BY 절  (1) 2022.09.20
    'SQLD' 카테고리의 다른 글
    • 3-7-3. 동시성 제어
    • 3-7-1. Lock
    • 2-1-8. 표준 조인
    • 2-1-7. 조인
    JangGeonWu
    JangGeonWu

    티스토리툴바