PowerPoint 프레젠테이션

Similar documents
Microsoft PowerPoint - ch10_회복과 병행 제어.pptx

<4D F736F F F696E74202D2039C0E52DC6AEB7A3C0E8BCC72E BC8A3C8AF20B8F0B5E55D>

슬라이드 제목 없음

PowerPoint 프레젠테이션

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint - QVIZMVUMWURI.pptx

PowerPoint Presentation

untitled

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

DBMS & SQL Server Installation Database Laboratory

chap 5: Trees

<C1A62038B0AD20B0ADC0C7B3EBC6AE2E687770>

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

PowerPoint 프레젠테이션

<4D F736F F F696E74202D E DB0FCB0E820BBE7BBF3BFA120C0C7C7D120B0FCB0E820B5A5C0CCC5CDBAA3C0CCBDBA20BCB3B0E8>

Microsoft PowerPoint - 3장-MS SQL Server.ppt [호환 모드]

6장. SQL

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 제목 없음

3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT

90

슬라이드 제목 없음

Commit_Wait / Commit_Logging 두파라미터를통해 Log File Sync 대기시간을감소시킬수있다는것은놀라움과의아함을동시에느낄수있다. 단지파라미터의수정을통해당연히대기해야하는시간을감축한다는것은분명성능을개선해야하는입장에서는놀라운일이될것이다. 반면, 그에따

단답형 (26 회기출문제 ) 1. 아래와같은테이블이있을때아래의 SQL 결과에대해서 Oracle, SQL Server 순서로적으시오 TAB1 COL1 CHAR(10) COL2 CHAR(10) INSERT INTO TAB1 VALUES ('1',''); INSERT INT

PowerPoint Presentation

歯sql_tuning2

13주-14주proc.PDF

뇌를자극하는 SQL Server < 이것만은알고갑시다 > 모범답안 2 장 1. Windows XP Home, Windows XP Professional, Windows Vista Basic, Window

Microsoft PowerPoint - 10Àå.ppt

untitled

5장 SQL 언어 Part II

쉽게 풀어쓴 C 프로그래밊

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

슬라이드 1

Microsoft PowerPoint _Operating System Transactions.pptx

슬라이드 제목 없음

Spring Boot/JDBC JdbcTemplate/CRUD 예제

10.ppt

Tablespace On-Offline 테이블스페이스 온라인/오프라인

ALTIBASE HDB Patch Notes

MySQL-.. 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

WINDOW FUNCTION 의이해와활용방법 엑셈컨설팅본부 / DB 컨설팅팀정동기 개요 Window Function 이란행과행간의관계를쉽게정의할수있도록만든함수이다. 윈도우함수를활용하면복잡한 SQL 들을하나의 SQL 문장으로변경할수있으며반복적으로 ACCESS 하는비효율역

금오공대 컴퓨터공학전공 강의자료

Tina Admin

06장.리스트

C# Programming Guide - Types

PowerPoint 프레젠테이션

Microsoft PowerPoint - 27.pptx

슬라이드 1

Microsoft PowerPoint Python-DB

뇌를자극하는 SQL Server 2012 (1 권 ) 1 권 : 기본편 < 이것만은알고갑시다 > 모범답안 1 장 1. (1) Microsoft (2) Oracle (3) IBM (4) Oracle (5) Micr

PowerPoint 프레젠테이션

Microsoft PowerPoint - o8.pptx

Ç¥Áö

Microsoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

<B5A5C0CCC5CDBAA3C0CCBDBA20BDC7B1E B0AD3134B0AD3135B0AD2E687770>

문서 템플릿

sms_SQL.hwp

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

Chapter 4. LISTS

SQL

금오공대 컴퓨터공학전공 강의자료

MS-SQL SERVER 대비 기능

PowerPoint Presentation

<4D F736F F F696E74202D E20B0FCB0E820B5A5C0CCC5CD20B8F0B5A8B0FA20B0FCB0E820B5A5C0CCC5CDBAA3C0CCBDBA20C1A6BEE020C1B6B0C7>

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

PowerPoint 프레젠테이션

PowerPoint Presentation

Microsoft PowerPoint SQL 추가 기능

금오공대 컴퓨터공학전공 강의자료

