Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe

Slides:



Advertisements
Similar presentations
DB 후루룩 & ONE EYED JACK Collaboration_ ★. 다중 사용자 환경에서 둘 이상의 트랜잭션이 동시에 접속하여 해당 연산을 수행할 때, 문제 점이 전혀 발생하지 않도록 트랜잭션의 수행 을 적절히 제어해 주는 것을 말함. DBMS 예금 입출금 예금.
Advertisements

일정 관리 다이어리 제작 JSP Programming with a Workbook. 학습 목표  사용자의 일정을 관리할 수 있는 다이어리에 대하여 알아보자. JSP Programming with a Workbook2.
출석수업 과제 – 총 5문제, 10월 25일 제출 정보통계학과 장영재 교수.
컴퓨터와 인터넷.
제 19장 트랜잭션 처리를 위한 개념 경북대학교 컴퓨터과학과 박 영철.
9장. 트랜잭션 트랜잭션(transaction) 항공기 예약, 은행, 신용 카드 처리, 대형 할인점 등에서는 대규모
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
CUDA Setting : Install & Compile
Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe
12장 데이터 읽기 일관성과 락.
Windows Server 장. 사고를 대비한 데이터 백업.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
제 6장 트랜잭션 트랙잭션 동시성 제어 복구.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
Sungkyunkwan University OS Project Dongkun Shin
트랜잭션 처리(Transaction Processing)
5장 Mysql 데이터베이스 한빛미디어(주).
자바 5.0 프로그래밍.
어서와 C언어는 처음이지 제14장.
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
27장. 모듈화 프로그래밍.
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
8장. 상호 배타적 집합의 처리.
뇌를 자극하는 Windows Server 2012 R2
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
3D 프린팅 프로그래밍 01 – 기본 명령어 강사: 김영준 목원대학교 겸임교수.
9장. 트랜잭션 트랜잭션(transaction) 항공기 예약, 은행, 신용 카드 처리, 대형 할인점 등에서는 대규모
2장. 변수와 타입.
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
Chapter 03. 관계 데이터베이스 설계.
제 19 장 데이터베이스에서 동시성 제어를 위한 프로토콜에 대한 개요
ARM Development Suite v1.2
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
1. 트랜잭션 (1) 트랜잭션 1) 트랜잭션의 정의 ① A collection of operations that performs a single logical function in a database application. (데이터베이스 응용프로그램에서 하나의 논리적 기능을.
데이터 베이스 DB2 관계형 데이터 모델 권준영.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
객체기반 SW설계 팀활동지 4.
균형이진탐색트리 이진 탐색(binary search)과 이진 탐색 트리(binary search tree)와의 차이점
( Windows Service Application Debugging )
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
약식 진리표를 이용한 타당성 증명 진리표 그리기 방법의 한계
바넘효과 [Barnum effect] 사람들이 보편적으로 가지고 있는 성격이나 심리적 특징을 자신만의 특성으로 여기는 심리적 경향. 19세기 말 곡예단에서 사람들의 성격과 특징 등을 알아 내는 일을 하던 바넘(P.T. Barnum)에서 유래하였다. 1940년대 말 심리학자인.
10 데이터 조작어 데이터 조작어 데이터 입력 데이터 수정 데이터 삭제 MERGE 트랜잭션 관리 시퀀스.
AT MEGA 128 기초와 응용 I 기본적인 구조.
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
멀티미디어시스템 제 5 장. 멀티미디어 데이터베이스 개념 IT응용시스템공학과 김 형 진 교수.
11장 배열 1. 배열이란? 1.1 배열의 개요 1.2 배열의 선언과 사용.
9 브라우저 객체 모델.
ER-관계 사상에 의한 관계데이터베이스 설계 충북대학교 구조시스템공학과 시스템공학연구실
상관계수.
이산수학(Discrete Mathematics)  술어와 한정기호 (Predicates and Quantifiers)
제 4 장 Record.
10주 MariaDB에서 트랜잭션 지원 및 동시성 제어 기능
Mariadb 트랜잭션과 동시성 제어 장종원
 6장. SQL 쿼리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
교착 상태 해결 : 교착 상태 탐지 교착 상태 탐지(Deadlock Detection)
진리표를 이용한 타당성 증명 진리표(truth table) : 단순 문장들이 진리값을 상이하게 가질 수 있는 가능한 모든 경우를 남김없이 열거한 표 (ex) 오늘은 날씨가 맑거나 비가 올 것이다. 오늘은 날씨가 맑다 비가 온다 오늘은 날씨가 맑거나 비가 올 것이다. T.
7 생성자 함수.
6 객체.
Presentation transcript:

Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe 제 18장 데이터베이스 트랜잭션 처리의 기반 Fundamentals of Database Systems R. A. Elmasri and S. B. Navathe © 2005 황규영 홍의경 음두헌 박영철 김진호 조완섭

Fundamentals of Database Systems 18장. 트랜잭션 처리를 위한 개념 18.1 트랜잭션 처리의 개요 18.2 트랜잭션과 시스템 개념 18.3 트랜잭션의 성질 18.4 회복가능성을 근거로 한 스케줄의 특성화 18.5 직렬가능성을 근거로 한 스케줄의 특성화 18.6 SQL의 트랜잭션 지원 18.7 요약 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.1 트랜잭션 처리의 개요 18.1.1 단일 사용자 시스템과 다수 사용자 시스템 18.1.2 트랜잭션, 읽기와 쓰기 연산, DBMS 버퍼 18.1.3 동시성 제어가 필요한 이유 18.1.4 회복이 필요한 이유 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.1.1 단일 사용자 시스템과 다수 사용자 시스템 단일 사용자 시스템 한번에 한 사람만이 사용할 수 있는 시스템 다수 사용자 시스템 동시에 많은 사용자가 사용할 수 있는 시스템 예: 은행, 보험회사, 증권 거래소 등에서 사용되는 시스템 다중 프로그래밍 개념 인터리빙 병렬처리 Ch18 Fundamentals of Database Systems

[그림 18.1] 동시에 수행되는 트랜잭션들을 인터리빙 형태로 처리하는 것과 병렬처리하는 것. A A B B C CPU1 D CPU2 시간 t2 t3 t4 t1 [그림 18.1] 동시에 수행되는 트랜잭션들을 인터리빙 형태로 처리하는 것과 병렬처리하는 것. Ch18 Fundamentals of Database Systems

18.1.2 트랜잭션, 읽기와 쓰기 연산, 그리고 DBMS 버퍼 읽기 전용 트랜잭션: 데이타를 검색만 하는 트랜잭션 트랜잭션의 데이타베이스 접근 연산 read_item(X) : 검색 연산 write_item(X) : 삽입, 삭제, 변경 연산 (a) read_item(X); (b) read_item(X); X:=X-N; X:=X+M; write_item(X); write_item(X); read_item(Y); Y:=Y+N; write_item(Y); [그림 18.2] 두 개의 샘플 트랜잭션 (a) 트랜잭션 T1, (b) 트랜잭션 T2 트랜잭션의 읽기 집합: 그 트랜잭션이 읽는 모든 항목들의 집합 트랜잭션의 쓰기 집합: 그 트랜잭션이 기록하는 모든 항목들의 집합 Ch18 Fundamentals of Database Systems

18.1.2 트랜잭션, 읽기와 쓰기 연산, 그리고 DBMS 버퍼(cont.) read_item(X)의 수행과정 1. 항목 X를 포함하는 디스크 블록의 주소를 찾는다. 2. 그 디스크 블록을 주기억장치의 버퍼로 복사한다. (디스크 블록이 주기억장치의 버퍼에 이미 존재하는 것이 아닐 때) 3.항목 X를 버퍼로부터 프로그램 변수 X에 복사한다. write_item(X)의 수행과정 2. 그 디스크 블록을 주기억장치의 버퍼로 복사한다. (디스크 블록이 주기억장치의 버퍼에 이미 존재하는 것이 아닐 때) 3.항목 X를 프로그램 변수 X에서 그 버퍼의 정확한 위치로 복사한다. 4. 갱신된 블록을 디스크에 저장한다. (즉시 또는 나중의 어느 시점에) Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.1.3 동시성 제어가 필요한 이유 갱신 손실 문제(the lost update problem) T1 T2 (a) read_item(X); X:=X-N; write_item(X); read_item(Y); Y:=Y+N; write_item(Y); 시간 read_item(X); X:=X+M; write_item(X); commit; rollback; T2이 갱신한 결과를 잃어버리게 됨 [그림 18.3] 동시 수행을 제어하지 않았을 때 발생할 수 있는 문제점들 (a) 갱신 손실 문제 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.1.3 동시성 제어가 필요한 이유(cont.) 임시 갱신 (또는 오손 읽기) 문제 : temporary update(or dirty read) problem T1 T2 read_item(X); X:=X-N; write_item(X); read_item(Y); Y:=Y+N; Write_item(Y); Print X; commit; 트랜잭션 T1이 실패하면 X의 값은 원래의 값으로 바뀌어야 한다. 그런데 바꾸기 전에 T2가 X의 잘못된 임시 값을 읽었다. 시간 (b) rollback; [그림 18.3] 동시 수행을 제어하지 않았을 때 발생할 수 있는 문제점들 (b) 임시 갱신 문제 Ch18 Fundamentals of Database Systems

18.1.3 동시성 제어가 필요한 이유 (cont.) 부정확한 요약 문제(the incorrect summary problem) T1 T3 sum := 0; read_item(A); sum := sum+A; . read_item(X); sum := sum+X; read_item(Y); sum := sum+Y; commit; 시간 T1이 N을 뺀 후에 T3이 X를 읽고 T1이 N을 더하기 전에 T3이 Y를 읽으므로 요약(합)의 결과가 N만큼 적게된다. [그림 18.3] 동시 수행을 제어하지 않았을 때 발생할 수 있는 문제점들 (c) 부정확한 요약 문제 read_item(X); X := X- N; write_item(X); read_item(Y); Y := Y+N; write_item(Y); commit;

Fundamentals of Database Systems 18.1.3 동시성 제어가 필요한 이유 (cont.) 반복할 수 없는 읽기 문제 (unrepeatable read problem) 트랜잭션 T가 수행 도중 하나의 항목을 두 번  읽을 때 각각의 읽기 연산 사이에 다른 트랜잭션 T'가 그 항목의 값을 바꾸게 되면 T는 동일한 항목을 서로 다른 값으로 읽게 된다. Ch18 Fundamentals of Database Systems

18.1.3 동시성 제어가 필요한 이유 (cont.) T1 T3 시간 read_item(X); print X; …. commit 시간 read_item(X); X := X- N; write_item(X); commit

Fundamentals of Database Systems 18.1.4 회복이 필요한 이유 DBMS는 트랜잭션의 실행 결과 다음의 두가지 성질 중 한가지를 만족하도록 보장해야 한다. 트랜잭션의 모든 연산이 성공적으로 완료되고, 그 결과가 데이타베이스에 영구적으로 기록된다. 트랜잭션이 데이타베이스나 어떤 다른 트랜잭션에도 영향을 미치지 않는다. DBMS는 트랜잭션 T의 일부 연산만이 반영되고 나머지 연산은 반영되지 않는 그러한 상황을 허용하면 안된다. 이러한 상황은 트랜잭션이 연산의 일부만 수행하고 연산 전체를 수행하기 전에 실패하는 경우 발생할 수 있다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.1.4 회복이 필요한 이유(cont.) 실패의 분류 트랜잭션 고장 (transaction failure) 시스템 고장(system failure) 매체 고장(media failure) 실패의 원인 컴퓨터 고장 또는 시스템 붕괴(system crash) 트랜잭션 또는 시스템 오류 트랜잭션이 탐지한 지역적 오류 또는 예외 조건 동시성 제어 시행 디스크 고장 물리적 문제와 재해 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.2 트랜잭션과 시스템 개념 18.2.1 트랜잭션의 상태와 추가적인 연산들 18.2.2 시스템 로그 18.2.3 트랜잭션의 완료점 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.2.1 트랜잭션의 상태와 추가적인 연산들 하나의 트랜잭션은 완전히 수행을 완료하거나 전혀 수행되지 않아야 함 회복을 위한 목적으로 회복 관리자는 트랜잭션에 대해 다음과 같은 연산들이 적용된 시점을 유지해야 함 트랜잭션의 시작(BEGIN_TRANSACTION) 읽기 또는 쓰기(READ or WRITE) 트랜잭션의 종료(END_TRANSACTION) 트랜잭션의 완료(COMMIT_TRANSACTION) 복귀(ROLLBACK) 또는 철회(ABORT) 위의 연산 외에 취소(undo)와 재수행(redo)과 같은 추가적인 연산들을 필요로 하는 회복 기법들도 있음 Ch18 Fundamentals of Database Systems

18.2.1 트랜잭션의 상태와 추가적인 연산들(cont.) 수행중인 상태 완료 PARTIALLY COMMITTED 부분 완료 상태 철회 완료 상태 읽기, 쓰기 트랜잭션 시작 종료 상태 실패 상태 트랜잭션 종료 [그림 18.4] 트랜잭션 실행의 상태를 나타내는 상태 전이도 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.2.2 시스템 로그 트랜잭션 실패를 회복하기 위해서 시스템은 로그(log)를 유지함 로그에는 데이타베이스 항목에 영향을 미치는 트랜잭션의 모든 연산들을 기록하며, 이 정보는 트랜잭션 실패를 회복하는데 사용됨 로그는 디스크 오류를 제외한 어떠한 오류에도 영향을 받지 않도록 하기 위하여 디스크에 유지됨 로그를 주기적으로 테이프 등에 백업하여 디스크 오류 등의 재해로부터 대비함 로그에 기록되는 레코드들의 유형은 다음과 같음. T는 트랜잭션 식별자임 [start_transaction, T] [write_item, T, X, old_value, new_value] [read_item, T, X] [commit, T] [abort, T] 로그를 이용하여 트랜잭션에 의해 변화된 내용을 취소하거나 재수행할 수 있음 연쇄 복귀(cascading rollback)를 방지하는 회복 프로토콜에서는, 거의 모든 실제 프로토콜이 이에 해당하는데, 읽기 연산을 시스템 로그에 기록할 필요가 없다. 그러나 모든 데이타베이스 연산을 추적해야 하는 감사(auditing) 시스템 같이 로그를 다른 목적으로 사용하는 경우에는 읽기 연산을 시스템 로그에 기록해야 한다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.2.3 트랜잭션의 완료점 트랜잭션의 완료(commit) 데이타베이스를 접근하는 모든 연산들이 성공적으로 수행되고, 트랜잭션의 모든 연산들이 데이타베이스에 끼친 효과들이 로그에 저장되었을 때, 트랜잭션 T는 완료점에 도달한다. 완료점을 지나면 트랜잭션을 ‘완료’ 되었다고 한다. 시스템 고장이 일어나면 로그에 [start_transaction, T]를 기록했지만 [commit, T] 레코드는 기록하지 않은 모든 트랜잭션 T를 찾아서 복귀시킨다. 로그에 commit 레코드를 기록한 트랜잭션은 commit 레코드 이전에 먼저 자신의 모든 쓰기 연산들을 로그에 기록해야 한다. 로그 레코드가 추가될 때마다 디스크에 직접 기록하는 대신에 로그 화일의 한 블록을 주기억장치에 유지하고 그것이 로그 레코드들로 채워질 때마다 디스크에 한 번만 기록하는 방법이 보편적으로 사용된다. 트랜잭션을 완료하기 전에 로그화일에 강제 쓰기(force-writing)한다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.3 트랜잭션의 성질 트랜잭션은 다음의 ACID 성질을 가져야 하며, 이 성질은 DBMS의 동시성 제어와 회복 기법을 통하여 유지됨 원자성(Atomicity). 한 트랜잭션은 하나의 원자적 수행 단위이다. 트랜잭션은 완전히 수행되거나 전혀 수행되지 않아야 한다. 일관성 유지 (Consistency preservation). 트랜잭션을 완전히 실행하면 데이타베이스를 하나의 일관된 상태에서 또 다른 일관된 상태로 바꿔야 한다. 고립성(Isolation). 하나의 트랜잭션은 다른 트랜잭션들과는 독립적으로 실행되는 것처럼 보여야 한다. 즉 하나의 트랜잭션의 실행은 동시에 실행 중인 다른 트랜잭션의 간섭을 받아서는 안된다. 지속성(Durability) 또는 영속성(permanency). 일단 한 트랜잭션이 데이타베이스를 변경시키고 그 변경이 완료되면 그 변경은 이후의 어떠한 고장에도 손실되지 않아야 한다. 고립성 등급. 0 등급 : 상위등급의 트랜잭션이 오손읽기(dirty-read)한 것을 덮어쓰지 않는다. 1 등급 : 갱신 손실(lost update)이 없다. 2 등급 : 갱신 손실과 오손 읽기가 없다. 3 등급 : 등급 2의 성질을 모두 가지며, 이외에도 반복 읽기(repeatable read) 성질을 가진다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.4 회복가능성을 근거로 한 스케줄의 특성화 트랜잭션들이 인터리빙 방식으로 동시에 수행될 때 여러 트랜잭션들이 가진 연산들의 실행 순서를 스케줄(또는 히스토리)이라 한다. 18.4.1 트랜잭션들의 스케줄(히스토리) 18.4.2 회복가능성을 근거로 한 스케줄의 특성화 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.4.1 트랜잭션의 스케줄(히스토리) 트랜잭션의 스케줄 n개의 트랜잭션 T1, T2, ..., Tn의 스케줄(히스토리) S는 이들 트랜잭션들의 연산들을 순서화한 것임 여기서 스케줄 S에 참여하는 각 트랜잭션 Ti에 대해서 Ti의 연산들이 Ti내에서와 동일한 순서로 스케줄 S에 나타나야 함 [예: 그림 14.3 (a) ] Sa : r1(X); r2(X); w1(X); r1(Y); w2(X); w1(Y); 충돌(conflict) 하나의 스케줄에 포함된 두 개의 연산이 아래의 세 가지 조건들을 모두 만족하면 충돌(conflict)이라고 함 : (1) 그 연산들은 서로 다른 트랜잭션에 속한다. (2) 그 연산들은 동일한 항목 X에 접근한다. (3) 그 연산들 중 최소한 하나는 write_item(X)이다. Ch18 Fundamentals of Database Systems

18.4.1 트랜잭션의 스케줄(히스토리)(cont.) 완전한 스케줄(complete schedule) : n개의 트랜잭션 T1, T2, ..., Tn에 대한 스케줄 S가 다음과 같은 조건을 만족하면 완전한 스케줄이라고 함 1. S 내의 연산들은 T1, T2, ..., Tn내의 연산들이며, 각 트랜잭션의 마지막 연산으로서 완료나 철회 연산을 포함한다. 2. 트랜잭션 Ti의 연산들의 어떠한 쌍에 대해서도 S내에서 그 연산들이 나타나는 순서는 Ti내에서 그 연산들이 나타나는 순서와 동일하다. 3. 충돌하는 어떠한 두 개의 연산에 대해서도 그들 중 하나는 반드시 나머지 하나보다 스케줄에서 먼저 나타나야 한다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.4.2 회복가능성을 근거로 한 스케줄의 특성화 회복가능한 스케줄 (recoverable schedule) 트랜잭션 T 가 완료되었다면 절대 복귀(rollback)될 필요가 없다는 기준을 두고, 이 기준을 만족하는 스케줄을 회복가능한 스케줄이라 한다. 회복가능(recoverable) 만약 스케줄 S내의 어떤 트랜잭션 T에 대해서도 T가 읽은 항목에 쓰기연산을 수행한 모든 트랜잭션 T’이 완료되기 전까지 T가 완료되지 않는다면 S가 회복가능하다고 한다. 회복가능한 스케줄내에서는 어떠한 완료된 트랜잭션도 복귀할 필요가 없다. 연쇄복귀(cascading rollback) 또는 연쇄철회(cascading abort) 완료되지 않은 트랜잭션이 실패한 트랜잭션으로부터 항목을 읽어옴으로써 발생하는 것으로 하나의 트랜잭션 철회가 다른 트랜잭션의 철회로 이어지는 현상이 발생함 [예] Se : r1(X); w1(X); r2(X); r1(Y); w2(X); w1(Y); a1; a2 Ch18 Fundamentals of Database Systems

18.4.2 회복가능성을 근거로 한 스케줄의 특성화(cont.) 연쇄복귀방지 완료된 트랜잭션이 쓴 항목만을 읽는다. 엄격한 스케줄(strict schedule) 마지막으로 X에 쓰기연산을 한 트랜잭션이 완료되거나 철회되기 전까지 다른 트랜잭션이 X를 읽지도 쓰지도 못한다. 회복과정 : 철회된 쓰기연산이 적용되기 전에 X가 가지고 있던 이전값(before image, BFIM)으로 복귀. 지금까지 스케줄들을 (1) 회복가능성, (2) 연쇄 복귀의 방지, (3) 엄격함이라는 관점에 따라 특성화하였다. 스케줄들이 가진 특성들은 번호가 높아짐에 따라 더 엄중한 조건임을 알 수 있다. 그러므로 조건 (2)는 조건 (1)을 암시하고 조건 (3)은 조건 (2)와 (1) 모두를 암시한다. 따라서, 모든 엄격한 스케줄들은 연속적인 철회가 필요 없으며, 모든 연속적인 철회가 필요 없는 스케줄들은 회복가능하다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.5 직렬가능성을 근거로 한 스케줄의 특성화 스케줄들의 직렬가능성 개념은 트랜잭션들의 연산들이 인터리빙되어 수행될 때 어떤 스케줄들이 정확한지 식별하는데 사용된다. 18.5.1 직렬, 비직렬, 충돌 직렬가능 스케줄 18.5.2 스케줄의 충돌 직렬가능성 테스트 18.5.3 직렬가능성의 용도 18.5.4 뷰 동치와 뷰 직렬가능성 18.5.5 스케줄 동치의 기타 유형 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.5.1 직렬, 비직렬, 충돌 직렬가능 스케줄 직렬스케줄(Serial schedule) T1 T2 read_item(X); X:=X-N; write_item(X); Y:=Y+N; write_item(Y); X:=X+M; 시간 read_item(Y); (a) (b) 그림 18.5 (a)와 (b)의 스케줄은 다른 트랜잭션과 인터리빙 없이 연속적으로 수행되므로 직렬 스케줄이다. Ch18 Fundamentals of Database Systems

18.5.1 직렬, 비직렬, 충돌 직렬가능 스케줄(cont.) 비직렬 스케줄(Nonserial schedule) T1 T2 read_item(X); X:=X-N; write_item(X); Y:=Y+N; write_item(Y); X:=X+M; 시간 read_item(Y); (c) (d) 그림 18.5 (c)와 (d)의 스케줄은 두 트랜잭션들의 연산들이 인터리빙되므로 비직렬 스케줄이다. Ch18 Fundamentals of Database Systems

18.5.1 직렬, 비직렬, 충돌 직렬가능 스케줄(cont.) 직렬 스케줄 스케줄에 참가하는 각 트랜잭션 T에 대해서 T에 속한 모든 연산들이 다른 트랜잭션의 연산들과 인터리빙되지 않고 연속적으로 실행될 때 직렬 스케줄이라고 함 스케줄의 직렬가능 n개 트랜잭션들로 구성된 스케줄 S가 동일한 n개의 트랜잭션들로 구성된 어떤 직렬 스케줄과 동치일 경우를 의미함 결과 동치(result equivalence) 두 개의 스케줄이 데이타베이스의 최종 상태를 동일하게 만드는 경우 스케줄의 동치를 정의하는데 사용해서는 안됨 충돌 동치 두 스케줄에서 어떠한 두 개의 충돌 연산들의 순서도 동일할 경우 Ch18 Fundamentals of Database Systems

18.5.1 직렬, 비직렬, 충돌 직렬가능 스케줄(cont.) 충돌 직렬 가능(Conflict serializable) 충돌 동치의 개념을 이용해서 스케줄 S가 어떤 직렬 스케줄 S’과 (충돌) 동치일 경우 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.5.2. 스케줄의 충돌 직렬가능성 테스트 스케줄 S의 충돌 직렬가능성 테스트 알고리듬 스케쥴 S에 참가하는 각 트랜잭션 Ti에 대해 선행 그래프에서 Ti라는 레이블을 가진 노드 생성 스케줄 S에서 Ti가 write_item(X)를 실행한 후에 Tj가 read_item(X)를 실행하는 경우마다 선행 그래프에 간선 (Ti Tj) 생성 스케줄 S에서 Ti가 read_item(X)를 실행한 후에 Tj가 write_item(X)를 실행하는 경우마다 선행 그래프에 간선 (Ti Tj) 생성 스케줄 S에서 Ti가 write_item(X)를 실행한 후에 Tj가 write_item(X)를 실행하는 경우마다 선행 그래프에 간선 (Ti Tj) 생성 스케줄 S가 직렬가능한 것은 선행 그래프에 사이클이 없다는 것의 필요충분조건 스케줄 S와 동치인 직렬스케줄 S’의 생성 선행 그래프에 존재하는 모든 간선에 대해 위상정렬함으로써 얻어짐 Ch18 Fundamentals of Database Systems

18.5.2. 스케줄의 충돌 직렬가능성 테스트(cont.) 스케줄의 충돌 직렬성 테스트와 동치인 직렬스케줄 생성의 예제 transaction T1 read_item(X); write_item(X); read_item(Y); write_item(Y); transaction T2 read_item(Z); transaction T3 write_item(Z); (a) [그림 18.8] 직렬 가능성을 테스트 하는 예. (a) 트랜잭션의 읽기와 쓰기 연산들 Ch18 Fundamentals of Database Systems 2

18.5.2. 스케줄의 충돌 직렬가능성 테스트(cont.) (b) transaction T1 transaction T2 transaction T3 read_item(Z); read_item(Y); write_item(Y); write_item(Z); read_item(X); write_item(X); [그림 18.8] 직렬가능성을 테스트하는 예 (b)트랜잭션 T1, T2, T3에 대한 스케줄 E Ch18 Fundamentals of Database Systems

18.5.2. 스케줄의 충돌 직렬가능성 테스트(cont.) transaction T1 transaction T2 transaction T3 read_item(Y); read_item(Z); read_item(X); write_item(X); write_item(Y); write_item(Z); write_item(Y); read_item(Y); write_item(Y); write_item(X); [그림 18.8] 직렬 가능성을 테스트하는 예 (c)트랜잭션 T1, T2, T3에 대한 스케줄 F Ch18 Fundamentals of Database Systems 3

18.5.2. 스케줄의 충돌 직렬가능성 테스트(cont.) 스케줄 E에 대한 선행 그래프 (d) T2 T3 T1 Y X Y,Z 동치인 직렬 스케줄 없음 이유 사이클 X(T1 → T2), Y(T2 → T1) 사이클 X (T1→ T2), YZ(T2→ T3), Y(T3→ T1) 스케줄 F에 대한 선행 그래프 (e) T1 T2 T3 X,Y Y Y,Z 동치인 직렬 스케줄 T3 → T1 → T2 [그림 18.8] 직렬가능성을 테스트하는 예 (d) 스케줄 E에 대한 선행 그래프 (e) 스케줄 F에 대한 선행 그래프 Ch18 Fundamentals of Database Systems 4

18.5.2. 스케쥴의 충돌 직렬가능성을 위한 테스트(cont.) 동치인 직렬 스케줄을 두 개 가지는 스케줄을 나타내는 선행 그래프 T3 (f) T1 T2 동치인 직렬 스케줄 T3 → T2 → T1 T3 → T1 → T2 [그림 18.8] 직렬 가능성을 테스트하는 예(cont.) (f) 동치가 되는 두 개의 직렬 스케줄들을 갖는 선행 그래프 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.5.3 직렬가능성의 용도 직렬가능한 스케줄에서는 어떠한 정확성도 잃지 않으면서 동시 실행의 장점을 얻을 수 있음 직렬 가능성 테스트의 문제점 직렬가능성을 보장하기 위해 스케줄의 연산들이 어떻게 인터리빙 될 것인가를 미리 결정하는 것은 실질적으로 불가능함 비실용적 (직렬가능이 아니라고 판명되면 그 스케줄의 영향을 반드시 취소시켜야 함) 직렬 가능성을 보장해주는 몇가지 동시성 제어 프로토콜 두 단계 로킹 방법 타임스탬프 순서화에 근거한 방법 데이타 항목의 여러 버전을 유지하는 것과 보증 또는 검증에 기반을 둔 방법 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.5.4 뷰 동치와 뷰 직렬가능성 뷰 동치(View equivalence) 다음의 세 가지 조건이 만족되면 두 스케줄 S와 S'은 뷰 동치이다. 동일한 트랜잭션들의 집합이 S와 S ’에 참여하고, S와 S’은 그 트랜잭션들이 가진 연산들과 동일한 연산들을 포함한다. S에 속한 Ti의 임의의 ri(X)연산에 대해서, 그 연산이 읽는 X의 값이 Tj에 속한 연산 wj(X)가 기록한 값(또는 그 스케줄이 시작되기 전에 X가 가지고 있던 원래 값)이라면 S’에 속한 Ti의 ri(X) 연산이 읽는 X 값에 대해서도 동일한 조건이 만족되어야 한다. 만약 S에서 Tk의 wk(Y) 연산이 항목 Y를 마지막으로 기록하는 연산이라면 S’ 에서도 Tk의 wk(Y) 연산이 항목 Y를 마지막으로 기록하는 연산이어야 한다. 뷰 동치와 뷰 직렬가능(View serializability) 스케줄 S가 어떤 직렬 스케줄과 뷰동치이면 S는 뷰 직렬가능 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.5.4 뷰 동치와 뷰 직렬가능성(cont.) 읽지않고 쓰기(blind write) 충돌 직렬가능과 뷰 직렬가능 뷰 직렬가능의 정의가 충돌 직렬가능의 정의보다 덜 제한적임 : 충돌 직렬가능한 스케줄은 뷰 직렬가능하지만 그 역은 성립하지 않음 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.5.5 스케줄 동치의 기타 유형 가끔 스케줄의 직렬가능성이 동시 실행의 정확성을 보장하기 위한 조건으로 너무 제약적일 때가 있다. 더하는 연산과 빼는 연산은 교환적이기 때문에 이들은 어떠한 순서로도 적용할 수 있으므로, 직렬 스케줄은 아니지만 정확한 스케줄들을 만드는 것이 가능하다. 최근에는 직렬가능성이 스케줄의 정확성을 결정하는 조건으로 너무 엄격하다고 여겨지는 경우들을 다루기 위해서 동시성 제어 이론을 확장하는 연구가 진행되고 있다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.6 SQL의 트랜잭션 지원 SQL 트랜잭션은 작업의 논리적인 단위이며 원자성이 보장된다. 하나의 SQL 문은 오류없이 실행을 완성하든지 혹은 실패하여 데이타베이스를 수정하지 않은 상태로 두든지 간에 관계없이 항상 원자적 수행단위로 간주된다. SQL에는 명시적인 Begin_Transaction 문이 없다. 트랜잭션은 특정한 SQL 문을 만났을 때 묵시적으로 시작한다. 모든 트랜잭션은 명시적인 종료(end) 문을 가져야 한다. 명시적인 종료 문이란 COMMIT 혹은 ROLLBACK이다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.6 SQL의 트랜잭션 지원(cont.) 모든 트랜잭션들은 속성들을 가지고 있으며, 이러한 속성들은 SQL2에서 SET TRANSACTION 문으로 명시된다. 이러한 속성들에는 접근 모드(access mode), 진단 영역 크기(diagnostic area size), 고립성 등급(isolation level)이 있다. 예제: EXEC SEQ SET TRANSACTION READ WRITE DIAGNOSTIC SIZE 5 ISOLATION LEVEL SERIALIZABLE; Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.6 SQL의 트랜잭션 지원(cont.) 접근 모드 READ ONLY : 데이타 검색만이 가능하다. 고립성 등급을 READ UNCOMMITTED로 명시한다면 접근 모드는 READ ONLY로 된다. READ WRITE : 수정, 삽입, 삭제, 생성 명령을 실행할 수 있다. 고립성 등급을 READ UNCOMMITTED로 명시하지 않는 한 접근 모드의 디폴트는 READ WRITE이다. 진단 영역 크기 : DIAGNOSTIC SIZE n 정수 값 n을 지정하며 이는 진단 영역에서 동시에 유지할 수 있는 조건들의 개수를 나타낸다. 이러한 조건들은 사용자에게 가장 최근에 실행한 SQL 문에 대하여 반환정보(즉, 오류 혹은 예외)를 제공한다. Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.6 SQL의 트랜잭션 지원(cont.) 고립성 등급 : ISOLATION LEVEL <isolation> <isolation>의 값 READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE 디폴트 고립성 등급은 SERIALIZABLE이며, 몇몇 시스템에서는 READ COMMITTED를 디폴트 고립성 등급으로 사용하고 있음 고립성 등급에 따르는 문제들 오손 읽기(dirty read) 반복할 수 없는 읽기(nonrepeatable read)    팬텀(phantom) 현상 Ch18 Fundamentals of Database Systems

Fundamentals of Database Systems 18.7 요 약 트랜잭션 처리의 개요 다사용자 DBMS 동시성 제어와 회복이 필요한 이유 트랜잭션과 트랜잭션의 성질 ACID 성질 트랜잭션의 스케줄과 직렬 가능성 스캐줄의 직렬 가능성 검사 방법과 연산의 동시 실행 SQL의 트랜잭션 지원 SQL 규격에서 지원되는 트랜잭션 개념들 Ch18 Fundamentals of Database Systems