기록방
[DB] 트랜젝션이란? 본문
이 포스팅의 원본은 노션입니다 : 원본 페이지
트렌젝션(Transaction)
데이터베이스의 상태를 변화시키는 일종의 작업 단위를 의미
- 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미
- 데이터베이스의 상태 변화 : SELECT, UPDATE, INSERT, DELETE 등
트렌젝션 도구
- START TRANSACTION : COMMIT, ROLLBACK이 나올 때까지 실행되는 모든 SQL
- COMMIT : 모든 코드를 실행
- ROLLBACK : START TRANSACTION 실행 전 상태로 되돌림
트렌젝션의 특징
- 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
- 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.
- 하나의 트랜잭션은 Commit되거나 Rollback된다.
트랜잭션의 성질
원자성, 일관성, 독립성, 지속성
원자성 (Atomicity)
1. 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
일관성 (Consistency)
1. 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
독립성, 격리성 (Isolation)
1. 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.
2. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
영속성, 지속성 (Durablility)
1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
트랜잭션의 상태
- 활동(Active) : 트랜잭션이 실행중인 상태
- 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
- 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
- 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
- 완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
트랜젝션 연산
Commit
- 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성있는 상태에 있을 때, 하나의 트랜잭션이 끝났다라는 것을 알려주기위해 사용하는 연산
- 이 연산을 사용하면 수행했던 트랜잭션이 로그에 저장되며, 후에 Rollback 연산을 수행했었던 트랜잭션단위로 하는것을 도움
Rollback
- Rollback이란 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 취소
- 후에 사용자가 트랜잭션 처리된 단위대로 Rollback을 진행 가능
트랜젝션 관리를 위한 DBMS 의전략
DBMS 구조 + Buffer 관리 정책 개념 이해 필요
- DBMS의 구조
- 크게 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 작업이 필요하지 않지만, 매우 큰 메모리 버퍼가 필요
- steal : 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책
- REDO
이미 commit한 transaction의 수정을 재반영하는 복구 작업
- Buffer 관리 정책에 영향을 받음
- Transaction이 종료되는 시점에 해당 transaction이 수정한 page를 디스크에 쓸 것인가 아닌가로 기준
- FORCE : 수정했던 모든 페이지를 Transaction commit 시점에 disk에 반영
- transaction이 commit 되었을 때 수정된 페이지들이 disk 상에 반영되므로 redo 필요 없음.
- ¬FORCE : commit 시점에 반영하지 않는 정책
- transaction이 disk 상의 db에 반영되지 않을 수 있기에 redo 복구가 필요. (대부분의 DBMS 정책)
- FORCE : 수정했던 모든 페이지를 Transaction commit 시점에 disk에 반영
노션AI의 요약
트랜잭션은 데이터베이스 상태를 변경하는 작업 단위로, 그것은 데이터베이스 상태에 대한 연속적인 작업을 수행하는데 사용됩니다. 성공적으로 트랜잭션을 완료하기 위해 모든 작업이 완료되어야합니다.
그것은 여러가지 속성을 가진다고 할 수 있습니다: 원자성, 일관성, 고립성 및 지속성. 원자성은 트랜잭션의 모든 작업이 모두 완료되어야 완료될 수 있다는 것을 의미합니다. 일관성은 데이터베이스가 정해진 규칙이나 상태를 따르는 것을 보장합니다. 고립성은 여러 사용자가 동시에 작업하여 트랜잭션의 완료를 방해하지 않는 것을 보장합니다.
마지막으로, 지속성은 트랜잭션이 완료된 이후로도 데이터베이스가 영구적으로 유지될 수 있도록 보장합니다.
Reference
'CS > DataBase' 카테고리의 다른 글
[DB] 1장 연습문제 풀이 (0) | 2024.02.12 |
---|---|
[DB] 1장 : 데이터베이스 기본 개념 (0) | 2024.02.12 |
데이터베이스 개론 2판 : 3장 연습문제 / 기출문제 개인풀이 (0) | 2021.06.13 |
데이터베이스 개론 2판 : 2장 연습문제 / 기출문제 개인풀이 (0) | 2021.06.02 |
데이터베이스 개론 2판 : 1장 연습문제 / 기출문제 개인풀이 (0) | 2021.06.02 |