PROGRAMMING/DataBase

DATABASE_08_트랜잭션, 동시성 제어, 회복

seulda 2021. 4. 14. 14:43
728x90
  • 트랜잭션의 성질
    • 원자성 : 트랜잭션과 관련된 작업을이 전부 수행되든지 아니면 전부 수행되지 않아야 함
    • 일관성 : 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관성 있는 상태를 유지해야 함
    • 고립성 : 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장해야 함
    • 지속성 : 성공적으로 수행을 완료한 트랜잭션은 변경한 데이터를 데이터베이스에 영구히 저장해야 함
  • 동시성 제어
    • 트랜잭션이 동시에 실행될 때 데이터베이스의 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능
  • 갱신손실
    • 동시성 제어를 하지 않는 트랜잭션들이 발생시키는 문제. 한 트랜잭션의 갱신이 다른 트랜잭션에 의하여 분실되는 현상
  • 락-락의 유형
    • 트랜잭션이 데이터를 읽거나 변경할 때 데이터에 표시하는 잠금 장치 
    • 공유락 : 읽기를 할 때 사용하는 잠금 장치
    • 배타락 : 쓰기를 할 때 사용하는 잠금 장치
  • 2단계 락킹
    • 트랜잭션이 락을 걸고 해제하는 시점을 2단계로 나누어 시행하는 락킹 기법. 확장단계와 수축단계가 있음
  • 데드락
    • 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방이 데이터에 대하여 락을 요청하여 무한 대기 상태에 빠지는 현상
  • 트랜잭션 동시 실행 문제
    • 오손 읽기 : 다른 트랜잭션이 COMMIT을 하지 않은 데이터를 읽은 후 다른 트랜잭션이 철회하면서 발생하는 현상
    • 반복불가능 읽기 : 트랜잭션 중간에 다른 트랜잭션이 변경한 데이터를 읽으면서 발생하는 현상
    • 유령데이터 읽기 : 트랜잭션 중간에 다른 트랜잭션이 삽입한 데이터를 읽으면서 발생하는 현상
  • 트랜잭션 고립 수준 명령어
    • 트랜잭션의 읽기/쓰기에 대한 고립 수준을 결정하는 명령. READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 이 있음
  • 로그 파일을 이용한 회복
    • 재실행(REDO) : 로그 파일에 기록된 로그를 이용하여 트랜잭션이 수행한 결과를 다시 반영하는 연산
    • 취소(UNDO) : 로그 파일에 기록된 로그를 이용하여 트랜잭션이 수행한 결과를 취소하는 연산
  • 회복을 위한 로그 기록 방법
    • 즉시갱신 : 트랜잭션은 '갱신 데이터 → 로그', '버퍼 → 데이터베이스'작업이 부분완료 전에 동시에 진행될 수 있으며 REDO, UNDO 연산을 이용하여 복구함
    • 지연갱신 : 트랜잭션은 '갱신 데이터 → 로그'가 끝난 후 부분완료를 하고 '버퍼 → 데이터베이스'작업은 부분완료 후에 진행. REDO 연산을 이용하여 복구
  • 체크포인트
    • 데이터베이스와 트랜잭션 로그 파일을 동기화한 후, 동기화한 시점을 로그 파일에 기록하는 것
728x90