윈도우시스템프로그래밍

10주차.key

강의 개요


< B3E220C1A632C8B820C4C4C7BBC5CDBFEEBFEBBBE72041C7FC28C3D6C1BE292E687770>

게시판 스팸 실시간 차단 시스템

슬라이드 1

[Brochure] KOR_TunA

Microsoft PowerPoint - 사본 - DB06-SQL,시스템카탈로그,뷰.ppt

PowerPoint Template

PowerPoint 프레젠테이션

제4장 기본 의미구조 (Basic Semantics)

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

PowerPoint Presentation

Microsoft PowerPoint - chap05-제어문.pptx

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

슬라이드 제목 없음

JVM 메모리구조

- 2 -

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

윈도우시스템프로그래밍

제11장 프로세스와 쓰레드

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

배치프로그램에서튜닝대상 SQL 추출하기 엑셈컨설팅본부 /DB 컨설팅팀박성호 배치프로그램의성능문제를진단하기위해트레이스를사용할수없고, 개별 SQL 에대한성 능점검은비효율적인경우에어떻게배치프로그램의성능문제를제대로파악하고개선안을도 출할것인가? 복잡한로직을가지고있는프로그램 (

Transcription:

14. 트랜잭션처리

이장의주요내용 트랜잭션개요 트랜잭션의특성 (ACID) 원자성 (Atomicity) 일관성 (Consistency) 격리성 (Isolation) 영속성 (Durability) 트랜잭션스케쥴 회복가능트랜잭션스케쥴 직렬가능트랜잭션스케쥴 직렬가능스케쥴을보장하는 2PL

트랜잭션 (transaction) 이란? 한번에모두수행되거나수행되지않아야하는작업수행의논리적인단위 예 ) 은행데이타베이스를기반으로 A 계좌에서 B 계좌로 10 만원이체하는경우 원자트랜잭션 (atomic transaction) 이라고도함 선언의단위 응용설계자가데이타베이스연산들을한데모아한트랜잭션으로선언할수있음 명시방법 Begin transaction 과 end transaction 문으로선언 하나의응용프로그램은여러개의트랜잭션을포함할수있음

트랜잭션이가져야할특성 1. 원자성 (Atomicity) 트랜잭션변경연산은모두성공적으로수행되거나전혀수행되지않아야함 2. 일관성 (Consistency) 각트랜잭션은트랜잭션실행후에데이타베이스를하나의일관된상태로남겨두어야함 3. 격리성 (Isolation) 각각의트랜잭션은단독으로실행된것같은효과를가짐 4. 영속성 (Durability) 트랜잭션이성공적으로완료되면데이타베이스에대한변경은영구적이어야함 (15 장에서설명 ) 트랜잭션의 ACID 특성이라고함

트랜잭션의동작 한트랜잭션의수행은데이타베이스내의객체를접근하기위한일련이요청들을필요 읽기 (read) 연산 쓰기 (write) 연산 완료 (commit) 연산 트랜잭션에의해수행된갱신들을데이타베이스에영구적으로반영 복귀 (rollback) 연산 트랜잭션에서 SQL 문들에의해수행된모든갱신을취소함 따라서데이타베이스상태는트랜잭션의첫구문이실행되기전의상태로돌아가게됨 트랜잭션관리자 트랜잭션의행동을감시하고각동작의실행이가능한지를결정하는소프트웨어 다양한트랜잭션프로토콜을수행할책임을가짐

트랜잭션동작예제 SQL 문장 select balance from Customer where accountid=101 update Customer set balance = 0 where accountid = 101 SQL 문의동작 동작식별자 A B 동작의결과 accountid = 101를만족하는 Customer 객체의 balance 애트리뷰트읽어오기 (read) accountid = 101를만족하는 Customer 객체의 balance 애트리뷰트에쓰기 (write)

단일트랜잭션시스템에서트랜잭션의원자성 단일트랜잭션시스템이란? 한번에오직하나의트랜잭션만이실행 이전트랜잭션이종료될때까지새로운트랜잭션을시작할수없음 원자성을지원하기위한연산 완료 (commit) 복귀 (rollback)

