Database - Transaction(트랜잭션)

김준영·2023년 2월 5일
1

CS공부

목록 보기
8/20

트랜젝션이란?


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

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

이론적으로 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성, 일관성, 독립성, 영구성을 보장한다.

상태를 변화시킨다는 것은 SQL 질의어를 통해 DB에 접근하는 것이다.

  • SELECT
  • INSERT
  • DELETE
  • UPDATE

작업 단위는 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것이다.

즉, 하나의 트랜잭션 설계를 잘 만드는 것이 데이터를 다룰 때 많은 이점을 가져다준다.

트랜잭션 특징


원자성(Atomicity)

트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.

일관성(Consistency)

트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.

독립성(Isolation)

둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 떄, 어떤 트랜잭션도 다른 트랜잭션 연선에 끼어들 수 없다.

지속성(Durability)

트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

Commit

하나의 트랜잭션이 성공적으로 끝났고, DB가 일관성있는 상태일 때 이를 알려주기 위해 사용하는 연산

Rollback

하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션 원자성이 깨진경우
transaction이 정상적으로 종료되지 않았을 떄, last consistent state (예) Transaction의 시작 상태로 roll back 할 수 있음.

Transaction 관리를 위한 DBMS의 전략


DBMS의 구조

크게 2가지 : Query Processor(질의 처리기), Storage System(저장 시스템)

입출력 단위 : 고정 길이의 page 단위로 disk에 읽거나 쓴다.

저장 공간 : 비휘발성 저장 장치인 disk에 저장, 일부분을 Main Memory에 저

Page Buffer Manager or Buffer Manager

DBMS의 Storage System에 속하는 모듈 중 하나로, Main Memory에 유지하는 페이지를 관리하는 모듈

Buffer 관리 정책에 따라, UNDO 복구와 REDO 복구가 요구되거나 그렇지 않게 되므로, transaction 관리에 매우 중요한 결정을 가져온다.

UNDO

필요한 이유 : 수정된 Page들이 Buffer 교체 알고리즘에 따라서 디스크에 출력될 수 있음. Buffer 교체는 transaction과는 무관하게 buffer의 상태에 따라서 결정됨.

이로인해, 정상적으로 종료되지 않은 transaction이 변경한 page들은 원상 복구 되어야하는데, 이 복구를 undo라고 함.

2개의 정책(수정된 페이지를 디스크에 쓰는 시점으로 분류)

steal : 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책

  • 대부분의 DBMS가 채택하는 Buffer 관리 정책
  • UNDO logging과 복구를 필요로 함.

¬steal : 수정된 페이지를 EOT(End Of Transaction)까지는 버퍼에 유지하는 정책

  • UNDO 작업이 필요하지 않지만, 매우 큰 메모리 버퍼가 필요함.

REDO

이미 commit한 transaction의 수정을 재반영하는 복구 작업
Buffer 관리 정책에 영향을 받음

Transaction이 종료되는 시점에 해당 transaction이 수정한 page를 디스크에 쓸 것인가 아닌가로 기준.

  • FORCE : 수정했던 모든 페이지를 Transaction commit 시점에 disk에 반영
    transaction이 commit 되었을 때 수정된 페이지들이 disk 상에 반영되므로 redo 필요 없음.

  • ¬FORCE : commit 시점에 반영하지 않는 정책
    transaction이 disk 상의 db에 반영되지 않을 수 있기에 redo 복구가 필요. (대부분의 DBMS 정책)

트랜잭션의 목적


트랜잭션을 조작하는 기능은 사용자가 데이터베이스 완전성(integrity) 유지를 확신하게 한다.

단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구한다. 이때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것이다.

  • Begin the transaction
  • Execute several queries(DB내 갱신이 아직 적용되지 않는다)
  • Commit the transaction(트랜잭션이 성공적이며, 갱신이 실제 적용됨)

만약 쿼리 하나가 실패하면, 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백한다. 이것은 DBMS가 어떻게 사용되고 셋업 되었느냐에 따라 다르다. 트랜잭션은 커밋 전에 언제든지 수동으로 롤백될 수 있다.

트랜잭셔널 데이터베이스

트랜잭션을 지원하는 데이터베이스를 트랜잭셔널 데이터베이스라고 부른다. 현재 대부분의 관계형 데이터베이스 관리시스템은 트랜잭션 데이터베이스이다.

트랜잭셔널 파일시스템

리눅스의 Namesys Reiser4 파일시스템과 마이크로소프트 NTFS 새로운 버전은 모두 트랜잭션을 지원한다.


참조: https://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98, https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Database/Transaction.md

profile
ㅎㅎ

0개의 댓글