우봉수
2023. 5. 19. 19:55
2023. 5. 19. 19:55
트랜잭션
- 데이터베이스를 접근하고 처리하는 기본 단위
- 실행 중 멈추거나 중단되지 않는 최소 작업 단위 (원자성)
- All or Nothing
- 트랜잭션이 성공하여 반영되거나 실패하여 아무것도 반영되지 않거나 둘 중 한가지 결과만이 나올 수 있다.
- 성공하던 실패하던 값을 (DBMS가) 보장 해야한다.
- 트랜잭션 실행 전후 데이터베이스 내용이 일관되어야 한다 (일관성)
- 일관성의 정의는 모호함으로 프로그래머가 제대로된 정의를 해준 것에 따른다.
- 트랜잭션이 실행하는 과정에서 갱신한 데이터는 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조할 수 없다 (고립성)
- 트랜잭션을 동시에 실행하면서 상호간에 간섭이 일어나지 않도록 하는 기법이 필요함(동시성 제어)
- 트랜잭션이 완료되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장되어야 한다 (지속성)
데이터 베이스 입출력 원리
- 운영체제의 I/O 버퍼 관리를 통해 작업이 완료된다.
- 입출력 작업에는 I/O 버퍼를 거친다.
- 플러그 비트를 보고 판단하여 입력 여부를 판단
- 로그인: 사용자용 개인 user Memory 할당
- 디스크에 작성: I/O 버퍼에 들어간 블럭을 디스크로 옮긴다.
- 언제 작업이 완료되었는지는 알 수 없음 그렇기에 데이터 베이스에 저장된 값이 무엇인지 알 수 없다.
- 사용자 입력 → 메모리 → I/O 버퍼에 → 파일 디스크
- 이후 파일 디스크 정보 말고는 휘발성이라 소멸된다.
데이터 베이스에서 동일한 업무가 동시에 진행될 경우
- DBMS가 해당 문제 해결
- 락: DBMS는 해당 작업이 끝날 때까지 데이터에 락을 걸어 다른 트랜잭션이 동시에 접근하는 것을 막는다
- 직렬화: 트랜잭션들이 순차적으로 실행되도록 하여 동시에 발생할 수 있는 문제를 막는다.
- 최적화된 동시성 제어 기법: MVCC(Multi-Version Concurrency Control)와 같은 기법은 각 트랜잭션에 대해 데이터의 특정 버전을 제공하여 동시성 문제를 해결
트랜잭션의 상태
- 동작: 트랜잭션이 시작되고 연산들이 정상적으로 실행 중인 상태
- 부분완료: 트랜잭션에 정의된 모든 연산의 실행이 끝난 상태
- 완료: 트랜잭션이 성공적으로 종료된 상태 All
- 실패: 트랜잭션이 완료되지 못하고 더 이상 실행되지 못하는 상태
- 중단: 트랜잭션이 실패 한 후 실행되기 이전으로 복귀된 상태 Nothing