트랜잭션이란? (Transaction)

김진회·2022년 12월 14일
0

DB

목록 보기
6/8

트랜잭션

데이터베이스 상태를 변화시키는 일련의 작업 단위

1. 특성

  • A 원자성: 모두 반영되거나 안돼야 한다
  • C 일관성: 실행이 끝나면 일관성있는 상태여야 한다
  • I 독립성: 트랜잭션은 다른 트랜잭션 연산에 끼어들 수 없다
  • D 영속성: 실행이 끝나면 영구적으로 반영돼야 한다

2. 트랜잭션 명령어 (TCL)

  • Commit
    • 트랜잭션에 문제가 없고 올바른 결과라고 판단된 경우, 명령어를 통해 완료한다.
  • Rollback
    • 트랜잭션이 정상적으로 종료되지 않았을 때, last consistent state로 되돌린다.
  • Savapoint
    • 저장점을 정의하면 롤백할 때 SAVEPOINT의 상태로 되돌린다.

3. 트랜잭션 격리 수준 (isolation level)

동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것
즉, 한 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것

  • 격리 단계
아래로 내려갈수록 트랜잭션간 고립 정도가 높아지며, 성능이 떨어지는 것이 일반적이다.
일반적인 온라인 서비스에서는 READ COMMITTED나 REPEATABLE READ 중 하나를 사용한다.
  • READ UNCOMMITTED
    • 변경내용이 COMMIT이나 ROLLBACK과 상관없이 다른 트랜잭션에서 조회 가능
  • READ COMMITTED
    • 변경 내용이 COMMIT 되어야만 다른 트랜잭션에서 조회 가능
  • REPEATABLE READ
    • 트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회 가능
    • MySQL에서 기본으로 사용
  • SERIALIZABLE
    • 읽기 작업에도 공유 잠금을 설정해서 동시에 다른 트랜잭션이 변경하지 못하게 함
    • 동시처리 능력이 다른 격리수준보다 떨어지고, 성능저하가 발생

4. 격리 수준에 따른 문제

  • Dirty Read
    • 데이터가 변경되었지만, 아직 커밋되지 않은 상황에서 다른 트랜잭션이 해당 변경 사항을 조회할 수 있는 문제
  • Non-Repeatable Read
    • 같은 트랜잭션 내에서 같은 데이터를 여러번 조회했을 때 읽어온 데이터가 다른 경우
  • Phantom Read
    • 조회해온 결과의 행이 새로 생기거나 없어지는 현상
문제READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE
더티리드OXXX
반복불가능조회OOXX
팬텀리드OOOX

참조
https://joont92.github.io/db/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B2%A9%EB%A6%AC-%EC%88%98%EC%A4%80-isolation-level/

profile
SSAFY 7기. HMG. 협업, 소통, 사용자중심

0개의 댓글