병행제어

이한수·2022년 3월 15일
0

DataBase

목록 보기
4/5

개인 공부 정리 목적입니다. 잘못된 부분이 있을경우 알려주시면 감사하겠습니다.
참고 : 데이터베이스 개론

데이터 베이스 관리 시스템은 여러 사용자가 동시에 데이터 베이스를 공유할 수 있도록
여러개의 트랜잭션이 동시에 수행되는 병행 수행을 지원한다.

하지만 이때 병행 수행되는 트랜잭션들이 서로 다른 데이터를 사용하여 연산을 수행하면 상관없지만 같은 데이터에 접근할 경우에는 문제가 발생할 수 있다.

1.병행 수행의 문제

1) 갱신 분실

하나의 크랜 잭션이 수행한 데이터 변경 연산의 결과를 다른 트랜잭션이 덮어써 변경 연산이 무효화 되는 것이다

2)모순성

하나의 트랜잭션이 여러 개의 데이터 변경 연산을 실행할 때 일관성 없는 상태의 데이터베이스에서 데이터를 가져와 연산을 실행함으로써 모순된 결과가 발생하는 것이다.

3)연쇄 복귀

트랜잭션이 완료되기 전에 장애가 발생하여 rollback 연산을 수행하면 , 이 트랜잭션이 장애 발생 저에 변경한 데이터를 가져가 변경 연산을 실행한 또 다른 트랜잭션에도 rollback연산을 연쇄적으로 실행해야 하지만 , 이때 중간에 완료된 트랜잭션에 대해서는 rollback연산 불가능해지는 것을 말한다.

2.트랜잭션 스케쥴

트랜잭션에 포함되어 있는 연산들을 수행하는 순서다.

1)직렬 스케줄

인터리빙 방식을 이용하지 않는다.
트랜잭션 별로 연산들을 순차적으로 실행시켜 모든 트랜잭션이 완료 될때까지 다른 트랜잭션의 방해를 받지않고 독립적으로 수행한다.

단 , 어느 트랜잭션이 먼저 수행되느냐에 따라 결과값이 달라질 수 있으며 ,
각 트랜잭션이 독립적으로 수행하기 때문에 병행 수행이라고 할 수 없다.
(일반적으로 잘 사용하지도 않는다고 한다)

2)비직렬 스케줄

인터리빙 방식을 사용한다.
트랜잭션이 돌아가면서 연산들을 실행하므로 하나의 트랜잭션이 완료되기 전에 다른 트랜잭션의 연산이 실행될 수 있다.

그로인해 갱신 분실 , 모순성 등의 문제가 발생할 수 있으며 최종 수행결과의 정확성을 보장하지 못한다.

3)직렬 가능 스케줄

직렬 스케줄에 따라 수행한 것과 같이 정확한 결과를 생성하는 비직렬 스케줄이다.
모든 , 비직렬 스케줄이 가능한 것은 아니다.
병행 수행을 하면서도 정확한 결과값을 얻을 수 있다는 장점이 있다.

3.병행 제어 기법

여러 트랜잭션을 병행 수행하면서도 정확한 결과를 얻을 수 있는 직렬 가능성을 보장받기 위해 사용한다.

기본 원리는 모든 트랜잭션이 따르면 직렬 가능성이 보장되는 나름의 규약을 정의하고 ,
트랜잭션들이 이 규약을 따르도록 하는 것이다.

1)로킹 기법

병행 수행되는 트랜잭션들이 동일한 데이터에 동시에 접근하지 못하도록 lock과 unlock이라는 2개의 연산을 이용해 제어한다.

즉 , 한 트랜잭션이 먼저 접근한 데이터에 lock연산으로 다른 트랜재션에서 접근하지 못하게 한뒤 , 연산 수행이 완료된 후에 unlock연산으로 그 데이터에 대한 독접권을 반환해야 다른 트랜잭션이 접근가능하게끔 상호배제하는 것이다.
(데이터를 가져오기 위해 read나 write연산을 수행하기전에 lock를 수행해야한다)

이때 lock연산을 수행할 데이터의 크기를 로킹 단위라고 하는데 ,
이 크기는 전체 데이터베이스에서 속성에 이르기 까지 다양한 크기의 데이터를 대상으로 할 수 있다.

로킹단위가 클경우?

  • 병행성은 낮아지지만 , 제어가 쉽다.

작을경우?

  • 병행성은 높아지지만 , 제어가 어렵다.

고로 적절한 로킹단위를 설정하여 작업을 수행해야 한다.

2)2단계 로킹 규약

기본 로킹 규약의 문제를 해결하고 트랜잭션의 직렬 가능성을 보장하기 위해 lock과 unlock연산의 수행 시점에 대한 새로운 규약을 추가한 것이 2단계 로킹 규약이다.

기존의 lock,unlock연산을 수행할 때 2단계로 나누어 수행한다.

  • 확장단계 : 트랜잭션이 lock연산만 실행가능.
  • 축소단계 : 트랜잭션이 unlock연산만 실행 가능.

트랜잭션이 처음 수행되면 확장단계로 들어가 lock연산만 실행가능.
그러다가 unlock연산을 실행하면 축소 단계로 들어가 그떄부터는 unlock연산만 실행할 수 있다.
첫번째 트랜잭션으 첫 번쨰 unlock연산을 실행하기 전에 필요한 모든 lock연산을 실행해야 한다.

단 , 필요한 데이터를 미리 다 lock으로 들고와서 붙들고 있게 되므로
교착상태에 빠질 우려가 있다.

profile
성실하게

0개의 댓글