KR101086392B1 - Wal 기법에서 대용량 객체의 파손 회복 방법 - Google Patents

Wal 기법에서 대용량 객체의 파손 회복 방법 Download PDF

Info

Publication number
KR101086392B1
KR101086392B1 KR1020100122482A KR20100122482A KR101086392B1 KR 101086392 B1 KR101086392 B1 KR 101086392B1 KR 1020100122482 A KR1020100122482 A KR 1020100122482A KR 20100122482 A KR20100122482 A KR 20100122482A KR 101086392 B1 KR101086392 B1 KR 101086392B1
Authority
KR
South Korea
Prior art keywords
large object
wal
transaction
log
disk
Prior art date
Application number
KR1020100122482A
Other languages
English (en)
Inventor
황규영
이영구
고현선
Original Assignee
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국과학기술원 filed Critical 한국과학기술원
Priority to KR1020100122482A priority Critical patent/KR101086392B1/ko
Application granted granted Critical
Publication of KR101086392B1 publication Critical patent/KR101086392B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1474Saving, restoring, recovering or retrying in transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2219Large Object storage; Management thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 WAL 기법에서 대용량 객체의 파손 회복 방법에 관한 것으로, 해결하고자 하는 기술적 과제는 대용량 객체의 파손 회복을 위하여 연산이 실제로 수행되는 시점을 조정함으로써 일반적인 WAL(Write Ahead Logging) 기법을 사용하는 것에 비하여 로그의 양을 획기적으로 감소시킬 수 있는 WAL 기법에서 대용량 객체의 파손 회복 방법을 제공하는데 있다.
이를 위해 본 발명에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 대용량 객체의 데이터가 변경되는 경우, 이에 해당하는 undo 정보와 redo 정보가 저장된 로그 레코드를 로그에 기록하는 WAL(Write Ahead Logging) 기반의 대용량 객체의 파손 회복 방법에 있어서, 바이트 단위 연산의 경우 트랜잭션 커밋(commit) 전에 변경된 상기 대용량 객체의 데이터를 디스크에 기록하여 대용량 객체에 대한 로그의 양을 감소시키커나, 객체 단위 연산의 경우 대용량 객체를 삭제하는 연산을 트랜잭션 커밋(commit) 시점까지 지연시켜 대용량 객체에 대한 로그의 양을 감소시키는 것을 특징으로 한다.

Description

