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

[데이터베이스] 2. 트랜잭션

by 상똥 2023. 2. 7.

[1. 트랜잭션]

1. 트랜잭션의 개념

- 업무 처리의 단위

- 하나의 논리적인 작업 단위를 이루는 연산들의 집합

- 데이터베이스의 일관된 상태를 또 다른 일관된 상태로 변환시킴

- 한 번에 수행되어야 할 데이터베이스의 일련의 읽기와 쓰기 연산을 수행하는 단위

- 여러 개의 쿼리를 하나로 묶는 단위 (쿼리=데이터베이스에 접근하는 방법)

 

2. 커밋과 롤백

- 커밋(Commit) : 하나의 트랜잭션이 성공적으로 처리되었음을 확정하는 명령어

- 롤백(Rollback) : 하나의 트랜잭션으로 처리한 묶음 과정을 취소하는 일

- 커밋과 롤백으로 인해 작업을 그룹화할 수 있으며 데이터의 무결성(integrity)보장 가능

 

[2. 트랜잭션의 ACID 특징]

1. 원자성(Atomicity)

- 한 개의 트랜잭션과 관련된 모든 일이 함께 성공하거나 함께 실패하는 것

- 커밋&롤백 

 

2. 일관성(Consistency)

- 허용된 방식으로만 데이터를 변경하는 것

- 항상 기대되는 값을 정확히 보여줄 수 있도록 다른 트랜잭션이 끼어들지 못하게 해야 함

 

3. 고립성, 격리성(Isolation)

- 트랜잭션 수행시 서로 끼어들지 못하도록 하는 것

 

4. 영속성(Durability)

- 수행된 트랜잭션은 영원히 반영되어야 한다는 것

- 데이터베이스 시스템에 장애가 발생하더라도 복구될 수 있는 회복기능이 있어야 함

 

[3. 동시성(병행) 제어]

1. 동시성 제어 : 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능

 

2. 트랜잭션의 직렬가능 스케줄 : 직렬성을 가진 스케줄이란, 각각의 트랜잭션이 동시에 수행된 결과가 트랜잭션이 순차적으로 수행된 결과와 같을 경우

 

3.  동시성 제어의 목적

- 직렬가능스케줄의 생성 또는 직렬가능성 보장

- 공유도 최대화, 응답시간 최소화, 시스템 활동의 최대 보장

- 데이터의 무결성 및 일관성 보장

 

[4. 트랜잭션 격리 수준]

1. 직렬화(SERIALIZABLE_READ)

- 트랜잭션을 순차적으로 진행시키는 것

- 트랜잭션 내에서 질의를 두 번 이상 수행할 때 첫 번째 질의에 있던 레코드가 사라지거나 값이 바뀌지 않으며 새로운 레코드가 나타나지도 않게 하는 것

 

2. 반복 읽기(REPEATABLE_READ)

- 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막는 것

- 트랜잭션 내에서 질의를 두 번 이상 수행할 때 첫 번째 질의에 있던 레코드가 사라지거나 값이 바뀌는 것을 방지

 

3. 완료된 읽기(READ_COMMITED)

- 커밋 완료된 데이터에 대해서만 조회를 허용하는 것

- 가장 많이 사용되는 격리 수준

- MySQL8.0, Oracle, SQL Server 등의 기본값

 

4. 완료되지 않은 읽기(READ_UNCOMMITED)

- 가장 빠르고 가장 낮은 격리수준

- 하나의 트랜잭션이 완료되기 이전에 다른 트랜잭션의 접근을 허용함

 

[5. 격리 수준에 따라 발생하는 현상]

1. 팬텀리드(Phantom read) 

- 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 조회 결과가 다른 경우

Ex. 트랜잭션1의 절차 : 조회1, 레코드 삽입, 조회2 → 레코드 삽입에 의해 첫 번째 조회와 두 번째 조회의 결과가 달라짐

 

2. 반복 가능하지 않은 조회(Non-repeatable read)

- 한 트랜잭션 내에 같은 질의가 발생했을 때 그 결과값이 서로 다른 경우

Ex. 트랜잭션 절차 : 조회, 레코드 변경, 조회 (커밋 완료) → 처음 조회한 사람은 이후 변경된 값만을 조회할 수 있음

 

3. 더티 리드(Dirty read) 

- 한 트랜잭션이 실행중일 때 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 경우 

Ex. 절차 : 레코드 변경(트랜잭션1), 조회(트랜잭션2), 커밋완료(트랜잭션1) → 커밋이 완료되지 않았지만 변경된 레코드 값을 조회할 수 있음

격리 수준에 따른 동시성
격리 수준 Dirty read Non-repeatable read Phantom read
Read Uncommited O O O
Read Commited X O O
Repeatable Read X X O
Serialized Read X X X