13-01 트랜잭션 장애와회복 병행제어
병행수행과병행제어 병행수행 (concurrency) 여러사용자가데이터베이스를동시공유할수있도록여러개의트랜잭션을동시에수행하는것을의미 여러트랜잭션들이차례로번갈아수행되는인터리빙 (interleaving) 방식으로진행됨 병행제어 (concurrency control) 또는동시성제어 병행수행시같은데이터에접근하여연산을실행해도문제가발생하지않고정확한수행결과를얻을수있도록트랜잭션의수행을제어하는것을의미 50
병행수행시발생할수있는문제점 갱신분실 (lost update) 하나의트랜잭션이수행한데이터변경연산의결과를다른트랜잭션이덮어써변경연산이무효화되는것 여러트랜잭션이동시에수행되더라도갱신분실문제가발생하지않고마치트랜잭션들을순차적으로수행한것과같은결과값을얻을수있어야함 51
병행수행시발생할수있는문제점 갱신분실 트랜잭션 T 1 에대해갱신분실이발생함 (T 1 의변경연산결과가데이터베이스에반영되지않음 ) 52
병행수행시발생할수있는문제점 갱신분실 트랜잭션을순차적으로수행함으로써 갱신분실문제가발생하지않는경우 53
병행수행시발생할수있는문제점 모순성 (inconsistency) 하나의트랜잭션이여러개데이터변경연산을실행할때일관성없는상태의데이터베이스에서데이터를가져와연산함으로써모순된결과가발생하는것 여러트랜잭션이동시에수행되더라도모순성문제가발생하지않고마치트랜잭션들을순차적으로수행한것과같은결과값을얻을수있어야함 54
병행수행시발생할수있는문제점 모순성 트랜잭션 T 1 이데이터 X 와 Y 를 서로다른상태의데이터베이스에서 가져와연산을실행하는모순이발생 55
병행수행시발생할수있는문제점 모순성 트랜잭션을순차적으로수행함으로써 모순성문제가발생하지않는경우 56
병행수행시발생할수있는문제점 연쇄복귀 (cascading rollback) 트랜잭션이완료되기전장애가발생하여 rollback 연산을수행하게되면장애발생전에이트랜잭션이변경한데이터를가져가서변경연산을실행한다른트랜잭션에도 rollback 연산을연쇄적으로실행해야한다는것 여러트랜잭션이동시에수행되더라도연쇄복귀문제가발생하지않고마치트랜잭션들을순차적으로수행한것과같은결과값을얻을수있어야함 57
병행수행시발생할수있는문제점 연쇄복귀 트랜잭션 T 1 이변경한데이터 X를가져가연산을수행한트랜잭션 T 2 도 rollback 연산이연쇄적으로실행되어야하지만이미완료된상태라 rollback 연산을실행할수없는문제가발생 58
병행수행시발생할수있는문제점 연쇄복귀 트랜잭션을순차적으로수행함으로써 연쇄복귀문제가발생하지않는경우 59
트랜잭션스케줄 트랜잭션에포함되어있는연산들을수행하는순서 표 10-4 트랜잭션스케줄의유형 트랜잭션스케줄 의미 직렬스케줄 인터리빙방식을이용하지않고각트랜잭션별로연산들을순차적으로실행시키는것 비직렬스케줄 인터리빙방식을이용하여트랜잭션들을병행해서수행시키는것 직렬가능스케줄 직렬스케줄과같이정확한결과를생성하는비직렬스케줄 60
직렬스케줄 (serial schedule) 의미 인터리빙방식을이용하지않고각트랜잭션별로연산들을순차적으로실행시키는것 특징 직렬스케줄에따라트랜잭션을수행하면다른트랜잭션의방해를받지않고독립적으로수행되므로항상모순이없는정확한결과를얻게됨 다양한직렬스케줄이만들어질수있고, 직렬스케줄마다데이터베이스에반영되는최종결과가다를수있지만직렬스케줄의결과는모두정확함 각트랜잭션을독립적으로수행하기때문에병행수행으로볼수없음 61
직렬스케줄예 트랜잭션 T 1, T 2 를대상으로하는첫번째직렬스케줄 62
직렬스케줄예 트랜잭션 T 1, T 2 를대상으로하는두번째직렬스케줄 63
비직렬스케줄 (nonserial schedule) 의미 인터리빙방식을이용하여트랜잭션을병행수행하는것 특징 트랜잭션이번갈아연산을실행하기때문에하나의트랜잭션이완료되기전에다른트랜잭션의연산이실행될수있음 비직렬스케줄에따라병행수행하면갱신분실, 모순성, 연쇄복귀등의문제가발생할수있어결과의정확성을보장할수없음 다양한비직렬스케줄이만들어질수있고그중에는잘못된결과를생성하는것도있음 64
비직렬스케줄예 트랜잭션 T 1, T 2 를대상으로하는첫번째비직렬스케줄 ( 병행수행에성공하여정확한트랜잭션수행결과를생성 ) 65
비직렬스케줄예 트랜잭션 T 1, T 2 를대상으로하는첫번째비직렬스케줄 ( 병행수행에실패하여잘못된트랜잭션수행결과를생성 ) 66
직렬가능스케줄 (serializable schedule) 의미 직렬스케줄에따라수행한것과같이정확한결과를생성하는비직렬스케줄 비직렬스케줄중에서수행결과가동일한직렬스케줄이있는것 특징 인터리빙방식으로병행수행하면서도정확한결과를얻을수있음 직렬가능스케줄인지를판단하는것은간단한작업이아니므로직렬가능성을보장하는병행제어기법을사용하는것이일반적임 67
직렬가능스케줄예 트랜잭션 T 1, T 2 를대상으로하는비직렬스케줄이면서 정확한수행결과를생성하기때문에직렬가능스케줄임 68
병행제어기법 의미 병행수행하면서도직렬가능성을보장하기위한기법 방법 모든트랜잭션이준수하면직렬가능성이보장되는규약을정의하고, 트랜잭션들이이규약을따르도록함 대표적인병행제어기법 로킹기법 69
로킹 (locking) 기법 기본원리 한트랜잭션이먼저접근한데이터에대한연산을끝낼때까지는다른트랜잭션이그데이터에접근하지못하도록상호배제 (mutual exclusion) 함 방법 병행수행되는트랜잭션들이같은데이터에동시에접근하지못하도록 lock과 unlock 연산을이용해제어 lock : 트랜잭션이데이터에대한독점권을요청하는연산 unlock : 트랜잭션이데이터에대한독점권을반환하는연산 70
로킹기법 기본로킹규약 트랜잭션은데이터에접근하기위해먼저 lock 연산을실행해독점권을획득함 read 또는 write 연산을실행하기전 lock 연산을실행 다른트랜잭션에의해이미 lock 연산이실행된데이터에대해다시 lock 연산을실행시킬수없음 독점권을획득한데이터에대한모든연산의수행이끝나면트랜잭션은 unlock 연산을실행해서독점권을반납함 71
로킹기법 로킹단위 lock 연산을실행하는대상데이터의크기 전체데이터베이스부터릴레이션, 투플, 속성까지도가능함 로킹단위가커질수록병행성은낮아지지만제어가쉬움 로킹단위가작아질수록제어가어렵지만병행성은높아짐 72
기본로킹규약의효율성을높이기위한방법 트랜잭션들이같은데이터에대해동시에 read 연산을실행하는것을허용 lock 연산을두가지종류로구분하여사용 표 10-5 lock 연산 연산 공용 shared lock 설명 트랜잭션이데이터에대해공용 lock 연산을실행하면, 해당데이터에 read 연산을실행할수있지만 write 연산은실행할수없다. 그리고해당데이터에다른트랜잭션도공용 lock 연산을동시에실행할수있다. ( 데이터에대한사용권을여러트랜잭션이함께가질수있음 ) 전용 exclusive lock 트랜잭션이데이터에대해공용 lock 연산을실행하면, 해당데이터에 read 연산과 write 연산을모두실행할수있다. 그러나해당데이터에다른트랜잭션은공용이든전용이든어떤 lock 연산도실행할수없다. ( 전용 lock 연산을실행한트랜잭션만해당데이터에대한독점권을가질수있음 ) 73
기본로킹규약의효율성을높이기위한방법 표 10-6 lock 연산의양립성 연산공용 lock 전용 lock 공용 lock 가능불가능 전용 lock 불가능불가능 - 서로다른트랜잭션이같은데이터에공용 lock 연산을동시에실행시킬수있음 - 다른트랜잭션이전용 lock 연산을실행한데이터는공용 lock, 전용 lock 을모두실행불가 74
기본로킹규약으로직렬가능성이보장되지않는스케줄예 트랜잭션 T 1 이데이터 X에너무빨리 unlock 연산을실행하여트랜잭션 T 2 가일관성없는데이터에접근했기때문 [ 해결책 : 2단계로킹규약 ] 75
2 단계로킹규약 (2PLP; 2 Phase Locking Protocol) 기본로킹규약의문제를해결하고트랜잭션의직렬가능성을보장하기위해 lock과 unlock 연산의수행시점에대한새로운규약을추가한것 방법 트랜잭션이 lock 과 unlock 연산을확장단계와축소단계로나누어수행 트랜잭션이처음수행되면확장단계로들어가 lock 연산만실행가능 unlock 연산을실행하면축소단계로들어가 unlock 연산만실행가능 트랜잭션은첫번째 unlock 연산실행전에필요한모든 lock 연산을실행해야함 76
2 단계로킹규약 2단계로킹규약을준수하여직렬가능성이보장된스케줄예 77
교착상태 (deadlock) 트랜잭션들이상대가독점하고있는데이터에 unlock 연산이실행되기를서로기다리면서트랜잭션의수행을중단하고있는상태 처음부터교착상태가발생하지않도록예방하거나, 발생시빨리탐지하여필요한조치를취해야함 78
Thank You