DB 트랜잭션에 대해서

트랜잭션이란?

DB에서 하나의 작업단위라고 설명할 수 있습니다

대표적인 예시를 들면 부모님이 자식에게 은행 이체를 통해 돈을 보내주려고 할 때

진행순서 ( DB를 기준으로 )

  1. 은행 계좌 정보를 select를 통해 검색
  2. 계좌 정보가 있다면 부모님 계좌 update -1,000,000원
  3. 계좌 정보가 있다면 자식 계좌 update +1,000,000원
  4. 이후에 추가적인 부분이 발생할 수 있음

이때 어디선가 장애가 발생해서 하나의 작업이라도 취소가 되었다면 이체라는 작업이 수행되지 않은 것이나 다름없기에

계좌 이체라는 하나의 작업단위

정의

트랜잭션의 특성

위 예시처럼 하나의 트랜잭션 단위를 유지하며 실행하기 위해 만족시켜야하는 특성

ACID → 트랜잭션이 성공적으로 실행되기 위해 반드시 만족해야 하는 성질

트랜잭션 처리

실제로 트랜잭션 단위로 처리하기 위해 고려해봐야 할 부분 3가지

장애와 회복 그리고 병행제어

1) 장애

DB에서 시스템 장애 (하드웨어 오작동) , 미디어 장애(저장 미디어 붕괴)가 있지만

트랜잭션 장애가 DB를 사용하면서 발생한 장애 중 99%를 차지함

트랜잭션 장애란?

등등이 원인

2) 회복

회복에 대한 부분은 DBMS에 따라 다르고 깊게 들어가면 상당히 복잡해짐(DBMS의 성능에 영향)

⇒ 회복 동작의 기본적인 실행 단위

commit과 rollback 그리고 REDO(재실행)와 UNDO(취소) 회복 단위

로그: 트랜잭션의 단위로 작성한 하나의 트랜잭션 저장 기록( 실제로 트랜잭션이 commit 되었는지 아닌지가 적혀있다 → 트랜잭션이 실행이 완료되었는지 아닌지 )

검사 시점 이후로 로그를 확인하면서 UNDO와 REDO를 반복함

3) 병행제어

DB를 사용하는 목적인 정확성과 공용성을 만족시키기 위해 필요함.

병행제어가 되지 않는다면? → 충돌이 발생함 → 충돌이 발생하면?

충돌(conflict)을 관리하는 것이 중요함

예시로써 위 트랜잭션에서 select문으로 계좌 잔액 검색을 할 때 혹시라도 다른 트랜잭션 작업에서 돈이 이체 된다면?

하지만 이렇게 충돌이 절대 발생하지 않도록 해야하는 작업이 있는가하면 충돌이 일어나도 별 상관없는 작업들이 있습니다. 이러한 작업을 수행할 때 트랜잭션이 충돌하지 않도록 한다면 효율적이지 못할 수가 있습니다.

트랜잭션 격리 수준

격리 수준이 높으면 충돌이 발생하진 않지만 트랜잭션 처리 속도가 낮아질 수 있음.

격리 수준이 낮으면 충돌이 많이 발생하지만 처리 속도가 빠름.

따라서 DB의 특성에 따라서 어떤 격리 수준을 가질지 생각해봐야 하고 DB의 성능에 중요한 영향을 끼침

[DB] 트랜잭션 격리 수준(Transaction Isolation Level)

[DB] 트랜잭션 격리 수준(Transaction Isolation Level) 개념 트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 즉, 특정 트랜잭션이 다른 트랜잭션에 변경한 데 dar0m.tistory.com

https://www.youtube.com/watch?v=e9PC0sroCzc