SQL 데이타베이스에대한트랜잭션모드 자동완료모드 (autocommit mode) 하나의 SQL 문장은하나의트랜잭션으로수행 트랜잭션을오픈하기위한묵시적인요청으로시작 자동적으로완료요청 SQL 문장의실행이실패했을경우복귀 명시적완료모드 (explicit commit mode) 여러 SQL 문장들을단일트랜잭션으로실행 새로운트랜잭션을생성할수있도록오픈트랜잭션문실행 트랜잭션을완료할수있도록완료트랜잭션문실행 응용이트랜잭션의취소를요청하면복귀문장실행

의사코드로표현된트랜잭션예 open transaction /* Star Wars 영화의복사본을찾음 */ int video1 = select id of an available copy of "Star Wars /* 찾은복사본을예약하기위해예약테이블에삽입, 만약복사본이없다면전체예약취소 */ if (video1 == null) rollback transaction insert row into Reservation for video1 /* Return of the Jedi 영화의복사본을찾음 */ int video2 = select id of an available copy of "Return of the Jedi /* 찾은복사본을예약하기위해예약테이블에삽입, 만약복사본이없다면전체예약취소 */ if (video2 == null) rollback transaction insert row into Reservation for video2 /* The Empire Strikes Back 영화의복사본을찾음 */ int video3 = select id of an available copy of "The Empire Strikes Back /* 찾은복사본을예약하기위해예약테이블에삽입, 만약복사본이없다면전체예약취소 */ if (video3 == null) rollback transaction insert row into Reservation for video3 commit transaction

트랜잭션의원자성지원 트랜잭션복귀 시스템이트랜잭션에의해변경된내역을유지 변경내역이나이전의상태를임시영역에저장 Orcle8 에서의복귀 : immediate update 오픈된각각의트랜잭션에대하여롤백세그먼트 (RBS : rollback segment) 엔트리를포함하는데이타영역포함 RBS 엔트리 트랜잭션으로변경된행들에대한이미지집합 이미지 : 트랜잭션이실행되기이전의값 트랜잭션연산 오픈 : 새로운 RBS 엔트리생성하고트랜잭션과연관시킴 완료 : RBS 엔트리를삭제하고변경내용을데이타베이스에영구적으로반영 복귀 : 변경된모든행들을 RBS 엔트리로부터가져와복구

트랜잭션의원자성지원 [ 계속 ] Oracle 8 에서트랜잭션처리시데이타베이스상태 Oracle8 데이타베이스서버 트랜잭션 T T.A 쓰기 r T.B 쓰기 s T.C 읽기 s T.D 읽기 u 롤백세그먼트이전이미지 r s 데이타베이스테이블갱신된값 r s t u

단일트랜잭션시스템에서트랜잭션의원자성 트랜잭션복귀를위해서는시스템이트랜잭션에의해변경된내역을유지 변경내역이나이전의상태를임시영역에저장 savepoint 연산 SQL 에서지원 트랜잭션내에중간복귀시점만듦 savepoint가실행되었을당시의상태로복구하기위해사용 savepoint가실행된이후에발생된모든갱신들만이취소 SQL 문예 savepoint A; rollback to A;

일관성보장 데이터모델의모든제약조건을만족한다면데이타베이스는일관성상태로됨 제약조건 : 기본키와외래키제약조건, 도메인제약조건, 비즈니스규칙등 트랜잭션모델하에서각트랜잭션은데이타베이스가트랜잭션실행전에일관된상태였다면적절한완료작업이후에도일관된상태로유지할수있도록설계되어야함

일관성보장의예 예 ) 영화의 movieid 를변경 무결성제약조건위배 가정 Movie 테이블에한영화가이미추가되어있고 Videotape 테이블에복사본이있음 movieid 를변경하기위해 Movie 테이블과 Videotape 테이블을모두변경할경우 Update Movie set movieid = 101045 where movieid = 101023 Update Videotape set movieid = 101045 where movieid = 101023

movieid 변경을위한해결방법들 1/3 해결방법 1 insert into Movie (movieid, title, genre, length, rating) select 101045, title, genre, length, rating from Movie where movieid=101023 update Videotape set movieid=101045 where movieid=101023 delete from Movie where movieid=101023

