트랜잭션이란 하나 이상의 SQL 문장들로 이뤄진 논리적인 작업단위를 말하며, 트랜잭션 내에서 수행되는 SQL 문장 하나하나를 스테이트먼트라고 합니다.
DBMS는 기본적으로 사용자 트랜잭션의 동시성을 제어하고, 데이터 일관성을 유지해야 하는데 이번 장에서는 ALTIBASE HDB가 트랜잭션의 동시성 제어와 영속성(Durability)을 어떻게 보장하는지 알아보도록 하겠습니다.
ALTIBASE HDB는 트랜잭션의 동시성 제어 시, 원본 레코드에 변경을 하는 SVCC(Single Version Concurrency Control) 방식이 아닌, 사본 레코드를 생성하여 변경하는 MVCC(Multi Version Concurrency Control) 방식을 제공합니다.
MVCC 방식은 하나의 레코드에 대해 변경이 발생할 경우 그 레코드의 원래 버전은 그대로 유지한 채로 새로운 버전을 만들어 그 새로운 버전에 대해 변경을 수행함으로써, 비록 한 트랜잭션이 동일 레코드에 대해 연산을 수행하고 있더라도 그 레코드를 검색하는 다른 트랜잭션에게는 영향을 미치지 않도록 하는 동시성 제어 기법입니다.
ALTIBASE HDB는 메모리 테이블과 디스크 테이블을 제공하기 때문에 각각의 테이블에 트랜잭션이 발생하게 되면 다른 방식으로 MVCC를 지원하게 됩니다.
메모리 테이블에 대해서는 새로운 레코드 버전을 데이터 페이지의 별도 RID로 저장하는 Out-place 방식을 사용합니다.
이 방식은 빠른 성능을 보장하나 데이터 페이지의 사용 효율성이 저하될 가능성이 있으므로 특정 레코드의 버전이 프로퍼티에 지정된 사이즈보다 커질 경우에는 In-place Update로 전환되도록 설계되어 있습니다.
새로운 레코드 버전을 생성해서 변경하기 때문에 commit 되기 전에 다른 트랜잭션이 조회를 하게 되면 변경되기 이전 값인 원본 레코드를 조회할 수 있고, commit이 된 후에는 원본 레코드를 삭제하기 때문에 변경된 새로운 레코드를 조회할 수 있습니다.
디스크 테이블에 대해서는 기존의 레코드에서 변경되는 컬럼을 Undo 테이블스페이스의 Undo 로그 레코드로 기록하고 변경 이후 값들을 기존 레코드의 해당 위치에 복사하는 In-place 방식을 사용합니다.
IN-PLACE 방식은 원본 레코드의 위치에 그대로 변경할 새로운 레코드 값을 덮어쓰는 방식입니다.
사본 레코드를 생성하지는 않지만 rollback 이나 다른 트랜잭션의 조회 업무를 처리하기 위해 원본 레코드 값은 Undo 영역에 복사해두고 변경하는 방식입니다.
- 강좌 URL : http://www.gurubee.net/lecture/2167
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.