[대학교 교재 정리 - 데이터베이스 시스템(MC Graw Hill)] 1.7 트랜잭션 관리

트랜잭션은 DBMS에서 사용자 프로그램의 일회 실행(동일 프로그램을 여러 번 실행하는 것은 여러 개의 트랙잭션을 생성하게 된다)이다. 트랜잭션은 DBMS가 보는 변경의 기본 단위이다. 부분적으로 수행된 트랜잭션들은 허용되지 않으며, 한 그룹의 트랜잭션들의 효과는 모든 트랜잭션들이 어떤 직렬 순서에 따라 수행한 효과와 동등하다. 


트랜잭션들의 동시 수행

- DBMS의 중요한 임무 중 하나는 다른 사람들이 동일한 데이터를 동시에 접근하고 있다는 사실을 아무 지장 없이 무시할 수 있도록 데이터의 동시접근을 계획하는 것이다. 

DBMS는 사용자들로 하여금 그들의 프로그램들이 DBMS에 의해 선택된 어떤 순서에 입각하여 차례대로 고립되어 실행하는 것처럼 생각하게 한다.

잠금 프로토콜(locking protocol)은 여러 트랜잭션들의 연산들이 인터리브하더라도, 실제 효과는 어떤 직렬 순서에 따라 모든 트랜잭션들을 수행하는 것과 동일하다는 것을 보장하기 위해, 각 트랜잭션이 준수해야하는 규칙들의 모임이다.

잠금(lock)은 데이터베이스 객체에 대한 접근 제어에 사용되는 메카니즘이다. 

두 가지 종류의 잠금이 DBMS에 의해 일반적으로 지원된다.

공용 잠금( shared lock)은 동시에 두 개의 다른 트랜잭션들에 의하여 소유될 수 있으나, 한 객체에 대한 전용 잠금(exclusive lock)은 다른 트랜잭션들이 이 객체에 어떠한 잠금도 소유할 수 없도록 한다.

트랜잭션 T1은 어떤 데이터 객체를 수정하려고 하고 트랜잭션 T2는 동일한 데이터 객체를 읽으려고 한다. 직관적으로, 만약 그 객체에 대한 T1의 전용 잠금의 요청이 먼저 승낙되면, T2는 T1이 이 잠금을 해제할 때까지는 진행할 수 없다. 공용 잠금에 대한 T2의 요청은 그때까지 DBMS에 의하여 승낙되지 않을 것이기 때문이다. 따라서, T2가 시작되기 전에 T1의 모든 작업들이 완료될 것이다. 


미완료 트랜잭션과 시스템 붕괴

DBMS는 완료되지 않은 트랜잭션들에 의해 수행된 변경들이 데이터베이스로부터 제거되는 것을 보장해야 한다. 이를 수행하기 위하여, DBMS는 데이터베이스에 쓴 모든 기록 작업에 대한 로그(log)를 유지관리한다. 이를 로그 우선 기록(Write-Ahead Log, WAL)이라 한다.

로그는 성공적으로 완료된 트랜잭션에 의해 수행된 변경들이 시스템 붕괴 때문에 손실되지 않는다는 것을 보장하기 위해서도 사용된다. 시스템이 한번 붕괴된 이후에 데이터베이스를 일관된 상태로 복구하는 작업은 느리고 더딘 작업이다. 

붕괴로부터 복구하기 위하여 요구되는 시간은 적당량의 정보를 디스크에 주기적으로 강제 출력함으로써 감소될 수 있다. 이러한 주기적인 연산을 검사점(checkpoint)이라고 한다.


유의사항 3가지

1. 하나의 트랜잭션에 의해 읽혀지거나 긹되는 모든 객체는 각기 공용 모드나 전용 모드로 먼저 잠금이 걸린다. 어떤 객체에 잠금을 거는 것은 그 객체의 가용성을 다른 트랜잭션들에게 제한하며 따라서 성능에 영향을 미친다.

2. 효율적인 로그 관리를 위해서, DBMS는 주기억장치에 있는 페이지들을 선택적으로 디스크에 강제 출력할 수 있어야 한다. 이 연산에 대한 운영 체제의 지원이 항상 만족스럽지는 않다.

3. 주기적인 검사점을 실시하는 것은 붕괴로부터 복구하는 데 걸리는 시간을 줄일 수 있다. 물론, 너무 자주 검사점을 실시하는 것은 정규 작업의 처리 속도를 둔화시키므로 그 균형이 유지되어야 한다.

0 Comments:

댓글 쓰기