movieid 변경을위한해결방법들 2/3 해결방법 2 : Trigger 기능이용 Trigger : 어떤이벤트와조건이발생하였을때, 데이타베이스시스템이수행할자동적인동작을명시하는데사용 create trigger movieid_check after update of movieid on (Movie) referencing old row as orow referencing new row as nrow for each row when select V.movieId from Videotape V where V.movieId= orow.movieid begin update videotape set movieid=nrow.movieid where videotape.movieid=orow.movieid; end; 이벤트 : - insert, delete, update 연산 - before 나 after 키워드다음에명시 조건 : - 조건이참이될때동작을실행 - when 절로명시 실행동작 : - 조건을만족할때

movieid 변경을위한해결방법들 3/3 해결방법 3 : 스키마의 on delete, on update 이용 create table videotape { videoid int; movieid int;. foreign key movieid references Movie on delete cascade on update cascade }

병행트랜잭션처리 대부분 DBMS 는다수사용자시스템 데이타베이스에서동시성제어에관한대부분의이론은병행처리형태 (A) 의동시성관점에서개발 예 ) 동시에수행되는트랜잭션을처리하는방법들 병행처리 (A) 병렬처리 (B)

병행트랜잭션처리 별개의응용들이병행적으로데이타베이스서버에서비스를요청함으로트랜잭션연산의중첩이발생 트랜잭션의격리성원리 1. 아직완료되지않은응용에의해가해진변경은다른트랜잭션에게보이지않아야한다. 2. 다른트랜잭션에의해가해진변경들을 ( 완료된트랜잭션조차도 ) 응용에서알아볼수있도록해서는안된다. 실행중인트랜잭션은다른트랜잭션의간섭없이그실행을완료할수있어야함

간섭의예 간섭 1 트랜잭션 T2 에의한쓰기연산이트랜잭션 T1 을간섭함 간섭 2 예 ) 시간 1 과시간 3 에서같은객체 r 에대해서로다른값을읽음 트랜잭션 T1 에의해가해진변경이그이후에취소되었음에도트랜잭션 T2 에의해부적절하게읽혀짐 예 ) 시간 4 에서 T1 은객체 u 를쓰고, 시간 5 에서 T2 는그값을읽음 실행스케쥴 : T1.A, T2.A, T1.B, T1.c, T2.B, T1.D 트랜잭션 T1 데이타베이스서버 트랜잭션 T2 T2 가 T1 을간섭 T1 이 T2 를간섭 시간 1 2 3 4 5 6 T1.A T1.B T1.C T1.D 동작읽기 r 읽기 r 쓰기 u 복귀 데이타베이스테이블 r s t u 시간 1 2 3 4 5 6 T2.A T2.B 동작 쓰기 r 읽기 u

격리되지않은트랜잭션의문제점 - 1/6 트랜잭션 T3 의동작 T3.A balance1 = (select balance from Customer where accountid = 101); balance1 += 5.00; T3.B update Customer set balance =?balance1 where accountid = 101; 트랜잭션 T4 의동작 T4.A balance2 = (select balance from Customer where accountid = 101); balance2 += 10.00; T4.B update Customer set balance =?balance2 where accountid = 101; 갱신분실 (lost update) 문제를나타내는스케줄 S1 S1: T3.A, T4.A, T3.B, T4.B, T3.commit, T4.commit 시간트랜잭션 T3 연산트랜잭션 T4 1 T3.A 계정 101의잔액읽어오기 : $15 2 계정 101의잔액읽어오기 : $15 T4.A 3 T3.B 계정 101의잔액에쓰기 : $20 4 계정 101의잔액에쓰기 : $25 T4.B 5 T3.commit 6 T4.commit

격리되지않은트랜잭션의문제점 - 2/6 오손판독 (dirty read) 문제를나타내는스케줄 S2 S2: T3.A, T3.B, T4.A, T3.rollback, T4.B, T4.commit 시간트랜잭션 T3 연산트랜잭션 T4 1 T3.A 계정 101의잔액읽어오기 : $15 2 T3.B 계정 101의잔액쓰기 : $20 3 계정 101의잔액읽어오기 : $20 T4.A 4 T3.rollback 계정 101의잔액복원 : $15 5 계정 101의잔액쓰기 : $30 T4.B 6 T4.commit 오손된값 : 데이타베이스에저장되지않은값

