Transaction in DB

kio·2023년 6월 4일
0

CS

목록 보기
8/30

Transaction

데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.

Transaction의 특징

  1. Atomicity : 원자성
    트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것
    이는 처리시스템을 이해하기 쉽고, 오작동 원인을 찾기쉽게 한다.
  2. Consistency : 일관성
    트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것
    이는 트랜잭션이 업데이트된 DB가 아니라 원래 참조한 DB로 진행하면서 일관성을 유지한다.
  3. Isolation : 독립성
    어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 것
    하나의 트랜잭션사이에 다른 트랜잭션의 결과를 참조할 수 없다는 것
  4. Durability : 지속성
    트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 것

Transaction의 격리수준

Read Uncommitted

어떤 트랜잭션의 변경내용이 COMMIT이나 ROLLBACK과 상관없이 다른 트랜잭션에서 보여진다.

이에 생기는 문제
1. A 트랜잭션에서 10번 사원의 나이를 27살에서 28살로 바꿈
2. 아직 커밋하지 않음
3. B 트랜잭션에서 10번 사원의 나이를 조회함
4. 28살이 조회됨
이를 Dirty Read라고 한다
5. A 트랜잭션에서 문제가 발생해 ROLLBACK함
6. B 트랜잭션은 10번 사원이 여전히 28살이라고 생각하고 로직을 수행함

Read Commited

어떤 트랜잭션의 변경 내용이 COMMIT 되어야만 다른 트랜잭션에서 조회할 수 있다.

이에 생기는 문제
1. B 트랜잭션에서 10번 사원의 나이를 조회
2. 27살이 조회됨
3. A 트랜잭션에서 10번 사원의 나이를 27살에서 28살로 바꾸고 커밋
4. B 트랜잭션에서 10번 사원의 나이를 다시 조회(변경되지 않은 이름이 조회됨)
5. 28살이 조회됨
이를 NON-REPETABLE READ라고 한다.

Repetable Read

트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회할 수 있다.

이에 생기는 문제
1. A 트랜잭션이 name = J를 조회합니다.
2. B 트랜잭션이 name = J를 조회 후, name = K로 변경하고, commit합니다.
3. A 트랜잭션이 name = L로 변경합니다.
이때 이미 name = J의 data는 Undo영역으로 들어가고, 결과적으로 검색이 안됩니다.
이를 Update 부정합이라고 한다.

  1. A 트랜잭션이 제품별 판매금액을 조회합니다.
  2. B 트랜잭션이 새로운 제품을 INSERT하고 commit합니다.
  3. A 트랜개션이 모든 제품 총 금액을 조회합니다.
    이때 Dirty Read처럼 commit도 하지 않고 변경된것도 아니고,
    NON-REPETABLE READ처럼 읽었던 데이터의 값이 변경된게 아닌,
    이를 Pathom Read라고 한다.

Serializable

가장 엄격한 수준으로, 공유잠금을 설정해 동시처리를 막습니다.

이에 생기는 문제

  • 우선 동시처리능력이 저하됩니다.
  • 이에따라 성능저하를 유발합니다.

0개의 댓글