220413_트랜잭션(Transaction) - 스케줄, 록킹

창고·2022년 7월 28일
0

티스토리에 저장했던 글을 옮겼습니다.
https://mrcocoball.tistory.com/45?category=1080971

4. 트랜잭션과 스케줄 종류

(1) 직렬 스케줄 (Serial Schedule)

  • 순서대로 하나씩 트랜잭션을 실행하는 것
  • 트랜잭션 하나의 실행이 완료되면 다른 트랜잭션을 시작하는 방식
  • 트랜잭션이 실행되는 동안 다른 트랜잭션의 영향을 받을 수 없어 (고립성) 모순이 발생하지 않음

(2) 직렬화 스케줄 (Serializable Schedule)

  • 트랜잭션들이 동시에 자료 접근 연산들을 교차하며 실행시키면서도
    결과가 직렬 스케줄과 동일한 스케줄
  • 병행 제어, 직렬 스케줄 장점을 가진 것
  • 병행 처리하지만 적절한 제어 조치를 취함으로 일관성을 유지함
  • 병행 제어에서 필요한 스케줄
  • 직렬성 (트랜잭션들의 처리 결과가 직렬 처리와 동일한 효과를 가지는 특성) 을 유지할 수 있음

5. 트랜잭션과 병행 처리

(1) 병행 처리의 특징과 문제점

  • 병행 처리 : 직렬과는 다르게 여러 개의 요청을 동시에 처리
  • 병행 처리의 문제점
    • 갱신 유실 문제 : 두 트랜잭션이 동시에 동일한 자료를 갱신하는 것으로, 첫번째 갱신이 유실됨
    • 오류 읽기 문제 : 갱신 도중에 다른 트랜잭션이 읽는 것으로, 낡은 자료가 읽혀짐
    • 잘못된 요약 : 두 자료를 갱신하는 도중에 읽는 것으로, 요약 결과에 오류가 발생
    • 무결성 제약 조건 : 두 자료의 제약 조건을 검사하지 않고 갱신하는 것으로, 일관성이 위반됨

(2) 병행 처리 제어

  • 병행 처리 제어의 필요성
    • 분실된 업데이트 문제 : 두 개의 트랜잭션이 동일한 아이템에 접근, 
      서로의 연산이 중첩될 시 올바르지 않은 값이 저장될 수 있음
    • 임시 업데이트 문제 : 한 트랜잭션이 값을 업데이트하다가 실패할 경우 
      롤백 이전에 다른 트랜잭션이 값을 읽게 될 경우 오류 값을 읽게 됨
    • 잘못된 요약 문제 : 한 트랜잭션이 aggregate 함수 (sum, max, min) 등을 실행 중인데 
      다른 트랜잭션이 이 값들 중 하나를 업데이트할 경우 업데이트 시점이 다름 
      (업데이트 이전 시점 값)
  • 데이터베이스 병행 처리 제어의 목적
    • 트랜잭션의 충돌을 방지하기 위해 고립성을 강제
    • 데이터베이스의 일관성 보존
    • read-writewrite-write 충돌을 방지
      → 충돌하는 스케줄을 찾아 직렬화 스케줄을 만드는 것이 진정한 목적

6. 록킹

(1) 록킹의 정의

  • 트랜잭션이 자료를 배타적으로 접근하는 방법
  • 자료를 배타적으로 접근할 경우, 트랜잭션이 완료된 이후 다른 트랜잭션이 실행되어 직렬성이 확보됨
  • 트랜잭션의 ACID 특성을 해치는 접근 연산은 주로 갱신임
    (예시 : 읽기 연산은 자료 값을 바꾸지 않으나, 읽기 연산 중 갱신이 발생하면 잘못된 값을 읽게 됨)

(2) 종류

  • 공유 록 (Shared Lock)
    특정 자료 Q에 공유 록을 걸면 다른 트랜잭션이 이 자료를 갱신할 수 없음. 다만 읽혀질 수는 있음
  • 배타 록 (Exclusive Lock)
    자료를 기록할 때 배타 록 X를 걸어야 함. 
    록 X를 가진 트랜잭션은 자료를 읽고 갱신할 수 있음 (그 외에는 X)
    또한 배타 록 X가 걸린 자료는 공유 록 S를 가진 트랜잭션들에 의해 읽혀질 수 없음

(3) 데드 록(Deadlock) 탐지 및 해결 기법

  • 트랜잭션을 실행한 후 데드 록(Deadlock, 교착상태)에 걸려 있는 트랜잭션 중의 하나를 취소하여 해결
  • 해결 부작용 : Starvaition, 특정 트랜잭션은 계속해서 기다려야 함

레퍼런스

http://wiki.hash.kr/index.php/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98

profile
공부했던 내용들을 모아둔 창고입니다.

0개의 댓글