격리되지않은트랜잭션의문제점 - 3/6 T5 : 102 계좌잔액에서 101 고객의계정으로 $10 이체 T6 : 두 101 과 102 고객의총잔액을계산 트랜잭션 T5 의동작 T5.A balance1 = (select balance from Customer where accountid = 101); balance1 += 10.00; T5.B update Customer set balance =?balance1 where accountid = 101; 트랜잭션 T6 의동작 T6.A total = select sum(balance) from Customer where accountid = 101 or accountid = 102; T5.C balance1 = (select balance from Customer where accountid = 102); balance1 -= 10.00; T5.D update Customer set balance =?balance1 where accountid = 102;

격리되지않은트랜잭션의문제점 - 4/6 부정확한요약 (incorrect summary) 문제를나타내는스케줄 S3 S3: T5.A, T5.B, T6.A, T6.commit, T5.C, T5.D, T5.commit 시간트랜잭션 T3 연산트랜잭션 T4 1 T5.A 계정 101 의잔액읽어오기 : $15 2 T5.B 계정 101 의잔액에쓰기 : $25 3 계정 101 의잔액읽어오기 : $25 계정 102 의잔액읽어오기 : $15 T6.A 4 T6.commit 5 T5.C 계정 102의잔액읽어오기 : $15 6 T5.D 계정 102의잔액에쓰기 : $5 7 T5.commit

격리되지않은트랜잭션의문제점 - 5/6 트랜잭션 T7 의동작 T7.A balance1 = (select balance from Customer where accountid = 101); T7.B balance2 = (select balance from Customer where accountid = 101); 트랜잭션 T8 의동작 T8.A update Customer set balance = 0.0 where accountid = 101; 반복불가능 (unrepeatable read) 한읽기문제를나타내는스케줄 S4 S4: T7.A, T8.A, T8.commit, T7.B, T7.commit 시간트랜잭션 T7 연산트랜잭션 T8 1 T7.A 계정 101 의잔액읽어오기 : $15 2 계정 101 의잔액에쓰기 : $0 T8.A 3 T8.commit 4 T7.B 계정 101 의잔액읽어오기 : $0 5 T7.commit

격리되지않은트랜잭션의문제점 - 6/6 트랜잭션 T9 의동작 T9.A totala = select sum(balance) from Customer where zipcode = 31101 T9.B totalb = select sum(balance) from Customer where zipcode = 31101 트랜잭션 T10 의동작 T10.A insert into Customer (accountid, balance, zipcode) values (105, 10.00, 31101) 팬텀문제를나타내는스케줄 S5 S5: T9.A, T10.A, T9.B, T10.rollback, T9.commit 시간트랜잭션 T9 연산트랜잭션 T10 1 T9.A 계정의잔액합계읽어오기 : $100 2 잔액이있는새계정 105의삽입 : $10 T10.A 3 T9.B 계정의잔액합계읽어오기 : $110 4 계정 105의제거 T10.rollback 5 T9.commit

회복가능트랜잭션스케줄 - 1/2 트랜잭션스케쥴이란? 트랜잭션들이인터리브된방식으로병행실행될때, 여러트랜잭션들이가진연산들의실행순서 스케쥴 S 에참여하는각트랜잭션 T i 에대해서 T i 의연산들이 T i 내에서와동일한순서로스케쥴 S 에나타나야함 동시실행을보장하기위해서는스케쥴의형태에어떤제한을둘필요가있음 회복가능한스케쥴 (recoverable schedule) 스케쥴 S 안에있는어떤트랜잭션 T 가읽은값에쓰기연산을수행한또다른트랜잭션 T 이완료되기전까지트랜잭션 T 가완료되지않는스케줄