WAL 기법에서 대용량 객체의 파손 회복 방법{AN EFFICIENT RECOVERY TECHNIQUE FOR LARGE OBJECTS IN WRITE AHEAD LOGGING}
본 발명은 WAL 기법에서 대용량 객체의 파손 회복 방법에 관한 것으로서 대용량 객체에 대한 파손 회복을 위하여 일반적인 WAL(Write Ahead Logging) 기법을 사용하는 경우 로그의 양을 줄일 수 있는 WAL 기법에서 대용량 객체의 파손 회복 방법에 관한 것이다.
기존의 데이터베이스 시스템들의 하부구조로 사용되는 저장 시스템들은 정형화된 데이터를 효과적으로 다루기 위하여 만들어진 것으로 다양한 응용 분야에서 요구되는 새로운 데이터 형들을 지원할 수 없다. 다양한 응용 분야에서 필요로 하는 데이터는 멀티미디어 정보, 의학용 데이터베이스의 MRI 촬영 영상, 지리 정보 시스템의 지도 등과 같은 데이터로서 기존의 데이터와는 달리 대용량의 비정형화된 데이터라는 특성을 가지고 있다. 그러므로 다양한 응용 분야를 지원하기 위한 저장 시스템에서 이러한 대용량 데이터 또는 대용량 객체를 효과적으로 저장하고 관리하는 기술은 필수적이다.
대용량 객체(large object)는 객체의 크기가 커서 하나의 페이지에 저장할 수 없는 객체로 정의된다. 여기서 페이지는 디스크의 입출력이 행해지는 최소 단위로 디스크 액세스는 페이지 크기의 정수 배로 이루어질 수 있다. 이에 반하여 하나의 페이지에 저장될 수 있는 객체를 소용량 객체(small object)라고 정의한다. 이와 같이 객체의 크기가 한 페이지를 초과하는지의 여부에 따라 객체를 분류하는 이유는 한 페이지를 초과하게 되면 공간 할당(space allocation), 객체 조작(object manipulation) 등이 복잡해지고, 동시성 제어, 파손 회복 기능의 구현에도 다른 방법이 요구되기 때문이다.
최근에는 데이터베이스가 다양한 분야에서 사용되고 있는데, 이 중에서 대용량 객체를 필요로 하는 분야도 많이 있다. 음악이나 동영상을 저장해야 하는 멀티미디어 데이터베이스, MRI나 CT 촬영 영상을 저장해야 하는 의학용 데이터베이스, 지도를 저장해야 하는 지리 정보 시스템이 이러한 예이다. 이외에도 크기가 큰 데이터들이 새로운 응용 분야에서 많이 나타나고 있으므로, 이러한 응용 분야들을 지원하기 위해서는 대용량 객체를 반드시 지원해야 한다.
이와 같은 대용량 객체의 용도를 고려할 때, 대용량 객체를 지원하는 저장 시스템은 다음과 같은 요구사항을 만족해야 한다.
첫째, 소용량 객체와 대용량 객체의 구분이 없이 두 종류의 객체에 대하여 동일한 인터페이스를 제공해 주어야 한다. 대용량 객체와 소용량 객체에 대한 인터페이스를 별도로 제공하면 사용자는 객체의 크기를 항상 신경 쓰고 객체 크기에 따른 인터페이스를 선택하여 써야 하므로 불편하다. 따라서, 저장 시스템은 사용자가 대용량 객체와 소용량 객체에 관계 없이 똑같은 방법으로 저장 시스템을 사용할 수 있도록 통일된 인터페이스를 제공해 주어야 한다.
둘째, 객체 안의 임의의 위치에서 임의의 양의 바이트들에 대한 읽기(read), 쓰기(write), 삽입(insert), 삭제(delete) 등의 연산이 제공되어야 한다. 연산의 대상이 객체 전체인 연산을 객체 단위 연산(object operations)이라 정의하고, 연산의 대상이 객체의 부분인 연산을 바이트 단위 연산(byte operations)이라고 정의한다. 소용량 객체의 경우에는 데이터가 모두 한 페이지 안에 저장되어 있으며, 따라서 데이터를 모두 메모리에 로드할 수 있기 때문에 객체를 조작하는 연산들이 객체 단위로 이루어져도 성능에 영향을 미치지 않는다. 그러나 대용량 객체의 경우는 객체 전체를 메모리에 로드할 수 없거나 객체 전체를 메모리에 로드하는 것이 시스템의 성능을 크게 떨어뜨리며, 많은 응용에서 객체의 부분만을 액세스하기 때문에 바이트 단위의 연산의 제공이 필수적이다.
셋째, 대용량 객체의 임의의 위치를 효율적으로 찾아갈 수 있어야 한다. 바이트 단위의 연산은 먼저 객체 안에서 연산이 시작될 위치를 찾고, 찾은 위치에서 일정량의 바이트를 검색하거나 삽입, 삭제하게 되므로 먼저 객체 안에서 연산이 시작하는 위치를 찾아가는 것이 효율적으로 수행되어야 한다.
넷째, 대용량 객체의 끝에 임의의 양의 바이트들을 덧붙이는 첨가(append) 연산이 저장장치 이용률을 높일 수 있도록 효율적으로 제공되어야 한다. 상술한 바와 같이, 대용량 객체의 경우에는 메모리의 물리적인 제한 조건 때문에 한 번의 연산으로 객체 전체를 생성할 수 없는 경우가 있다. 따라서, 객체를 점차적으로 생성해 가야 하는데, 이러한 경우에 사용되는 첨가 연산은 삽입 연산의 특별한 경우이기 때문에 일반적인 삽입 연산보다 첨가 연산의 성능을 더욱 향상시킬 수 있다. 그러므로 객체의 끝에 데이터를 덧붙이는 첨가 연산은 삽입 연산과는 별도로 제공되어야 한다.
다섯째, 대용량 객체를 순차적으로 검색할 때 빠른 검색이 가능해야 한다. 영화와 같은 영상 자료를 대용량 객체로 저장한 경우 만일 검색 시간이 너무 길다면, 사용자는 느린 영상의 움직임을 보게 될 것이며 화면과 음향이 동기화 되지 않는 이상 현상이 발생할 수도 있다. 따라서 같은 객체를 구성하고 있는 페이지들은 가능한 한 인접한 위치에 할당함으로써 디스크 탐색 시간(seek time)을 줄여야 한다.
위와 같은 요구사항들을 만족시키는 대용량 객체 저장 방법으로는 EXODUS의 대용량 객체 저장 방법이 있다.
도 1은 EXODUS에서의 대용량 객체 표현 방법을 나타내는 예시도이다.
상기 EXODUS에서는 대용량 객체를 저장하기 위하여 도 1에 도시된 바와 같이, 트리(tree) 형태를 사용한다. 트리는 데이터들이 저장되어 있는 단말 노트(leaf node)들과 객체 안에서의 바이트 위치에 대한 색인을 위해 사용되는 내부 노드(internal node)들로 구성된다. 내부 노드는 하나의 페이지를 사용하고, 단말 노드는 연속된 페이지들의 모임인 트레인(train)을 사용한다. 단말 노드에 트레인을 사용하는 이유는 순차적 액세스의 성능을 향상시키기 위함이다.
내부 노드들은 <count, pageNo>의 쌍을 배열 형태로 가지고 있다. 여기서 pageNo는 다음 레벨 서브트리(sub-tree)의 루트 노드(root node)를 가리키며, count는 그 서브트리에 저장되어 있는 맨 마지막 바이트가 현재 노드에서 볼 때 몇 번째 바이트에 해당하는가를 나타낸다. 그러므로 각 노드에 있는 가장 오른쪽 쌍의 count 값은 그 노드를 루트로 하는 서브트리에 저장되어 있는 부분 객체의 바이트 수를 가리키며, 노드가 루트 노드인 경우에는 저장된 객체의 전체 바이트 수가 된다. 이때, Count는 트리에 저장되어 있는 객체의 임의의 바이트를 찾아가기 위한 구분자(discriminator)로서 사용된다.
도 1에서 단말 노드 안에 적혀 있는 숫자는 그 숫자만큼의 바이트가 단말 노드 내에 저장되어 있음을 나타낸다. 예를 들면, 단말 노드 e에는 162 바이트가 저장되어 있다. 내부 노드 b에서 단말 노드 e를 가리키는 두 번째 <count, pageNo> 쌍의 count 값 282는, 단말 노드 e에 저장된 마지막 바이트(=162번째 바이트)가 내부 노드 b를 루트 노드로 하는 서브트리에서는 282번째 바이트라는 것을 의미한다. 282번째 바이트가 되는 이유는 내부 노드 b에서 첫 번째 서브트리인 단말 노드 d에 120 바이트가 저장되어 있기 때문이다.
EXODUS에서는 대용량 객체에 대한 바이트 단위의 읽기, 쓰기, 삽입, 첨가, 삭제 연산을 지원한다. 또한 대용량 객체는 소용량 객체와 동일한 포맷(format)의 객체 헤더(header)를 갖는다. 대용량 객체의 경우 헤더와 함께 대용량 객체의 루트 노드를 가리키는 포인터가 데이터 페이지에 저장된다. 이때, 대용량 객체 트리의 루트 노드가 데이터 페이지에 저장될 수 있는 크기이면 객체 헤더와 함께 데이터 페이지에 저장될 수 있다.
데이터베이스 시스템의 중요한 목적 중 하나는 데이터의 일관성(consistency)을 안정적으로 유지시켜 주는 것이기 때문에 대용량 객체에 대한 저장 방법 못지 않게 파손 회복 방법도 중요하다. 대부분의 상용 데이터베이스 시스템에서는 WAL(Write Ahead Logging) 기법을 기반으로 하는 ARIES 파손 회복 방법이 사용되고 있는데, 대용량 객체의 파손 회복을 위하여 일반적인 WAL 기법을 사용하는 경우 로깅으로 인한 오버헤드가 너무 큰 문제점이 있다. 이에, EXODUS에서는 로깅으로 인한 오버헤드를 줄이기 위하여 WAL(Write Ahead Logging) 기법에 그림자 기법(shadow mechanism)을 결합한 방법을 사용하고 있으나, 이 방법은 대용량 객체에 대한 클러스터링을 깨뜨릴 수 있으며, 시스템의 복잡도를 증가시킨다는 단점이 있다.
보다 상세히 설명하면, WAL 기법은 삽입, 삭제 등의 갱신에 의해서 변경된 데이터를 디스크에 쓰기 전에 해당 변경에 대한 로그 레코드(log record)를 먼저 로그에 기록하여 시스템 파손(system crash)에 대비하는 기법이다. WAL 기법을 사용하는 대표적인 파손 회복 알고리즘인 ARIES는 IBM의 DB2, Microsoft의 SQL Server 등 수 많은 상용 데이터베이스 시스템에서 사용되고 있다.
WAL 기법에서는 데이터가 변경되면 그에 해당하는 undo 정보와 redo 정보를 담고 있는 로그 레코드를 로그에 기록한다. Undo 정보는 변경되기 이전의 상태로 데이터베이스를 복구시키기 위한 정보로서, 트랜잭션을 롤백(rollback)시키거나, 시스템 파손 시에 커밋(commit)되지 않은 트랜잭션(transaction)을 취소시킬 때 사용된다. Redo 정보는 변경된 이후의 상태로 데이터베이스를 복구시키기 위한 정보로서, 트랜잭션이 커밋(commit)되었으나 변경 사항이 아직 디스크에 반영되기 이전에 시스템 파손이 발생하였을 때 트랜잭션을 다시 수행시키기 위하여 사용된다.
따라서, undo 정보에는 변경되기 이전의 데이터가 포함되어 있어야 하며, redo 정보에는 변경된 이후의 데이터가 포함되어 있어야 한다. 예를 들어 'a=10' 이라는 데이터를 'a=20' 으로 변경하는 작업을 수행할 때에 로그 레코드에는 undo 정보로서 'a=10' 이 저장되고, redo 정보로서 'a=20' 이 저장된다.
WAL 기법에서는 이러한 undo/redo 정보를 포함하는 로그 레코드를 이용해서 시스템 파손으로부터 시스템을 복구한다.
한편, 대용량 객체에 대한 파손 회복을 위하여 일반적인 WAL 기법을 사용하는 경우 로깅으로 인한 오버헤드가 너무 크다. 대용량 객체의 파손 회복을 위해 undo/redo 정보를 가지는 로그 레코드를 기록하면, 로그의 양이 많기 때문에 로그의 기록에 걸리는 시간이 길어져서 시스템 성능이 떨어진다. 또한 로그를 저장하는 공간이 빨리 가득 차게 되는 등 로그 공간 오버헤드도 심각해진다. 따라서 로그의 양을 줄일 수 있는 방법이 필요하다.
대용량 객체에 대한 로그의 양을 줄이기 위하여, EXODUS에서는 WAL 기법에 그림자 기법(shadow mechanism)을 결합시킨 방법을 제안하였다. 그림자 기법이란 데이터가 갱신되었을 때, 데이터베이스 내의 원래 데이터(갱신되기 전의 데이터)는 그림자(shadow)로 남겨두고 새로운 페이지를 할당받아 갱신된 데이터를 기록하여 시스템 파손에 대비하는 기법이다. EXODUS에서는 갱신된 대용량 객체의 단말 노드와 내부 노드를 그림자 기법으로 저장하고 루트 노드를 가리키는 포인터가 저장되어 있는 객체 헤더를 갱신한다. 이때, 객체 헤더가 갱신되기 전에 다른 갱신된 노드들은 디스크에 쓰여져야 한다. 그리고, 객체 헤더가 갱신된 것에 대한 로그 레코드만을 로깅한다.
그러나, 이러한 방법은 다음과 같은 문제점을 갖는다. 첫째, 대용량 객체의 일부가 갱신된 경우, 갱신된 일부 데이터를 원래 위치가 아닌 새로운 위치에 저장하기 때문에 대용량 객체에 대한 클러스터링을 깨뜨릴 수 있으므로 디스크 액세스 성능이 저하되는 문제점이 있고, 둘째, 로깅과 그림자 기법이라는 서로 다른 두 가지 파손 회복 방법을 결합시켰기 때문에 시스템의 복잡도(complexity)가 증가하는 문제점이 있다.
본 발명은 상기한 바와 같은 과제를 해결하기 위해 발명된 것으로, 대용량 객체의 파손 회복을 위하여 연산이 실제로 수행되는 시점을 조정함으로써 일반적인 WAL(Write Ahead Logging) 기법을 사용하는 것에 비하여 로그의 양을 획기적으로 감소시킬 수 있는 WAL 기법에서 대용량 객체의 파손 회복 방법을 제공하는데 그 목적이 있다.
상기한 바와 같은 목적을 달성하기 위해 본 발명에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 대용량 객체의 데이터가 변경되는 경우 이에 해당하는 undo 정보와 redo 정보가 저장된 로그 레코드를 로그에 기록하는 WAL(Write Ahead Logging) 기반의 대용량 객체의 파손 회복 방법에 있어서, 바이트 단위 연산의 경우 트랜잭션 커밋(commit) 전에 변경된 상기 대용량 객체의 데이터를 디스크에 기록하여 대용량 객체에 대한 로그의 양을 감소시키는 것을 특징으로 한다.
또한, 상기 대용량 객체의 단말 노드인 트레인이 변경되는 경우, 변경 즉시 상기 디스크에 기록되어 상기 redo 정보가 로그 레코드에 저장되지 않을 수 있다.
또한, 상기 대용량 객체의 내부 노드가 트랜잭션 내에서 새로 할당되어 가득 찬 경우, 변경 즉시 상기 디스크에 기록되어 상기 redo 정보가 로그 레코드에 저장되지 않을 수 있다.
또한, 상기 대용량 객체의 내부 노드가 트랜잭션 내에서 새로 할당되어 가득 차지 않은 경우, 변경 즉시 상기 디스크에 기록되지 않고 상기 redo 정보가 로그 레코드에 저장될 수 있다.
또한, 상기 내부 노드는 버퍼 교체 알고리즘에 의해 버퍼 페이지가 스왑 아웃(swap out)될 때 상기 디스크에 기록될 수 있다.
또한, 본 발명에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 대용량 객체의 데이터가 변경되는 경우 이에 해당하는 undo 정보와 redo 정보가 저장된 로그 레코드를 로그에 기록하는 WAL(Write Ahead Logging) 기반의 대용량 객체의 파손 회복 방법에 있어서, 객체 단위 연산의 경우 대용량 객체를 삭제하는 연산을 트랜잭션 커밋(commit) 시점까지 지연시켜 대용량 객체에 대한 로그의 양을 감소시키는 것을 특징으로 한다.
또한, 상기 대용량 객체의 헤더와 루트 노드를 가리키는 포인터가 저장되는 데이터 페이지에서 객체를 삭제하는 연산을 수행하되 대용량 객체를 삭제하지 않고 트랜잭션 커밋(commit) 시점까지 지연시키는 대용량 객체 삭제 지연단계 및 상기 트랜잭션 커밋(commit) 시점에 상기 대용량 객체의 트리를 구성하는 페이지와 트레인의 식별자를 undo 정보 및 redo 정보로서 로깅하고 상기 페이지 및 트레인을 프리 스페이스(free space)에 반환하여 삭제 연산을 완료하는 대용량 객체 삭제 완료단계를 포함할 수 있다.
상기한 바와 같이 본 발명에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법에 의하면, 대용량 객체에 대한 로그의 양을 획기적으로 감소시킬 수 있다. 구체적으로, 바이트 단위의 첨가/삽입 연산들에 대한 로깅 오버헤드를 크게 감소시킬 수 있는데, 특히, 대용량 객체의 생성은 많은 경우 연속적인 첨가/삽입 연산을 통해 이루어지므로, 가장 빈번할 것으로 예상되는 대용량 객체의 생성에 대한 로깅 오버헤드를 크게 감소시킬 수 있다. 또한, 기존에 존재하는 데이터를 덮어쓰는 바이트 단위 쓰기 연산의 경우에도 로그 레코드에 redo 정보는 저장할 필요가 없고, undo 정보만 저장하면 되기 때문에 로그의 양을 크게 감소시킬 수 있다. 더불어, 객체 단위 삭제 연산의 경우에는 삭제 연산의 지연에 의하여 삭제될 데이터를 로그 레코드에 저장하지 않아도 되기 때문에 로그의 양을 크게 감소시키는 효과가 있다.
또한, 본 발명에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 연산이 실제로 수행되는 시점을 조정하는 방법으로 대용량 객체에 대한 로그의 양을 감소시킬 수 있기 때문에, WAL 기법 기반의 파손 회복 방법을 사용하는 대부분의 데이터베이스 시스템에 본 발명을 쉽게 적용시킬 수 있으며, 특히, WAL 기법에 그림자 기법을 결합시켜야 하는 기존 EXODUS 대용량 객체 파손 회복 방법에 비하여 구현이 간단한 효과가 있다.
더불어, 본 발명에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 기존 EXODUS 대용량 객체 파손 회복 방법에 비하여 대용량 객체에 대한 클러스터링이 깨어지는 경우가 적고, 그림자 기법을 결합한 EXODUS의 파손 회복 방법과는 달리, 데이터가 변경되어도 새로운 페이지를 할당받지 않기 때문에 대용량 객체에 대한 대부분의 변경이 처음 할당된 페이지들에서 이루어지는 효과가 있다.
도 1은 EXODUS에서의 대용량 객체 표현 방법을 나타내는 예시도.
도 2는 본 발명의 제 1실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법의 흐름도.
도 3은 본 발명의 제 2실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법의 흐름도.
이하, 첨부된 도면을 참조하여 본 발명의 실시예를 상세히 설명한다. 우선, 도면들 중 동일한 구성요소 또는 부품들은 가능한 한 동일한 참조부호를 나타내고 있음에 유의해야 한다. 본 발명을 설명함에 있어서 관련된 공지기능 혹은 구성에 대한 구체적인 설명은 본 발명의 요지를 모호하게 하지 않기 위해 생략한다.
도 2는 본 발명의 제 1실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법의 흐름도이다.
본 발명의 제 1실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 도 2에 도시된 바와 같이, 대용량 객체의 데이터가 변경(S11)되는 경우, 이에 해당하는 undo 정보와 redo 정보가 저장된 로그 레코드를 로그에 기록하는 WAL(Write Ahead Logging) 기반의 대용량 객체의 파손 회복 방법에 있어서, 바이트 단위 연산의 경우 트랜잭션 커밋(commit)(S30) 전에 변경된 상기 대용량 객체의 데이터를 디스크에 기록(S20)하여 대용량 객체에 대한 로그의 양을 감소시키는 것을 특징으로 한다.
구체적으로, 본 발명의 제 1실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법에 의해 트랜잭션 커밋(commit) 전에 변경된 데이터를 디스크에 기록하면, 로그 레코드에 redo 정보는 저장할 필요가 없고 undo 정보만 저장하면 되기 때문에 기존에 존재하는 데이터를 덮어쓰는 쓰기 연산에 대해서는 로그의 양이 절반 정도로 줄어드는 효과가 있다.
또한, 일반적으로 대용량 객체에 대하여 가장 빈번할 것으로 예상되는 첨가(append)/삽입(insert) 연산의 경우에도 변경되기 이전의 데이터(before-image)를 저장할 필요가 없으므로 undo 정보조차도 매우 작아서 쓰기 연산의 경우보다도 로그의 양이 더 많이 줄어드는 효과가 있다.
일반적으로, 바이트 단위 연산 중에서 특히, 첨가/삽입 연산 시에 로그 레코드의 양을 줄이는 것에 초점을 맞출 수 있는데, 대용량 객체는 크기가 커서 일반적으로 객체 전체를 메모리에 로드하기 어렵기 때문에 객체 생성 시에 객체를 한번에 생성하지 않고, 첨가/삽입 연산을 이용하여 점진적으로 생성할 수 있다.
또한, 대용량 객체는 주로 한번 생성된 후 갱신이 빈번하게 발생하지 않기 때문에, 객체 생성 시 사용되는 첨가/삽입 연산에 대한 로그 레코드의 양을 줄이면 그에 따른 성능 향상을 가져올 수 있다.
한편, 첨가/삽입 연산 시 undo 정보는 redo 정보에 비하여 그 크기가 매우 작으므로 무시할 수 있다. 이는 객체 데이터에 대한 before image가 없기 때문에 undo 정보로는 페이지 할당과 객체 헤더의 변경 연산을 undo하기 위한 정보만이 필요한 반면, redo 정보로는 생성되는 객체에 대한 데이터, 즉 after image를 저장해야 하기 때문에 로그 레코드의 redo 정보를 줄이는 노력이 필요할 수 있다.
로그 레코드에 redo 정보를 유지하는 이유는 커밋(commit)된 트랜잭션이 버퍼에서 갱신한 내용을 디스크에 반영되기 전에 시스템이 파손되는 경우를 대비하기 위한 것으로, 트랜잭션이 커밋(commit)되기 전에 해당 트랜잭션이 갱신한 버퍼의 내용을 디스크에 기록한다면 redo 정보를 로그 레코드에 유지할 필요가 없게 된다.
본 발명의 제 1실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법에서는 대용량 객체의 단말 노드인 트레인들이 변경되면 트랜잭션이 커밋(commit)되기 전에 디스크에 반영함으로써 로그 레코드에 redo에 관련된 정보를 기록하지 않는다.
이때, 트레인들을 변경 즉시 디스크에 반영할 수도 있고, 트랜잭션 커밋(commit) 시 디스크에 반영할 수도 있으나, 본 발명에서는 변경 즉시 상기 디스크에 기록되어 상기 redo 정보가 로그 레코드에 저장되지 않는 것을 특징으로 한다.
왜냐하면, 트랜잭션 커밋(commit) 시에 트랜잭션이 변경한 트레인 버퍼들을 디스크에 반영하려면, 각 트레인 버퍼를 어느 트랜잭션이 갱신했는지에 대한 별도의 정보를 유지 및 관리해야 하는 오버헤드가 있기 때문이다. 따라서, 본 발명의 제 1실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법에서는 이러한 오버헤드를 피하기 위하여 변경 즉시 디스크에 반영하는 방법을 사용한다. 대용량 객체의 트레인은 대부분의 경우 버퍼에 올라와서 한 번만 변경되므로 변경 즉시 디스크에 기록하여도 성능에 큰 영향을 미치지 않는다.
한편, 대용량 객체의 내부 노드들에 대해서는 트랜잭션 내에서 페이지가 새로 할당되어 가득 찬 경우와 그렇지 않은 경우를 구분하여 처리한다. 두 경우로 구분하는 이유는 첨가 연산을 이용한 객체의 생성을 보다 효율적으로 처리하기 위해서이다.
첫째, 상기 대용량 객체의 내부 노드가 트랜잭션 내에서 새로 할당되어 가득 찬 경우, 변경 즉시 상기 디스크에 기록되어 상기 redo 정보가 로그 레코드에 저장되지 않을 수 있다. 트랜잭션 내에서 내부 노드가 새로 할당되어 가득 차는 경우는 일반적으로 첨가 연산을 이용하여 객체를 생성하는 경우인데, 이때에는 한번 가득 찬 내부 노드가 다시 수정되지 않는다. 따라서, 갱신 즉시 디스크에 기록함으로써 로그 레코드의 양을 줄일 수 있다.
둘째, 상기 대용량 객체의 내부 노드가 트랜잭션 내에서 새로 할당되어 가득 차지 않은 경우, 변경 즉시 상기 디스크에 기록되지 않고 상기 redo 정보가 로그 레코드에 저장될 수 있다. 이때, 상기 내부 노드는 버퍼 교체 알고리즘에 의해 버퍼 페이지가 스왑 아웃(swap out)될 때 상기 디스크에 기록될 수 있다.
즉, 상기 버퍼 페이지가 트랜잭션 커밋(commit) 이후에 스왑 아웃(swap out) 될 수도 있으므로 이러한 페이지의 변경에 대해서는 redo 정보를 로그 레코드에 저장해야 한다. 가득 차지 않은 내부 노드들은 버퍼에 올라온 후, 스왑 아웃(swap out) 될 때까지 여러 번 갱신될 가능성이 있으므로 한 번 변경된 후 즉시 디스크에 기록하지 않는 것이 좋다.
이하, 본 발명의 제 2실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법을 상세히 설명한다.
본 발명의 제 2실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 대용량 객체의 데이터가 변경되는 경우, 이에 해당하는 undo 정보와 redo 정보가 저장된 로그 레코드를 로그에 기록하는 WAL(Write Ahead Logging) 기반의 대용량 객체의 파손 회복 방법에 있어서, 객체 단위 연산의 경우 대용량 객체를 삭제하는 연산을 트랜잭션 커밋(commit) 시점까지 지연시켜 대용량 객체에 대한 로그의 양을 감소시키는 것을 특징으로 한다.
일반적으로, 대용량 객체를 생성하거나 갱신할 때에는 객체 전체를 메모리에 로드하여 처리해야 하는 객체 단위 연산에 비하여, 필요한 부분만을 메모리에 로드하여 처리할 수 있는 바이트 단위 연산이 더 좋은 성능을 나타내기 때문에 객체 단위 연산을 지원할 필요가 없으나, 예외적으로, 객체 전체를 삭제하는 경우에는 객체 단위 삭제 연산이 바이트 단위 삭제 연산보다 성능이 좋기 때문에 삭제 연산에 대해서는 객체단위 연산을 지원하는 것이 유리하다. 따라서, 본 발명의 제 2실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법에서는 객체 단위 연산에 대해서 삭제 연산만을 고려할 수 있다.
본 발명의 제 2실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법은 도 2에 도시된 바와 같이, 대용량 객체 삭제 지연단계(S21) 및 대용량 객체 삭제 완료단계(S22)를 포함한다.
상기 대용량 객체 삭제 지연단계(S21)는 상기 대용량 객체의 헤더와 루트 노드를 가리키는 포인터가 저장되는 데이터 페이지에서 객체를 삭제하는 연산을 수행하되, 대용량 객체를 삭제하지 않고 트랜잭션 커밋(commit) 시점까지 지연시키는 단계이다.
대용량 객체를 삭제할 때에 대용량 객체 데이터를 모두 로깅하는 것은 시스템의 성능을 크게 떨어뜨리며, 더욱이 트랜잭션이 abort되면 undo 하는 작업도 오버헤드가 된다. 따라서, 본 발명의 제 2실시예에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법에서는 대용량 객체의 헤더와 대용량 객체의 루트 노드를 가리키는 포인터가 저장되어 있는 데이터 페이지에서 객체를 삭제하는 연산을 수행하되, 대용량 객체를 삭제하지 않고 트랜잭션 커밋(commit)시 까지 지연시킬 수 있다.
상기 대용량 객체 삭제 완료단계(S22)는 상기 트랜잭션 커밋(commit) 시점에 상기 대용량 객체의 트리를 구성하는 페이지와 트레인의 식별자를 undo 정보 및 redo 정보로서 로깅하고, 상기 페이지 및 트레인을 프리 스페이스(free space)에 반환하여 삭제 연산을 완료하는 단계이다.
트랜잭션을 커밋(commit)하는 시점에 대용량 객체 트리를 구성하는 페이지와 트레인들의 식별자를 undo/redo 정보로서 로깅하고, 페이지/트레인을 프리 스페이스(free space)에 반환하는 것으로 삭제 연산을 완료한다. 이렇게 하면 페이지/트레인 반환에 대한 undo/redo 정보는 로그 레코드에 저장해야 하지만, 페이지/트레인의 내용은 변경되지 않았기 때문에 삭제된 데이터(before image)에 대한 정보는 로그 레코드에 저장할 필요가 없으므로 로그의 양을 줄일 수 있다.
상술한 바와 같이, 본 발명에 따르면, 바이트 단위 연산에 대해서는 트랜잭션 커밋(commit) 전에 변경된 데이터를 디스크에 기록하여 로그 레코드에 redo 정보를 유지할 필요가 없게 하고, 객체 단위 연산에 대해서는 대용량 객체를 삭제하는 연산을 트랜잭션 커밋(commit) 시점까지 지연시켜 삭제될 데이터(before image)를 로그 레코드에 유지할 필요가 없게 하여 파손 회복시 일반적인 WAL 기법을 사용하는 것에 비하여 로그의 양을 획기적으로 감소시킬 수 있다.
이상과 같이 본 발명에 따른 WAL 기법에서 대용량 객체의 파손 회복 방법을 예시한 도면을 참조로 하여 설명하였으나, 본 명세서에 개시된 실시예와 도면에 의해 본 발명이 한정되는 것은 아니며, 본 발명의 기술사상 범위내에서 당업자에 의해 다양한 변형이 이루어질 수 있음은 물론이다.
S11:대용량 객체의 데이터 변경
S12:변경된 대용량 객체의 데이터를 디스크에 기록
S13:트랜잭션 커밋
S21:대용량 객체 삭제 지연단계
S22:대용량 객체 삭제 완료단계

