본문 바로가기
2022/DB 데이터베이스

0) [DB] SQL 응용 3 - 트랜잭션

by Or0i쿠 2022. 11. 3.
 
Rush Hour (Feat. j-hope of BTS)
아티스트
Crush
앨범
Rush Hour
발매일
2022.09.22

트랜잭션

한 묶음으로 처리되어야 하는 SQL 명령문들의 집합

→ 트랜잭션에 속한 SQL 명령문들은 모두 정상 처리되어야 함께 완료되며 하나의 명령 문이라도 오류가 발생하면 전체를 취소함

  • 커밋(commit): 정상 종료→ 트랜잭션의 실행 결과를 데이터베이스에 최종적으로 반영하는 것|임시로 실행 처리한 트랜잭션의 실행 결과를 실제 데이터베이스에 반영하는 명령
  • 롤백(rollback) -실행 결과를 반영하지 않고 취소하여 원래 상태로 되돌리는 것
  • 롤백이 가능하므로 커밋되기 전까지는 데이터베이스에 완전하게 반영되었다고 확신할 수 없는 임시 실행 결과일 뿐임

2개의 UPDATE문으로 구성된 계좌이체 트랜잭션의 예

2개의 UPDATE문으로 구성된 '계좌이체' 트랜잭션의 예
2개의 UPDATE문은 모두 실행되어야하고, 둘 중 하나의 UPDATE문만 실행되어서는 곤 란하므로 트랜잭션으로 묶어 처리해야 함
START TRANSACTION 명령문과 COMMIT 명령문으로 2개 UPDATE문을 둘러쌈으로써 트랜잭션을 구성

트랜잭션 안의 SQL 명령문을 모두 성공적으로 실행하여 완료하거나 아니면 모두 철회하 여 무효화해야 함을 의미

  • ‘전부 혹은 전무(all or nothing)' 실행 규칙을 적용
  • 만약 장애가 발생한다면 장애 발생 시점에 이미 정상 완료되어 커밋된 트랜잭션은 제 외하고 완료되지 않은 트랜잭션은 모두 취소시킴

트랜잭션의 특성 (ACID)

원자성
(Atomicity)
트랜잭션 안의 SQL 명령문을 모두 성공적으로 실행하여 완료 or 모두 철회하여 무효화해야함을 의미
  • ‘전부 혹은 전무(all or nothing)' 실행 규칙을 적용
  • 만약 장애가 발생한다면 장애 발생 시점에 이미 정상 완료되어 커밋된 트랜잭션은 제 외하고 완료되지 않은 트랜잭션은 모두 취소시킴
일관성
(Consistency)
데이터베이스가 트랜잭션 실행 전의 일관된 상태에서 트랜잭션 실행 후에도 또 다른 일 관된 상태로 전환되어야함을 의미
고립성
(Isolation)
커밋될 때까지 트랜잭션이 수행한 임시 실행 결과가 다른 트랜잭션에게 공개되지 않아야 함을 의미
지속성
(Durability)
 일단 트랜잭션이 커밋되면 그 트랜잭션의 실행 결과는 장애가 발생하더라도 보존되어야 함을 의미

 

트랜잭션의 특성과 기법 트랜잭션 지원 DBMS 모듈
트랜잭션의 특성과 기법
동시성 제어(concurrency control) 모듈
  • 동시에 실행되는 트랜잭션 간의 간섭을 제어
  • 최종적으로 각 트랜잭션이 순차적으로 실행한 결과와 동일한 고립성 결과를 보장하고 트랜잭션 실행 이전과 이후의 데이터베이스 일관성이 항상 유지되도록 함
회복(recovery) 모듈
  • 완전한 트랜잭션 결과의 복구를 보장
  • 장애 발생 시 트랜잭션 실행의 원자성을 보장하고 커밋된 트랜잭션의 결과는 반드시 데이터베이스에 반영되도록 지속성을 지원
락킹(locking) : 대표적 동시성 제어 기법 
로깅(logging) : 대표적인 회복 기법

 

트랜잭션의 종류

 

설정 모드에 따라 3가지 트랜잭션으로 구분
트랜잭션의 종류 : 3가지로 구분한다.

 

명시성 트랜잭션

‘사용자 트랜잭션’ 또는 ‘수동 트랜잭션’ 트랜잭션의 시작과 끝을 사용자가 직접 명시적으로 지정하는 트랜잭션
  • START TRANSACTION 명령문은 직접 트랜잭션의 시작을 지시
  • COMMIT 명령문은 트랜잭션의 모든 처리 결과의 정상적 처리를 확정하는 명령어로 변경 내용을 모두 실제 데이터베이스에 영구적으로 반영함
  • ROLLBACK 명령문은 작업 중 장애나 문제가 발생하여 트랜잭션의 처리 과정에서 발생 한 변경 내용을 모두 취소하는 명령어로 트랜잭션 시작 이전의 원래 상태로 되돌림
 
  •  

자동완료 트랜잭션

  • SQL문 하나를 독립된 하나의 트랜잭션으로 자동 정의하고 SQL문의 실행 결과에 따라 자동으로 커밋 또는 롤백하는 트랜잭션
  • 기본 모드의 트랜잭션, ‘시스템 트랜잭션’
  • DBMS가 각 SQL 문장 앞뒤에 START TRANSACTION문과 COMMIT문 또는 ROLLBACK 문을 자동으로 붙여 실행
  • ‘@@AUTOCOMMIT’은 트랜잭션 모드 설정 값을 저장하고 있는 시스템 변수
  • 값이 ‘1’이면 자동완료 모드가 설정된 것

수동 완료 트랜잭션

트랜잭션의 끝만 사용자가 직접 명시적으로 지정하는 트랜잭션 ‘암시적(implicit) 트랜잭션’ 다음 명령문 실행하면 START TRANSACTION 명령문 없이도 트랜잭션이 자동으로 시작


위 같이 수동완료 모드를 설정하면 START TRANSACTION 명령문은 필요 없으나 COMMIT 명령문이나 ROLLBACK 명령문은 반드시 명시해야 함
수동 완료 시스템의 적용 예

 

트랜잭션 처리과정

트랜잭션 로그

로그 데이터베이스에 기록되는
트랜잭션 로그의 기본 구조
로그 일련번호를 포함하여 트랜잭션_식별자와 START, COMMIT, ROLLBACK, 명령문 유형과 변경 내용 등을 기록
트랜잭션 로그의 예

체크 포인트(check point)

  • ‘검사점’ 
  • 특정 시점까지의 데이터 버퍼 안의 모든 변경 내용을 데이터베이스 파일에 물리적으로 저장하는 시점 
  • 장애 발생 시 복구 작업량을 줄이기 위해서 주기적으로 동기화를 수행
  • 체크 포인트 역시 로그에 기록
체크 포인트 시점에는 버퍼 캐시 안의 데이터와 디스크 안의 저장 데이터베이스가 100% 일치하는 동기화가 수행
  • 체크 포인트가 트랜잭션 로그에 기록되는 순간 모든 데이터 버퍼 안의 데이터들이 데이 터베이스 파일에 쓰여짐
  • 회복 대상을 마지막 체크 포인트 시점 이후의 로그 내용으로만 제한시킴

'2022 > DB 데이터베이스' 카테고리의 다른 글

[DB] E-R 모델  (0) 2022.11.24
[DB] 정규화  (1) 2022.11.17
[DB]SQL응용 2 (트리거, 사용자 정의 함수)  (0) 2022.11.03
[DB] SQL 응용 1 (내장 함수 | 저장 프로시저)  (0) 2022.11.03
SQL 7W  (0) 2022.11.03