회복불가능트랜잭션스케줄예 트랜잭션 T3 의동작 T3.A balance1 = (select balance from Customer where accountid = 101); balance1 += 5.00; T3.B update Customer set balance =?balance1 where accountid = 101; 트랜잭션 T4 의동작 T4.A balance2 = (select balance from Customer where accountid = 101); balance2 += 10.00; T4.B update Customer set balance =?balance2 where accountid = 101; 스케줄 S7 은회복불가능스케줄 S7: T3.A, T3.B, T4.A, T4.B, T4.commit, T3.rollback 시간 트랜잭션 T3 연산 트랜잭션 T4 1 T3.A 계정 101의잔액읽어오기 : $15 2 T3.B 계정 101의잔액에쓰기 : $20 3 계정 101의잔액읽어오기 : $20 T4.A 4 계정 101의잔액에쓰기 : $30 T4.B 5 T4.commit 6 T3.rollback 계정 101의잔액복구 : $15

회복가능트랜잭션스케줄 - 2/2 연쇄복귀 (cascading rollback) 문제 연쇄 : S2 에서트랜잭션 T3 의복귀가다시또다른트랜잭션의복귀원인이되는상태 여러트랜잭션이복귀될수있기때문에연쇄복귀는많은시간을소비 이런현상이나타나지않는것을보장하는스케쥴들을특성화하는것이중요 엄격한스케줄 (strict schedule) 객체에쓰기연산을수행한트랜잭션이완료되기전까지어떠한트랜잭션도그객체를읽거나쓰지못하는것 항상옳지는않지만, 효율적복귀지원

엄격한트랜잭션스케줄예 스케줄 S7-1 은엄격한스케줄 S7-1: T3.A, T3.B, T3.commit, T4.A, T4.B, T4.commit 시간 트랜잭션 T3 연산 트랜잭션 T4 1 T3.A 계정 101의잔액읽어오기 : $15 2 T3.B 계정 101의잔액에쓰기 : $20 3 T3.commit 4 계정 101의잔액읽어오기 : $20 T4.A 5 계정 101의잔액에쓰기 : $30 T4.B 6 T4.commit 포함관계 회복가능한스케쥴 연쇄복귀방지하는스케쥴 엄격한스케쥴

직렬가능트랜잭션스케줄 - 1/3 직렬스케줄 (serial schedule) 서로다른트랜잭션동작들이인터리브되지않고수행되는스케줄 즉, 한트랜잭션의모든동작들은다음트랜잭션들의동작보다먼저수행 병행성문제발생하지않으나, 비현실적임 직렬스케쥴처럼동작하지만, 병행실행을수행하는스케쥴이필요

직렬가능트랜잭션스케줄 - 2/3 직렬가능스케줄 (serializable schedule) 직렬스케줄과동치 (equivalent) 인병렬스케줄 예 ) 충돌동치 (conflict equivalent) 두스케줄의충돌동작순서가같은것 충돌 (conflict) : 두트랜잭션이모두어떤데이타객체를참조하고있고그중한트랜잭션이그객체를갱신할때 스케쥴 1 ( 직렬가능스케쥴 ) 스케쥴 2 ( 직렬스케쥴 )

직렬가능스케쥴이필요한예 BigHit 비디오에대한 PayStatement 생성트랜잭션 /* TimeCard 테이블로부터 PayStatement 테이블에새로운값을삽입하고 TimeCard 테이블의 paid를 true로표시 */ 1. begin transaction; 2. insert into PayStatement 3. (ssn, hourlyrate, numhours, amountpaid, datapaid) 4. select TimeCard.ssn, hourlyrate, 5. sum((endtime-starttime)*24) as hoursworked, 6. sum((endtime-starttime)*24*hourlyrate) as amountpaid, 7. today 8. from TimeCard, HourlyEmployee 9. where TimeCard.ssn = HourlyEmployee.ssn and paid = false 10. group by TimeCard.ssn, hourlyrate; 11. update TimeCard set paid = true 12. where paid = false; 13. Commit transaction;

직렬가능트랜잭션스케줄 - 3/3 트랜잭션관리의목표 모든트랜잭션을직렬가능스케줄로실행 방법 1 : 직렬가능하지않은스케줄탐지필요 방법 2 : 직렬가능스케줄을보장하는트랜잭션들을설계할프로토콜요구 (2PL) 방법 1 : 직렬불가능스케줄검사 트랜잭션관리시스템이스케줄에서발생한모든충돌발견 시스템은오픈트랜잭션의동작에대해가능한모든직렬스케줄의기록을유지 충돌이발생할때 충돌동치직렬스케줄이존재한다면, 직렬가능스케줄 그렇지않은경우, 트랜잭션복귀 실행하는데비용이많이듦