Claims (7)

  1. 대용량 객체의 데이터가 변경되는 경우, 이에 해당하는 undo 정보와 redo 정보가 저장된 로그 레코드를 로그에 기록하는 WAL(Write Ahead Logging) 기반의 대용량 객체의 파손 회복 방법에 있어서,
    바이트 단위 연산의 경우 트랜잭션 커밋(commit) 전에 변경된 상기 대용량 객체의 데이터를 디스크에 기록하여 대용량 객체에 대한 로그의 양을 감소시키는 것을 특징으로 하며,
    상기 대용량 객체의 단말 노드인 트레인이 변경되는 경우, 변경 즉시 상기 디스크에 기록되어 상기 redo 정보가 로그 레코드에 저장되지 않는 것을 특징으로 하는 WAL 기법에서 대용량 객체의 파손 회복 방법.
  2. 삭제
  3. 제 1항에 있어서,
    상기 대용량 객체의 내부 노드가 트랜잭션 내에서 새로 할당되어 가득 찬 경우, 변경 즉시 상기 디스크에 기록되어 상기 redo 정보가 로그 레코드에 저장되지 않는 것을 특징으로 하는 WAL 기법에서 대용량 객체의 파손 회복 방법.
  4. 제 1항에 있어서,
    상기 대용량 객체의 내부 노드가 트랜잭션 내에서 새로 할당되어 가득 차지 않은 경우, 변경 즉시 상기 디스크에 기록되지 않고 상기 redo 정보가 로그 레코드에 저장되는 것을 특징으로 하는 WAL 기법에서 대용량 객체의 파손 회복 방법.
  5. 제 4항에 있어서,
    상기 내부 노드는 버퍼 교체 알고리즘에 의해 버퍼 페이지가 스왑 아웃(swap out)될 때 상기 디스크에 기록되는 것을 특징으로 하는 WAL 기법에서 대용량 객체의 파손 회복 방법.
  6. 대용량 객체의 데이터가 변경되는 경우, 이에 해당하는 undo 정보와 redo 정보가 저장된 로그 레코드를 로그에 기록하는 WAL(Write Ahead Logging) 기반의 대용량 객체의 파손 회복 방법에 있어서,
    객체 단위 연산의 경우 대용량 객체를 삭제하는 연산을 트랜잭션 커밋(commit) 시점까지 지연시켜 대용량 객체에 대한 로그의 양을 감소시키는 것을 특징으로 하며,
    상기 대용량 객체의 헤더와 루트 노드를 가리키는 포인터가 저장되는 데이터 페이지에서 객체를 삭제하는 연산을 수행하되, 대용량 객체를 삭제하지 않고 트랜잭션 커밋(commit) 시점까지 지연시키는 대용량 객체 삭제 지연단계; 및
    상기 트랜잭션 커밋(commit) 시점에 상기 대용량 객체의 트리를 구성하는 페이지와 트레인의 식별자를 undo 정보 및 redo 정보로서 로깅하고, 상기 페이지 및 트레인을 프리 스페이스(free space)에 반환하여 삭제 연산을 완료하는 대용량 객체 삭제 완료단계를 포함하는 것을 특징으로 하는 WAL 기법에서 대용량 객체의 파손 회복 방법.
  7. 삭제
