본문 바로가기
데이터 [Data]/데이터베이스론

데이터베이스론 보고서 13 : 직렬스케줄의 의미

by 냉철하마 2021. 7. 20.

  직렬 스케줄(serial schedule)이란 여러 트랜잭션들의 집합을 한 번에 한 트랜잭션씩 차례대로 수행하는 동시성 제어의 일종이다. 여기서 동시성 제어(concurrency control)는 여러 사용자들이 다수의 트랜잭션들을 동시에 수행하는 환경에서 부정확한 결과를 생성할 수 있는, 트랜잭션들 간의 간섭이 생기지 않도록 하는 기법이다. 대부분의 DBMS들은 다수 사용자용이고, 여러 사용자들이 동시에 동일한 테이블을 접근하기도 하며, DBMS의 성능을 높이기 때문에 여러 사용자의 질의나 프로그램들을 동시에 수행하는 것이 필수적이기 때문이다. 동시에 수행되는 트랜잭션들이 데이터베이스에 미치는 영향은 이들을 순차적으로 수행하였을 때 데이터베이스에 미치는 영향과 같도록 보장하며, 다수 사용자가 데이터베이스를 동시에 접근하도록 허용하면서 데이터베이스의 일관성을 유지하게 한다.

  그리고 직렬 스케줄과 동시성 제어를 알기 위해서는 먼저 트랜잭션(Transaction)에 대해서 정의해두어야 한다. 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위로서, 데이터베이스에서 데이터를 다룰 때 장애가 일어난 경우 데이터를 복구하는 작업의 단위가 된다. 이는 전체가 수행되거나 전혀 수행되지 않아야 하는 All or Nothing의 구조를 띄고 있으며, 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때가 이 작업을 서로 분리하는 단위가 된다. 이러한 트랜잭션의 성질에는 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)이 있으며 이를 ACID 성질이라고 한다. DBMS는 이러한 트랜잭션의 특성을 유지하기 위해 여러 조치를 취한다. 원자성과 지속성을 유지하기 위해서 회복 관리자 프로그램을 작동시키고, 일관성을 유지하기 위해 동시성 제어 알고리즘을 작동시키는 등의 조치가 가해진다. 이러한 특성을 통해 DBMS의 기능에 연결을 시키면, 원자성과 지속성은 회복이라는 기능을, 일관성과 고립성은 동시성 제어라는 기능을 수행한다. 추가로 일관성은 무결성 제약조건을 만족하기 위한 기능에 활용되는 특성이기도 하다.

  이 중에서도 동시성 제어는, 앞서 언급했듯 트랜잭션들 간의 간섭이 생기지 않도록 하는 기능이다. 이를 하지 않고 다수의 트랜잭션을 동시에 수행해버릴 경우에는 갱신 손실(lost update), 오손 데이터 읽기(dirty read), 반복할 수 없는 읽기(unrepeatable read) 등의 문제점이 생길 수 있다. 수행중인 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어 씀으로써 갱신이 무효가 되는 것이 갱신 손실, 완료되지 않은 트랜잭션이 갱신한 데이터를 읽은 것을 오손 데이터 읽기, 한 트랜잭션이 동일한 데이터를 두 번 읽을 때 서로 다른 값을 읽는 것을 반복할 수 없는 읽기라고 한다.

  이러한 문제들이 발생하지 않도록 하는 동시성 제어 중에서 트랜잭션의 연산(삽입, 수정, 삭제 등)을 모두 순차적으로 실행하는 트랜잭션 스케줄이 직렬 스케줄인 것이다. , 하나의 트랜잭션이 실행되면 해당 트랜잭션이 완료되어야 다른 트랜잭션이 실행될 수 있다. 한편 트랜잭션 스케줄로의 다른 유형으로는 트랜잭션의 직렬 수행 순서와 상관없이 병행 수행하는 비직렬 스케줄(non-serial schedule), 서로 영향을 주지 않는 직렬 스케줄을 비직렬적으로 수행하는 직렬 가능 스케줄(serializable schedule)이 존재한다.

 

댓글