[DB] Transaction과 ACID

devdo·2022년 5월 29일
0

DB

목록 보기
1/6
post-thumbnail

Transaction(트랜잭션)

질의(query)를 하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우,
처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미합니다. (all-or-nothing, Transaction의 원자성 단위)

즉, 한 번 질의가 실행되면
질의가 모두 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위가 트랜잭션이다.


사용하는 이유

Transaction은 DB 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용합니다.

참고로, DBMS의 성능은 초당 트랜잭션의 실행 수(TPS: Transaction per second)로 측정합니다.


ACID

: 트랜잭션의 특징들의 앞글자를 딴 단어입니다.

Atomicity(원자성)

  • 모든 작업이 반영(커밋)되거나 모두 롤백되는 특성입니다
  • 즉, All or Noting의 개념으로서 작업 단위를 일부분만 실행하지 않는다는 것을 의미
  • 트랜잭션(Transaction)이 원자성의 단위이다!
  • MySQL(8.0)에서는 MVCC의 undo log로 작업한 내용을 저장하고 트내잭션이 실패서 롤백할 때 여기서 가져와서 원자성을 지킨다.

Consistency(일관성)

  • 트랜잭션이 성공적으로 완료되면 일관적인 DB상태를 유지하는 것을 말합니다.
  • 즉, 제약조건(constraint)으로 트랜잭션으로 작업한 데이터들의 무결성을 지킬 수 있다.
  • 예를 들어, Int타입 컬럼에 Varchar타입값은 저장이 안되도록 보장해줘야 하는 의미.

Isolation(고립성)

  • A와 B 두개의 트랜젝션이 실행되고 있을 때, A의 작업과 B작업이 모두 서로 영향을 주면 안됩니다.
  • 하지만 이는 성능과 trade off 할 수 있는 지점이라 개발자가 직접 설정할 수 있다. 바로, 트랜잭션 격리 레벨(Isolation Level)로.

MySQL 트랜잭션 격리 레벨(Isolation Level)

Trade off

  • Read Committed: 트랜잭션내에서 커밋된 데이터만 다른 트랜잭션이 읽는 것을 허용
  • Repeatable Read: 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 결과는 동일
  • 주로, Read Committed, Repeatable Read(데드락 이슈 있음) 를 씀.

Durability(영구성)

  • 한번 반영(커밋)된 트랜젝션의 내용은 영원히 적용되는 특성을 의미합니다.
  • 즉, 데이터가 유실되지 말아야 한다.

Transaction의 Lock



참고

https://chrisjune-13837.medium.com/db-transaction-%EA%B3%BC-acid%EB%9E%80-45a785403f9e

profile
배운 것을 기록합니다.

0개의 댓글