트랜잭션

Tin9oo·2024년 2월 14일

필요 지식

  • InnoDB는 레코드 기반 저장구조
  • RID (page #, slot #) 를 통해 레코드 접근
  • B-tree 기반 클러스터링 인덱스
  • Secondary Index는 PK를 참조함
  • 레코드 기반 잠금을 지원하지만 실제 물리적 잠금은 인덱스에 걸림

트랜잭션의 성질

A: Atomicity
C: Consistency
I: Isolation
D: Durability

참고: CAP 이론

참고: Eventual Consistency

참고: NoSQL의 특성


트랜잭션과 Serial Schedule

  • 가장 쉽게 ACID를 지원하는 방법은?
  • 한 번에 하나씩의 트랜잭션만 실행

Serial Schedule

새 트랜잭션 A, B, C가 있을 때 한 번에 하나씩 실행했을 때 가능한 결과들의 집합 -> 3!

Serializable

실제 데이터베이스의 트랜잭션 결과가 Serial Schedule의 부분집합인 경우 Serializable이라고 함

Lock 없이 트랜잭션이 가능할까?

Transaction에서 발생할 수 있는 문제들

Lost Update Problem

  • 두 개의 트랜잭션이 동시에 한 아이템의 데이터를 변경했을 때 발생하는 문제점
  • 트랜잭션을 지원하는 데이터베이스에서는 발생하면 안됨

(P1) Dirty Read Problem
(P2) Non-repeatable Read Problem
(P3) Phantom Read Problem

Transaction Isolation Level

ANSI SQL (SQL92)

MVCC

Repeatable Read

Read Committed

Read Uncommitted

Serializable


기타

분산 환경에서의 트랜잭션

2 PC

MySQL과 2PC


팀 토의

로그를 먼저 남기고 disk에 나중에 남긴다. 언제 남기지?

로그에 차면 남긴다?

DB WAL(write ahead) 전략

shared memory와 buffer는 다른가?

버퍼는 wal을 하기 위해 로깅을 하기 위해
로깅이 무조건 디스크에 적히는게 아니다.

recovery

lock

x-lock은 내가 독점
s-lock은 쓰기만 내가 독점
그러면 x-lock 왜씀?

mysql은 repeatable read

profile
🚙 HMG SOFTEER 3rd | 💻 BE

0개의 댓글