직렬가능스케줄을보장하는 2 단계로킹 1/2 방법 2: 2 단계로킹 (2PL:two-phase locking) 데이터항목들을로킹하는기법을사용 여러트랜잭션이그항목들에동시에접근하는것을방지하기위함 로크타입 읽기로크 (read lock) 비배타적이며많은판독자들사이에공유될수있음 객체를읽을수는있으나변경할수는없음 공유로크 (shared lock) 라고도함 읽기로크를차지하고있는한트랜잭션은다른트랜잭션이읽기로크를걸지않은경우에만그로크를쓰기로크로상승시킬수있음

직렬가능스케줄을보장하는 2 단계로킹 - 2/2 쓰기로크 (write lock) 배타적이며트랜잭션이객체를변경할수있음 다른어떠한트랜잭션도그객체로부터읽어오거나그객체에쓰기를할수없음 배타로크 (exclusive lock) 라고도함 쓰기로크는어느때라도읽기로크로하강될수있음 로크의단위 (granularity) 개별적으로로크될수있는객체의크기 예 ) 데이타베이스레코드, 데이타베이스레코드의필드값, 디스크블록, 파일전체, 데이타베이스전체 로크단위가작아질수록 병행성증가, 오버헤드증가 로크단위가커질수록 병행성감소, 유지로크수감소, 로크를걸고해제하는데걸리는시간감소

2 단계로킹프로토콜 2 단계로킹 (2PL : two-phase locking) 프로토콜이란? 확장단계 (growing phase) 새로운로크를요청할수있음 공유로크 -> 배타적로크로상승시킬수있음 축소단계 (shrinking phase) 로크를해제 배타적로크 -> 공유로크로하강시킬수있음 트랜잭션은두단계를섞어서사용할수없음 어떤로크가해제되면그트랜잭션은새로운로크를요청할수없음.

2PL 을따르는트랜잭션과그렇지않은트랜잭션 트랜잭션 T13 : 2 단계로킹을따르는트랜잭션 시간 트랜잭션 T13의로크동작 단계 T13.A A에대한읽기로크획득 : read_lock(a) 확장단계시작 T13.B B에대한읽기로크획득 : read_lock(b) T13.C A의로크를쓰기로크로상승 : write_lock(a) T13.D B에읽기로크해제 : unlock(b) 축소단계시작 T13.E A의로크를읽기로크로하강 : read_lock(a) T13.F A에읽기로크해제 unlock(a) 트랜잭션 T14 : 2 단계로킹을따르지않는트랜잭션 시간 트랜잭션 T14의로크동작 단계 T14.A A에대한읽기로크획득 : read_lock(a) 확장단계시작 T14.B B에대한읽기로크획득 : read_lock(b) T14.C B의읽기로크해제 : unlock(b) 축소단계시작 T14.D A의로크를쓰기로크로상승 : write_lock(b) 위반 T14.E B에대한읽기로크획득 : read_lock(b) 위반 데이터항목 : A, B, C, D, E

2PL 을따르는트랜잭션들예 시간 T 1 T 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 read_lock(y); read_item(y); write_lock(x); unlock(y); read_item(x); X:=X+Y; write_item(x); unlock(x); read_lock(x); read_item(x); write_lock(y); unlock(x); read_item(y); Y=X+Y; write_item(y); unlock(y);

보수적 2 단계로킹 보수적 2 단계로킹 (conservative 2PL) 각트랜잭션이그트랜잭션의시작초기에서모든로크를얻도록하는것 장점 단점 확장단계 : 초기에발생 축소단계 : 전체실행동안 트랜잭션이충돌이나교착상태가전혀일어나지않고실행이완료될수있음 트랜잭션은사용가능한모든객체에로크를걸어야하므로, 병행성이제한됨

엄격한 2 단계로킹 엄격한 2 단계로킹 (strict 2PL) 트랜잭션끝까지모든로크를유지하고완료나복귀시에해제 장점 단점 확장단계 : 전체실행동안 각트랜잭션이필요로하는것에만로크를설정 교착상태가일어날가능성이있음

엄격한 2PL 로실행되는예 -1/2 PayStatement 트랜잭션 1. begin transaction; 2. insert into PayStatement 3. (ssn, hourlyrate, numhours, amountpaid, datapaid) 4. select TimeCard.ssn, hourlyrate, 5. sum((endtime-starttime)*24) as hoursworked, 6. sum((endtime-starttime)*24*hourlyrate) as amountpaid, 7. today 8. from TimeCard, HourlyEmployee 9. where TimeCard.ssn = HourlyEmployee.ssn and paid = false 10. group by TimeCard.ssn, hourlyrate; 11. update TimeCard set paid = true 12. where paid = false; 13. Commit transaction;

엄격한 2PL 로실행되는예 -2/2 연산 read_lock(timecard) read_lock(hourlyemployee) Select 절실행 Write_lock(PayStatement) Insert 절실행 Write_lock(TimeCard) Update 절실행 Unlock(TimeCard) Unlock(PayStatement) Unlock(HourlyEmployee) 설명 TimeCard 와 HourlyEmployee 의전체테이블에읽기로크획득 select from TimeCard, HourlyEmployee 실행 PayStatement 의전체테이블에쓰기로크획득 insert into PayStatement 실행 Timecard 의로크를쓰기로크로상승 update TimeCard 실행 모드로크해제

트랜잭션처리에서교착상태 교착상태 (deadlock) 각트랜잭션이다른트랜잭션에의해요청되는있는로크를차지하고있는경우 해결방법 1. 교착상태에빠진트랜잭션중에하나를철회하고로크를해제 2. 교착상태예방프로토콜사용 예 ) 자원의우선순위를정해놓고모든로크는정의된순서내에서요청되도록하는것 SQL 에서시행하기어려움

트랜잭션과교착상태스케줄예제 트랜잭션 T11 의동작 T11.A update Customer set balance = 0.0 where accountid = 101; T11.B update Customer set balance = 0.0 where accountid = 102; 트랜잭션 T12 의동작 T12.A update Customer set balance = 10.0 where accountid = 102; T12.B update Customer set balance = 10.0 where accountid = 101; 교착상태를나타내는스케줄 S6 S6: T11.A, T12.A, T11.B, T12.B 시간트랜잭션 T11 연산트랜잭션 T12 1 T11.A 계정 101에대한배타적로크 2 계정 102에대한배타적로크 T12.A 3 T11.B 계정 102에대한배타적로크요청 : 봉쇄 4 계정 101에대한배타적로크요청 : 봉쇄 T12.B

교착상태의예 time T 1 T 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 read_lock(y); read_item(y); write_lock(x); unlock(y); read_item(x); X:=X+Y; write_item(x); unlock(x); wait wait read_lock(x); read_item(x); write_lock(y); unlock(x); read_item(y); Y=X+Y; write_item(y); unlock(y); T1 X Y T2

SQL 에서묵시적로킹 - 1/2 SQL 에서트랜잭션의 4 가지격리레벨 (isolation level) 미완료된트랜잭션읽기 (read uncommitted) 오손판독, 반복불가능읽기, 팬텀문제가발생 완료된트랜잭션읽기 (read committed) 반복불가능읽기, 팬텀문제가발생 반복가능읽기 (repeatable read) 팬텀문제가발생 직렬가능 (serializable) 오손판독, 반복불가능읽기, 팬텀문제모두예방

SQL 에서묵시적로킹 - 2/2 SQL 표준 DBMS 가어떠한레벨이든지원할수있도록허용 직렬가능레벨이기본레벨로제공 시스템이트랜잭션을더높은레벨로상승시키는것도허용 직렬가능레벨만을지원하는것도허용 Oracle 8 완료된트랜잭션읽기와직렬가능레벨제공 Set transaction 문 격리레벨을명시 트랜잭션이데이타베이스를갱신할수있는지의여부를나타냄 set transaction read only; set transaction read write; /* 기본값 */ set transaction isolation read committed; /* Oracle8 에서기본값 */ set transaction isolation level serializable; /* SQL 에서기본값 */