KR1020100122482A 2010-12-03 2010-12-03 Wal 기법에서 대용량 객체의 파손 회복 방법 KR101086392B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100122482A KR101086392B1 (ko) 2010-12-03 2010-12-03 Wal 기법에서 대용량 객체의 파손 회복 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100122482A KR101086392B1 (ko) 2010-12-03 2010-12-03 Wal 기법에서 대용량 객체의 파손 회복 방법

Publications (1)

Publication Number Publication Date
KR101086392B1 true KR101086392B1 (ko) 2011-11-23

Family

ID=45398135

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100122482A KR101086392B1 (ko) 2010-12-03 2010-12-03 Wal 기법에서 대용량 객체의 파손 회복 방법

Country Status (1)

Country Link
KR (1) KR101086392B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030068240A (ko) * 2002-02-14 2003-08-21 김도현 기능성 가축사료 및 그 제조방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030068240A (ko) * 2002-02-14 2003-08-21 김도현 기능성 가축사료 및 그 제조방법

Similar Documents

Publication Publication Date Title
AU2017204760B2 (en) Log record management
CN107862064B (zh) 一个基于nvm的高性能、可扩展的轻量级文件系统
US8977597B2 (en) Generating and applying redo records
US8423733B1 (en) Single-copy implicit sharing among clones
KR101932372B1 (ko) 인 플레이스 스냅샷들
US7363540B2 (en) Transaction-safe FAT file system improvements
US8549051B2 (en) Unlimited file system snapshots and clones
US20170024315A1 (en) Efficient garbage collection for a log-structured data store
US8280858B2 (en) Storage pool scrubbing with concurrent snapshots
US7844643B2 (en) Storage management system with integrated continuous data protection and remote copy
US8112607B2 (en) Method and system for managing large write-once tables in shadow page databases
US20040030951A1 (en) Instantaneous restoration of a production copy from a snapshot copy in a data storage system
JP2006268829A (ja) ストレージシステム間でオブジェクトをミラー化する方法と装置
US10628298B1 (en) Resumable garbage collection
US8108356B2 (en) Method for recovering data in a storage system
US8135928B2 (en) Self-adjusting change tracking for fast resynchronization
US11741073B2 (en) Granularly timestamped concurrency control for key-value store
US20220129420A1 (en) Method for facilitating recovery from crash of solid-state storage device, method of data synchronization, computer system, and solid-state storage device
JP5533888B2 (ja) ストレージ装置
US8612717B2 (en) Storage system
KR101086392B1 (ko) Wal 기법에서 대용량 객체의 파손 회복 방법
KR100449419B1 (ko) 데이터 크기에 따른 선별적 공간데이터 관리방법
JP6794827B2 (ja) ストレージ管理装置、ストレージシステム、方法およびプログラム
CN117950597A (zh) 数据修改写方法、数据修改写装置以及计算机存储介质
KR20180054422A (ko) 파일 기반 데이터베이스의 저널링 방법 및 장치

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee