KR20080044480A - 지연된 로깅 방법 및 그 장치 - Google Patents

지연된 로깅 방법 및 그 장치 Download PDF

Info

Publication number
KR20080044480A
KR20080044480A KR1020060113386A KR20060113386A KR20080044480A KR 20080044480 A KR20080044480 A KR 20080044480A KR 1020060113386 A KR1020060113386 A KR 1020060113386A KR 20060113386 A KR20060113386 A KR 20060113386A KR 20080044480 A KR20080044480 A KR 20080044480A
Authority
KR
South Korea
Prior art keywords
log
transaction
data page
page
updated
Prior art date
Application number
KR1020060113386A
Other languages
English (en)
Other versions
KR100862661B1 (ko
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 KR1020060113386A priority Critical patent/KR100862661B1/ko
Priority to US11/751,077 priority patent/US7801855B2/en
Priority to CN2007101085168A priority patent/CN101183322B/zh
Publication of KR20080044480A publication Critical patent/KR20080044480A/ko
Application granted granted Critical
Publication of KR100862661B1 publication Critical patent/KR100862661B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • 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/23Updating
    • G06F16/2358Change logging, detection, and notification
    • 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

Landscapes

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

Abstract

본 발명은 데이터베이스의 갱신 작업에 의한 로그 레코드를 생성함에 있어서 로그 엔트리를 이용하여 로그 사이즈를 감소시키는 로깅(logging) 방법에 관한 것으로서, 갱신되는 데이터 페이지의 로그 정보를 저장하고, 데이터 페이지의 갱신 작업이 완료될 때, 저장된 로그 정보를 독출하고, 독출된 로그 정보를 이용하여 로그 레코드를 생성하고, 생성된 로그 레코드를 로그 페이지에 기록함으로써, 로깅에 따른 로그 사이즈가 감소하여 디스크 입출력(I/O) 작업 횟수가 감소하고 결국 데이터베이스 시스템의 갱신 속도를 향상시킬 수 있다.

Description

지연된 로깅 방법 및 그 장치{Method for deferred logging and apparatus thereof}
도 1은 종래 기술에 따른, DBMS(DataBase Management System)의 로깅 과정을 개괄적으로 나타내는 도면이다.
도 2는 종래 기술에 따른, 로그 레코드의 포맷을 나타내는 데이터 구조이다.
도 3a 및 3b는 종래 기술에 따라, 갱신 작업을 수행하는 경우에 생성되는 로그 레코드를 나타내는 도면이다.
도 4a 및 4b는 본 발명의 일 실시예에 따른, 복수의 로그 레코드를 병합한 결과를 나타내는 도면이다.
도 5는 본 발명의 일 실시예에 따른, 데이터베이스의 로깅 방법을 설명하기 위한 플로우 차트이다.
도 6은 본 발명의 일 실시예에 따른, 상기 도 5의 단계 510을 보다 구체적으로 설명하기 위한 플로우 차트이다.
도 7은 본 발명의 다른 실시예에 따른, 데이터베이스의 로깅 방법을 설명하기 위한 플로우 차트이다.
도 8a 및 8b는 본 발명의 일 실시예에 따른, 로그 엔트리의 포맷을 나타내는 데이터 구조이다.
도 9는 본 발명의 다른 실시예에 따른, 하나의 트랜잭션에 의한 갱신 작업의 예시 동작을 나타내는 도면이다.
도 10은 본 발명의 다른 실시예에 따른, 둘 이상의 트랜잭션에 의한 갱신 작업의 예시 동작을 나타내는 도면이다.
도 11은 본 발명의 다른 실시예에 따른, 갱신 작업의 패턴별 동작 과정을 나타내는 도면이다.
도 12는 본 발명의 다른 실시예에 따른, 상기 도 11의 동작 과정이 모두 종료한 경우에 결과로 생성되는 로그 엔트리를 나타내는 도면이다.
도 13은 본 발명의 다른 실시예에 따른, 로그 엔트리를 생성하는 과정을 나타내는 의사 코드(pseudo-code)이다.
도 14는 본 발명의 다른 실시예에 따른, 트랜잭션이 커밋(commit)되는 과정을 나타내는 의사 코드이다.
도 15는 본 발명의 다른 실시예에 따른, 트랜잭션이 철회(abort)되는 과정을 나타내는 의사 코드이다.
도 16은 본 발명의 다른 실시예에 따른, 데이터 페이지가 플러시(flush)되는 과정을 나타내는 의사 코드이다.
도 17은 본 발명의 또 다른 실시예에 따른, 데이터베이스 로깅 장치를 개괄적으로 나타내는 기능 블록도이다.
도 18은 본 발명의 또 다른 실시예에 따른, 데이터베이스 로깅 장치를 나타내는 기능 블록도이다.
도 19 내지 21은 본 발명에 따른, 갱신된 데이터 페이지의 일 예를 나타내는 도면이다.
도 22는 본 발명에 따른, 데이터베이스의 각 모듈별로 감소된 로그 레코드를 비교 설명하기 도표이다.
본 발명은 데이터베이스의 로깅(logging) 방법에 관한 것으로, 보다 상세하게는 데이터베이스의 갱신 작업에 의한 로그 레코드를 생성함에 있어서 로그 엔트리를 이용하여 로그 사이즈를 감소시키는 로깅 방법 및 장치에 관한 것이다.
데이터베이스 관리시스템(DBMS)을 활용하고자 하는 목적은 데이터를 체계적으로 관리함으로써 응용프로그램을 보다 쉽게 개발하고, 어떠한 상황에서도 데이터를 안전하게 유지, 관리하기 위함이다. 일반적으로 DBMS는 이러한 데이터베이스의 안정성(지속성)을 보장하기 위해, 데이터 변경에 대한 로깅(logging)을 수행한다.
로깅(logging)이란, 발생하는 데이터의 삽입/삭제/변경을 디스크 드라이브와 같이 안전한 저장 매체(stable storage device)에 기록함으로써, 예외 상황 발생시 이를 이용하여 이전의 데이터베이스 상태로 되돌리기 위한 데이터베이스 관리 시스템(DBMS)의 기본 기능이다. DBMS에서 지속성(durability)의 개념은 트랜잭션 처리에서 중요한 특성인 ACID(Atomicity, Consistency, Isolation, Durability) 성질 중 하나로, 이는 트랜잭션이 성공적으로 완료되면 어떠한 시스템 오류에도 트랜잭 션 처리 결과는 데이터베이스에 반영됨을 보장해야 함을 의미한다. 일반적으로 DBMS는 트랜잭션 처리 중 발생하는 데이터베이스의 상태 변화에 대한 내용을 로그로 남기며, 이 로그를 안전한 저장 매체(일반적으로 디스크)에 저장한다. 따라서 로그는 데이터베이스의 상태 변경을 기록함으로써 데이터베이스 상태를 일관성 있게 유지할 수 있도록 지원한다. 단순하게는 모든 트랜잭션의 변경 내역을 디스크의 로그 파일에 기록하면 되지만, 이 경우 트랜잭션 내의 각 연산마다 디스크 입출력(input and output: I/O)를 수반하게 되어 DBMS의 성능이 매우 떨어지게 된다.
도 1은 종래 기술에 따른, DBMS(DataBase Management System)의 로깅 과정을 개괄적으로 나타내는 도면이다.
데이터베이스(DB, 121)는 영구적인 저장 매체인 디스크 드라이브(120)에 특정 영역에서 데이터 파일(Data, 121a)과 로그 파일(Log, 121b)을 함께 포함하고 있다. 응용 프로그램의 실행에 의한 트랜잭션이 갱신 작업을 수행함에 따라, 해당 데이터 파일은 메모리(110) 상에 있는 버퍼(113)로 페이지(page) 단위로 로딩(loading)되고, 메모리(110)상에서 데이터 페이지(111)의 해당 영역(111a)에 갱신이 발생하면, 대응되는 로그 레코드(112b)가 로그 페이지(112)에 기록된다. 이렇게 갱신된 데이터 페이지와 생성된 로그 페이지는 WAL(Write Ahead Log) 프로토콜에 따라 디스크 드라이브(120)의 데이터 파일(121a) 및 로그 파일(121b)로 저장된다.
WAL 프로토콜이란, 미완료된 트랜잭션의 변경 내용이 디스크에 저장될 경우 부작용을 제거하기 위해, 로그 페이지를 먼저 디스크에 저장하고 그 후에 데이터 페이지를 저장하는 절차를 말한다. WAL 프로토콜을 보장하면 시스템 재실행시 예외 상황 이전의 상태를 안전하게 복구할 수 있다.
도 2는 종래 기술에 따른, 로그 레코드의 포맷을 나타내는 데이터 구조이다.
갱신 정보를 포함하고 있는 로그 레코드는 도 2에 도시된 바와 같이, 여러 필드들로 구성된다.
이전 LSN(Log Sequence Number)이란, 특정 트랜잭션이 생성한 이전 로그 레코드의 LSN을 말하는데, 즉 LSN은 로그 레코드의 아이디로서 로그 레코드가 로그 페이지에 기록되는 위치를 의미한다. 따라서 LSN은 로그 페이지의 번호와 로그 페이지 내에서의 오프셋으로 구성된다.
기타, 로그 레코드는 트랜잭션의 ID, 로그 레코드의 종류를 의미하는 타입, 갱신한 데이터 페이지의 번호를 나타내는 페이지 ID, 갱신한 데이터의 길이, 갱신한 데이터의 페이지 내에서의 오프셋, 갱신 전/후의 데이터인 갱신전 이미지 및 갱신후 이미지의 필드로 구성된다.
도 3a 및 3b는 종래 기술에 따라, 갱신 작업을 수행하는 경우에 생성되는 로그 레코드를 나타내는 도면이다.
도 3a를 참조하면, 데이터 페이지1(310)에 대해 두 가지의 갱신 연산이 발생하였음을 알 수 있다. 먼저 데이터 페이지의 오프셋 10에 위치한 "name"(311)이라는 데이터를 "kate"(311a)로 변경하였으며, 또한 오프셋 31에 위치한 "0000"(312)이라는 데이터를 "0021"(312a)로 변경하였다.
이때 로그 레코드1(LR1, 320)를 살펴보면, 갱신전 이미지인 "name"값이 갱신 후 이미지인 "kate"로 변경되었음을 알 수 있고, 로그 레코드2(LR2, 330)를 살펴보면, "0000"값이 "0021"로 변경되었다는 사실을 알 수 있다. 이들 각각의 로그 레코드들(320,330)은 생성됨과 동시에 로그 페이지에 기록된다.
이러한 방식으로 계속적인 갱신이 일어난다면, 로그 페이지에 기록되는 로그 레코드의 수는 갱신의 횟수에 비례하여 증가하게 된다. 이를 도 3b가 나타내고 있다. 도 3b를 참조하면, 앞서 도 3a에서 살펴본 로그 레코드(340,350)에 이어서 "john"과 "0701"로 변경된 로그 레코드(360,370)가 발생하고, 이후에도 기타 다른 갱신 작업으로 인한 로그 레코드(380)가 계속하여 발생한다는 것을 알 수 있다.
이렇듯, 로깅 과정에서 발생하는 로그의 크기는 로깅 방법에 따라 실제 갱신되는 데이터 크기의 수 배에서 수백 배에 달하게 된다. 로그의 크기 증가는 디스크 입출력(I/O)을 유발하여 갱신 연산의 속도를 떨어뜨리고, 디스크의 사용성(utilization)도 떨어뜨린다. 또한, 예외 상황 발생으로 인한 복구시(recovery)에 디스크로부터 읽어서 처리해야 하는 로그의 크기가 커져서 복구 시간 또한 길어지게 된다.
따라서, 본 발명은 상기와 같은 문제점을 해결하기 위하여 안출된 것으로, 본 발명이 이루고자 하는 기술적 과제는 데이터베이스의 갱신 작업에 의한 로그 레코드를 생성함에 있어서 로그 엔트리를 이용하여 로그 사이즈를 감소시키는 로깅 방법 및 장치를 제공하는 것이다.
상기 기술적 과제를 해결하기 위한 본 발명에 의한 로깅 방법은, 데이터베이스의 로깅(logging) 방법에 있어서, 갱신되는 데이터 페이지의 로그 정보를 저장하는 단계와; 상기 데이터 페이지의 갱신 작업이 완료될 때, 상기 저장된 로그 정보를 독출하는 단계와; 상기 독출된 로그 정보를 이용하여 로그 레코드를 생성하는 단계와; 상기 생성된 로그 레코드를 로그 페이지에 기록하는 단계를 포함하는 것을 특징으로 하는 로깅 방법에 의해 달성된다.
또한 상기 로그 정보를 저장하는 단계는, 상기 갱신되는 데이터 페이지의 오프셋(offset) 값을 포함한 로그 엔트리를 생성하는 단계와; 상기 생성된 로그 엔트리에 상기 갱신되는 데이터 페이지의 로그 정보를 기록하는 단계와; 상기 기록된 로그 정보를 이용하여 적어도 하나 이상의 상기 로그 엔트리를 병합하는 단계를 더 포함하는 것이 바람직하다.
상기 병합하는 단계는, 상기 갱신되는 데이터 페이지의 영역과 동일한 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 갱신되는 데이터의 로그 정보를 기록한 로그 엔트리를 상기 동일한 영역에 대하여 기 생성된 로그 엔트리에 합침으로써 병합하는 것이 바람직하며, 또는 상기 병합하는 단계는, 상기 갱신되는 데이터 페이지의 영역과 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 포함한 오프셋 값을 변경함으로써 병합하는 것이 바람직하며, 또는 상기 병합하는 단계는, 상기 갱신되는 데이터 페이지의 영역과 겹치는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 겹치는 영역에 대하여 기 생성된 로그 엔트리가 포함 한 오프셋 값을 변경함으로써 병합하는 것이 바람직하다.
아울러 상기 병합하는 단계는, 상기 데이터 페이지의 갱신 작업이 완료될 때 일괄적으로 수행되는 것이 바람직하고, 상기 갱신 작업이 완료될 때는, 상기 갱신 작업을 수행하는 트랜잭션이 커밋(commit)되거나, 상기 데이터 페이지가 플러시(flush)될 때인 것이 더욱 바람직하다.
상기 생성된 로그 엔트리는, 상기 갱신되는 데이터 페이지 및 상기 갱신 작업을 수행하는 트랜잭션별로 관리되는 것이 바람직하고, 상기 생성된 로그 엔트리는, 상기 로그 엔트리가 포함한 오프셋 값을 기준으로 정렬되는 것이 더욱 바람직하다.
상기 로그 레코드를 생성하는 단계 및 기록하는 단계는, ARIES(Algorithms for Recovery and Isolation Exploiting Semantics) 알고리즘을 사용하고 WAL(Write Ahead Log) 프로토콜을 따르는 것이 바람직하다.
한편, 상기 기술적 과제를 해결하려는 본 발명의 목적은 데이터베이스의 로깅 방법에 있어서, 갱신되는 데이터 페이지의 갱신전 원본 이미지와 동일한 복사본 이미지를 생성하는 단계와; 상기 갱신되는 데이터 페이지에 대한 로그 엔트리를 생성하는 단계와; 상기 생성된 로그 엔트리를 병합하는 단계와; 상기 원본 이미지에 대한 갱신 작업을 수행하는 단계와; 상기 갱신 작업의 완료시에 상기 원본 이미지, 복사본 이미지 및 상기 병합된 로그 엔트리를 이용하여 로그 레코드를 생성하는 단계를 포함하는 것을 특징으로 하는 로깅 방법에 의해서도 달성된다.
상기 병합하는 단계는, 상기 갱신되는 데이터 페이지의 영역과 동일한 영역 에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 생성된 로그 엔트리를 상기 동일한 영역에 대하여 기 생성된 로그 엔트리에 합침으로써 병합하는 것이 바람직하며, 또는 상기 병합하는 단계는, 상기 갱신되는 데이터 페이지의 영역과 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 포함한 오프셋 값을 변경함으로써 병합하는 것이 바람직하며, 또는 상기 병합하는 단계는, 상기 갱신되는 데이터 페이지의 영역과 겹치는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 겹치는 영역에 대하여 기 생성된 로그 엔트리가 포함한 오프셋 값을 변경함으로써 병합하는 것이 바람직하다.
상기 병합하는 단계는, 상기 원본 이미지에 대한 갱신 작업이 완료될 때 일괄적으로 수행되는 것이 바람직하고, 상기 갱신 작업이 완료될 때는, 상기 갱신 작업을 수행하는 트랜잭션이 커밋되거나, 상기 원본 이미지의 데이터 페이지가 플러시 될 때인 것이 더욱 바람직하다.
또한 상기 로깅 방법은 상기 원본 이미지, 복사본 이미지 및 상기 갱신 작업을 수행하는 트랜잭션의 정보를 버퍼 페이지 정보에 등록하는 단계를 더 포함하는 것이 바람직하다.
상기 생성된 로그 엔트리는, 상기 갱신되는 데이터 페이지 및 상기 갱신 작업을 수행하는 트랜잭션별로 관리되는 것이 바람직하며, 상기 생성된 로그 엔트리는, 상기 로그 엔트리가 포함한 오프셋 값을 기준으로 정렬되는 것이 더욱 바람직하다.
또한 상기 로그 엔트리는, 상기 갱신되는 데이터 페이지의 영역의 길이 및 상기 갱신되는 데이터 페이지 내에서 갱신된 영역의 시작 위치를 나타내는 오프셋을 포함하거나, 상기 갱신되는 데이터 페이지 내에서 갱신된 영역의 시작 위치 및 끝 위치를 나타내는 오프셋을 포함하는 자료구조인 것이 바람직하다.
상기 로깅 방법은 상기 갱신 작업을 수행하는 트랜잭션이 복수개이며 동시적으로 수행하는 경우에, 엄격한 2단계 잠금(strict 2-phase locking) 프로토콜을 적용하는 것이 바람직하다.
상기 갱신 작업이 완료될 때 상기 트랜잭션이 커밋되는 경우에, 상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 있다면, 상기 커밋되는 트랜잭션의 각각의 로그 엔트리에 해당하는 상기 원본 이미지의 갱신된 영역을 상기 복사본 이미지의 대응하는 영역에 기록하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 없다면, 상기 복사본 이미지를 삭제하는 단계를 더 포함하는 것이 바람직하며, 상기 갱신 작업이 미완료로 종료되어 상기 트랜잭션이 철회(abort)되는 경우에는, 상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 있다면, 상기 철회된 트랜잭션의 각각의 로그 엔트리에 해당하는 상기 복사본 이미지의 갱신전 영역을 상기 원본 이미지의 대응하는 영역에 기록하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 없다면, 상기 복사본 이미지를 원본 이미지로 갈음하는 단계를 더 포함하는 것이 바람직하다.
또는 상기 갱신 작업이 완료될 때 상기 트랜잭션이 커밋되는 경우에, 상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 있다면, 상기 버퍼 페이지 정보에 상기 트랜잭션이 커밋되었음을 기록하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 없다면, 상기 복사본 이미지를 삭제하는 단계를 더 포함하는 것이 바람직하며, 상기 갱신 작업이 미완료로 종료되어 상기 트랜잭션이 철회(abort)되는 경우에는, 상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하고, 상기 버퍼 페이지 정보를 참조하여 커밋을 수행한 상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션 또는 커밋을 수행한 다른 트랜잭션이 있다면, 상기 철회된 트랜잭션의 각각의 로그 엔트리에 해당하는 상기 복사본 이미지의 갱신전 영역을 상기 원본 이미지의 대응하는 영역에 기록하는 단계와; 상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션 및 커밋을 수행한 다른 트랜잭션이 없다면, 상기 복사본 이미지를 원본 이미지로 갈음하는 단계를 더 포함하는 것이 바람직하다.
상기 갱신 작업이 완료될 때 상기 원본 이미지의 데이터 페이지가 플러시 되는 경우에, 상기 플러시 되는 데이터 페이지의 모든 상기 로그 엔트리를 로그 레코드로 생성하고 상기 복사본 이미지를 삭제하는 단계를 더 포함하는 것이 바람직하다.
본 발명의 다른 분야에 따르면, 상기 목적은 데이터베이스의 로깅 장치에 있어서, 갱신되는 데이터 페이지의 로그 정보를 저장하는 로그 저장부와; 상기 데이 터 페이지의 갱신 작업이 완료될 때, 상기 로그 저장부에 저장된 로그 정보를 독출하는 로그 독출부와; 상기 독출된 로그 정보를 이용하여 로그 레코드를 생성하고, 상기 생성된 로그 레코드를 로그 페이지에 기록하는 로그 제어부를 포함하는 것을 특징으로 하는 로깅 장치에 의해서도 달성된다.
한편, 상기 목적은 데이터베이스의 로깅 장치에 있어서, 데이터 페이지의 갱신 작업을 수행하는 트랜잭션을 관리하는 트랜잭션 제어부와; 상기 트랜잭션 제어부가 관리하는 트랜잭션의 갱신 작업에 따라 생성된 로그 정보를 병합하여 로그 레코드를 생성하고, 상기 생성된 로그 레코드를 로그 페이지에 기록하는 로그 제어부와; 상기 갱신 작업이 수행된 데이터 페이지 및 로그 페이지를 저장 매체로 입출력하도록 관리하는 버퍼 제어부를 포함하는 것을 특징으로 로깅 장치에 의해서도 달성된다.
상기 로그 제어부는, 상기 갱신 작업이 수행되는 데이터 페이지의 갱신전 원본 이미지와 동일한 복사본 이미지를 저장하는 제1 저장부와; 상기 트랜잭션 제어부가 관리하는 트랜잭션의 갱신 작업에 따라 생성된 로그 엔트리를 저장하는 제2 저장부와; 상기 제2 저장부에 저장된 적어도 하나 이상의 상기 로그 엔트리를 병합하는 로그 병합부와; 상기 갱신 작업의 완료시에 상기 원본 이미지, 복사본 이미지 및 상기 병합된 로그 엔트리를 이용하여 로그 레코드를 생성하고, 상기 생성된 로그 레코드를 로그 페이지에 기록하는 로그 출력부를 더 포함하는 것이 바람직하다.
상기 버퍼 제어부는, 상기 원본 이미지, 복사본 이미지 및 상기 갱신 작업을 수행하는 트랜잭션의 정보를 등록한 버퍼 페이지 정보를 관리하는 것이 바람직하 다.
나아가, 상기 목적은 상기 기재된 로깅 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록 매체에 의해서도 달성된다.
이하 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 대해 상세히 설명한다.
도 4a 및 4b는 본 발명의 일 실시예에 따른, 복수의 로그 레코드를 병합한 결과를 나타내는 도면이다.
도 4a를 참조하면, 화살표 좌측에 3개의 로그 레코드(410 내지 430)를 볼 수 있다. 3개의 로그 레코드(410 내지 430)는 동일한 데이터 페이지에 대하여 동일한 오프셋 값을 갖는, 즉 동일한 영역의 데이터에 대한 갱신으로 발생한 로그 레코드임을 알 수 있다. 이러한 로그 레코드는 비평준화된 갱신 작업에 의해 빈번하게 나타나는 경우로서 예를 들면, 동일한 사용자의 방문 횟수, 동일한 음악 파일의 청취 횟수와 같이 갱신이 자주 일어나는 데이터 영역인 경우이다. 이러한 경우에 최초 이미지인 "0"과 최후 이미지인 "3"의 값만 알고 있으면, 화살표 우측의 로그 레코드(440)와 같이 단 하나의 로그 레코드만으로 해당 트랜잭션의 지속성을 유지할 수 있다는 데서 본 발명의 개념은 시작된다.
도 4b를 참조하면, 화살표 좌측의 3개의 로그 레코드(450 내지 470)의 경우는 동일한 영역의 데이터를 갱신하는 것은 아니나, 오프셋 값(20,24,28)을 기준으로 해당 갱신 영역의 데이터 길이(4바이트)를 비교하여 보면, 갱신되는 데이터("0") 영역이 서로 이웃하고 있음을 알 수 있다. 따라서 화살표 우측의 로그 레 코드(480)과 같이, 오프셋 값 20에서부터 12바이트만큼의 데이터 "000"을 "111"로 갱신하는 하나의 로그 레코드를 도출할 수 있다.
도 5는 본 발명의 일 실시예에 따른, 데이터베이스의 로깅 방법을 설명하기 위한 플로우 차트이다.
먼저, 갱신되는 데이터 페이지의 로그 정보를 저장한다(단계 510). 즉, 갱신이 일어날 때마다, 곧바로 로그 레코드로 만들어 로그 페이지에 기록하지 않고 갱신되는 데이터 페이지의 로그 정보(트랜잭션 ID, 종류, 페이지 ID, 갱신 데이터의 길이, 오프셋 값, 갱신 전/후 이미지 등)를 일단 저장한다. 그런 뒤에 갱신 작업이 완료되면, 저장된 로그 정보를 독출한다(단계 520). 즉, 갱신 작업을 수행하는 트랜잭션이 커밋(commit)되거나, 갱신되는 데이터 페이지가 플러시(flush)될 때 저장된 로그 정보를 독출한다. 독출된 로그 정보를 이용하여 로그 레코드를 생성하고(단계 530), 생성된 로그 레코드를 로그 페이지에 기록한다(단계 540).
로그 레코드를 생성하고 기록하는 단계는 ARIES(Algorithms for Recovery and Isolation Exploiting Semantics) 알고리즘을 사용하고, WAL(Write Ahead Log) 프로토콜을 따르는 것이 바람직하다. 따라서, 데이터 페이지의 갱신된 이미지 부분에 대해서만 로그 레코드가 생성되고, 로그 페이지는 데이터 페이지보다 앞서 디스크에 저장된다.
갱신되는 데이터 페이지의 로그 정보를 저장하는 단계(단계 510)에 대한 구체적인 동작 과정을 이하에서 살펴본다.
도 6은 본 발명의 일 실시예에 따른, 상기 도 5의 단계 510을 보다 구체적으 로 설명하기 위한 플로우 차트이다.
도 6을 참조하면, 로그 정보를 저장하는 단계는 먼저 데이터 페이지의 오프셋 값을 포함하는 로그 엔트리를 생성하고(단계 610), 생성된 로그 엔트리에 갱신되는 데이터 페이지의 로그 정보를 기록한 뒤(단계 620), 기록된 로그 정보를 이용하여 적어도 하나 이상의 로그 엔트리를 서로 병합한다.
상기 병합하는 과정은 응용 프로그램에서 흔히 발생할 수 있는 3가지 경우로 나누어서 살펴 볼 수 있다.
먼저, 동일한 영역을 반복 갱신하는 경우이다. 동일한 트랜잭션이 특정 영역의 데이터를 반복해서 갱신하는 경우, 종전 방식은 매번 같은 영역에 대한 갱신전 이미지와 갱신후 이미지의 로그 레코드를 생성하여 기록한다. 이 경우, 로그 정보에서 필요한 정보는 최초의 갱신으로 생성된 로그 레코드의 이전 이미지, 즉 갱신전 이미지와 최후의 갱신으로 생성된 로그 레코드의 이후 이미지, 즉 갱신후 이미지이다. 중간 과정의 갱신으로 인해 생성된 이미지 변경에 대한 정보는 불필요한 정보라고 간주할 수 있다.
따라서, 갱신되는 데이터 페이지의 영역과 동일한 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에는, 갱신되는 데이터의 로그 정보를 기록한 로그 엔트리를 기 생성된 동일한 영역의 로그 엔트리에 합쳐서 병합할 수 있다. 동일한 영역은 페이지 ID, 트랜잭션 ID, 데이터 길이, 오프셋 값 등을 기준을 찾는 것이 바람직하나, 데이터 페이지의 영역을 나타내는 다른 파라미터 값을 이용할 수도 있다.
두 번째는 이웃하는 영역을 갱신하는 경우이다. 동일한 트랜잭션이 이웃하고 있는 영역의 데이터들을 갱신하는 경우, 즉 오프셋 값을 기준으로 이웃하는 경우에 종래에는 각 갱신마다 로그 레코드가 별도로 생성되나, 이 경우 로그 레코드에 있는 갱신후 이미지들을 하나로 병합할 수 있으면 하나의 로그 레코드만 생성해도 된다.
따라서, 갱신되는 데이터 페이지의 영역과 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에는, 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 포함하고 있는 오프셋 값을 변경함으로써 병합할 수 있다. 이웃하는 영역에 대한 판단은 페이지 ID, 오프셋 값 및 데이터 길이 등을 통해 계산할 수 있으며, 데이터 페이지상에서 특정 데이터의 영역의 시작 위치와 마지막 위치를 계산할 수만 있다면 다른 계산 방식을 이용할 수도 있을 것이다.
세 번째는 한번 이상 갱신한 영역을 포함하여 갱신하는 경우이다. 동일한 영역을 갱신하는 경우와 이웃하고 있는 영역을 갱신하는 경우를 섞어 놓은 경우로서, 한번 이상 갱신한 영역을 포함하여 갱신하는 경우에 종래에는 각 갱신에 해당하는 별개의 로그 레코드가 생성되나, 이 경우 겹치는 영역에 대해 중간 갱신 과정에서 발생하는 이미지들은 불필요하고, 겹치지 않는 영역의 이미지를 병합할 수 있다면 하나의 로그 레코드로 만들 수 있다.
따라서, 갱신되는 데이터 페이지의 영역과 겹치는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에는, 겹치는 영역에 대하여 기 생성된 로그 엔트리가 포함하고 있는 오프셋 값을 변경함으로써 서로 병합할 수 있다. 이때, 앞서 살펴 본 첫 번째 경우와 두 번째 경우와 같은 방식으로 겹치는 영역을 찾아낼 수 있다.
이상 살펴본 병합 과정은 갱신 작업에 따라 로그 엔트리가 생성될 때마다 수행될 수도 있고, 데이터 페이지의 갱신 작업이 완료될 때 일괄적으로 동작할 수도 있다. 갱신 작업이 완료되는 경우는, 일반적으로 갱신을 수행하는 트랜잭션이 커밋되거나 데이터 페이지가 플러시 되는 경우를 말한다. 기타 다른 이벤트로 인해, 트랜잭션의 갱신 내용이 데이터베이스에 반영되어야 하거나, 메모리 버퍼의 교체 정책에 의해 버퍼 페이지가 디스크로 입출력되는 경우도 포함될 수 있다.
기존의 로깅 방식을 이용하면 위와 같은 경우에 로그 파일의 크기를 줄이기가 어렵다. 왜냐하면 응용 프로그램에서 위와 같은 경우가 발생할 때 특정 패턴이 연속되어 발생하지는 않기 때문이다. 다시 말해, 동일한 영역을 갱신하는 연산이 발생하더라도 이러한 연산만 연속해서 발생하는 것이 아니라, 다른 연산이 중간 중간에 끼어들어 발생할 수 있다. 따라서 로그 페이지상에서 중간 중간에 끼어들어 있는 다른 연산에 의해 생성된 로그 레코드에 의해, 어떤 로그 레코드들이 동일한 영역을 갱신하고 있는지, 이웃해 있는지, 아니면 갱신한 영역을 포함하는지를 판단하기 어렵다.
설사 이러한 로그 레코드들을 찾아낸다 하더라도, 한번 로그 페이지에 기록된 로그 레코드들을 병합하기는 여전히 어렵다. 왜냐하면 병합을 하기 위해서는 로그 레코드의 LSN을 변경하여야 하므로, 이를 처리해야 하는 문제가 다시 발생하기 때문이며, 또한 이미 기록된 로그 레코드들을 전부 다시 써야하는 메모리 복사 비용이 수반되어야 하는 등의 오버헤드가 발생한다.
그러나 본 발명에 실시예에 따르면, 갱신되는 데이터 페이지의 로그 정보를 저장하는 단계에서, 데이터 페이지의 오프셋 값을 포함하는 로그 엔트리가 데이터 페이지별로 관리되고, 갱신 작업을 수행하는 트랜잭션별로도 관리되며 이때, 로그 엔트리는 오프셋 값을 기준으로 정렬되어 리스트를 구성한다. 따라서 갱신된 데이터에 대한 로그 레코드는 갱신 시점에 바로 생성되어 로그 페이지에 기록되지 않고, 로그 레코드의 LSN이 곧바로 확정되어 향후 변경하기 어려워지는 현상도 발생하지 않는다.
도 7은 본 발명의 다른 실시예에 따른, 데이터베이스의 로깅 방법을 설명하기 위한 플로우 차트이다.
단계별 동작 과정을 살펴보면, 먼저 갱신이 일어나면 갱신되는 데이터 페이지의 갱신전 이미지(원본 이미지)와 동일한 이미지(복사본 이미지)를 생성한다(단계 710). 복사본 이미지는 로그 레코드가 생성될 때까지 일시적으로 메모리에 저장된다. 그런 다음, 갱신되는 데이터 페이지에 대한 로그 엔트리를 생성하고(단계 720), 생성된 로그 엔트리를 서로 병합한다(단계 730). 병합하는 패턴은 앞서 살펴본 방식과 같이 수행될 수 있다. 갱신 작업에 해당하는 변경사항을 원본 이미지에 반영하고(단계 740), 갱신 작업이 완료되면 병합된 로그 엔트리를 이용하여 로그 레코드를 생성한다(단계 750). 이때, 로그 레코드의 갱신전 이미지의 데이터는 상기 복사본 이미지에서 가져오고, 갱신후 이미지의 데이터는 상기 원본 이미지에서 가져온다.
병합하는 과정은 갱신 작업에 따라 로그 엔트리가 생성될 때마다 수행될 수 도 있고, 일반적으로 갱신을 수행하는 트랜잭션이 커밋되거나 데이터 페이지가 플러시 되는 등의 데이터 페이지의 갱신 작업이 완료될 때 일괄적으로 동작할 수도 있다.
또한 버퍼 페이지 정보(buffer page info.)에 원본 이미지, 복사본 이미지 및 갱신 작업을 수행하는 트랜잭션의 정보를 등록하는 단계를 더 포함할 수 있는데, 버퍼 페이지 정보는 원본 이미지, 복사본 이미지 및 갱신 작업을 수행하는 트랜잭션의 관계를 관리하며 갱신되는 데이터 페이지의 페이지 ID, 복사본 이미지의 위치 포인터, 갱신 작업을 수행하는 트랜잭션의 ID, 트랜잭션의 커밋 수행여부 등의 정보를 저장한다. 갱신으로 인해 생성된 로그 엔트리는 갱신된 페이지들과 함께 버퍼 페이지 정보에 의해 메모리상으로 관리되다가 갱신된 페이지가 버퍼교체 정책에 의해 디스크로 플러시 되는 시점이나 트랜잭션이 커밋하는 시점에 로그 레코드가 생성되어 로그 페이지에 기록된다.
이러한 로깅 방법에 의해 트랜잭션의 시작과 종료시점 사이에 생성된 로그 정보는 데이터 페이지 내에서 갱신이 일어난 순서와 상관없이 트랜잭션이 커밋할 때 로그 레코드로 생성되어 로그 페이지에 기록되고, 디스크에 플러시 되는 것이 보장되므로 복구(recovery)에 전혀 문제가 없다.
도 8a 및 8b는 본 발명의 일 실시예에 따른, 로그 엔트리의 포맷을 나타내는 데이터 구조이다.
앞서 살펴본 바와 같이, 갱신이 발생할 때 곧 바로 로그 레코드를 생성하는 대신 로그 엔트리를 생성하여 메모리에 유지한다. 로그 엔트리는 아래와 같은 필 드를 가진다.
길이(length) : 갱신한 데이터 영역의 길이.
오프셋(offset) : 페이지 내에서 갱신한 영역의 시작 위치 오프셋 값.
다음 로그 엔트리(next) : 다음 로그 엔트리를 가리키는 포인터(ptr).
시작 위치 오프셋(soffset) : 페이지 내에서 갱신한 영역의 시작 위치를 나타내는 오프셋 값.
끝 위치 오프셋(eoffset) : 페이지 내에서 갱신한 영역의 끝 위치를 나타내는 오프셋 값.
구현하는 상황에 맞게 도 8a와 도 8b 가운데 하나를 선택하여 사용할 수 있다.
여기서 중요한 것은 로그 엔트리가 관리하는 정보는 "위치" 개념이라는 점이다. 즉, 로그 엔트리는 갱신되는 데이터 페이지 상에서 갱신으로 인해 일어나는 변경 상황을 모두 위치 개념으로 저장한다. 이는 로그 엔트리의 병합과정에 있어서 필수적인 정보이며, 이로 인해 로그 페이지에 기록되는 로그 레코드의 수를 급격히 감소시킬 수 있게 된다.
도 9는 본 발명의 다른 실시예에 따른, 하나의 트랜잭션에 의한 갱신 작업의 예시 동작을 나타내는 도면이다.
도 9를 참조하면, 페이지1(page1, 910)은 데이터 페이지의 원본 이미지이며, 페이지1'(page1', 920)는 복사본 이미지이다. 그외, 버퍼 페이지 정보(page info, 930)와 하나의 트랜잭션(T1, 940)과 두 개의 로그 엔트리(950, 960)가 나타나있다. 갱신이 발생하면 갱신된 페이지에 대한 복사본 이미지(page1', 910)을 만든다. 그리고 어떤 트랜잭션(T1, 940)이 갱신을 수행했는지 알기 위해 버퍼 페이지 정보(page info, 930)는 트랜잭션(T1, 940) 아이디를 관리한다. 트랜잭션(T1, 940)은 해당 페이지(page1, 910)를 갱신한 정보를 로그 엔트리의 리스트(950, 960)로 만들고 로그 엔트리의 리스트(950, 960)는 오프셋을 기준으로 정렬하여 메모리 상에 유지된다. 즉, 도 9의 동작 과정을 시간순으로 정리하면 아래와 같다.
i) 트랜잭션 T1(940)이 페이지1(910)의 오프셋 10에서부터 4바이트 길이의 영역을 갱신한다. 페이지1(910)에 대해 처음으로 갱신이 발생하는 것이다. 따라서, 페이지1(910)을 갱신하기에 앞서서 복사본 페이지1'(920)를 생성한다. 트랜잭션 T1(940)의 ID를 버퍼 페이지 정보(930)에 등록하고, 갱신된 정보를 로그 엔트리(950)로 만들어서 트랜잭션 T1이 갱신하였다는 것을 알 수 있도록 표시를 해둔다. 그런 다음 원본 이미지인 페이지1(910)에 대해 갱신하려는 이미지로 갱신을 수행한다.
ii) 트랜잭션 T1(940)이 페이지1(910)의 오프셋 31에서부터 4바이트 길이의 영역을 갱신한다. 이때, 로그 엔트리(960)를 생성한 후, 오프셋 순서로 정렬하여 로그 엔트리 리스트에 넣고, 페이지1(910)에 대해 갱신하려는 이미지로 갱신을 수행한다. 이렇게 생성된 로그 엔트리들(950, 960)은 메모리 상에만 유지되고 있는 것이지 로그 페이지에 로그 레코드로 기록되어 있는 것이 아니다.
iii) 페이지1(910)이 버퍼 교체정책에 의해 대상 페이지(victim)로 선정되어 디스크로 플러시된다(또는 트랜잭션 T1이 커밋을 수행한다). 해당 페이지(여기서 는 페이지1(910))에 대해 존재하는 로그 엔트리들(950, 960) 또는 커밋을 수행한 트랜잭션(여기서는 T1(940))이 생성한 로그엔트리들(950, 960) 각각을 로그 레코드로 만들어서 로그 페이지에 기록한다.
도 10은 본 발명의 다른 실시예에 따른, 둘 이상의 트랜잭션에 의한 갱신 작업의 예시 동작을 나타내는 도면이다.
도 10에서 두 개의 트랜잭션 T1(1040), T5(1070)가 페이지1(1010)의 서로 다른 영역을 갱신하고, 그 갱신한 정보가 로그 엔트리(1050,1060,1080,1090)로 생성되어 해당 트랜잭션 T1, T5와 각각 연결되어 관리된다. 도 9의 경우와 달라진 것은 복수의 트랜잭션별로 로그 엔트리 리스트가 관리된다는 것이다.
이때 두 개 이상의 트랜잭션이 동시에 동작하는 경우에, 엄격한 2단계 잠금 프로토콜(strict 2PL(Phase Locking) protocol)을 따른다. 따라서, 엄격한 2단계 잠금을 준수하므로 2개 이상의 활성화된 트랜잭션이 동일한 영역을 갱신하는 상황은 발생하지 않는다.
잠금(locking) 프로토콜이란, DBMS가 직렬, 복구 가능한 스케줄만을 허용하게 해주는 규칙이다. 공용(shared)잠금, 전용(exclusive)잠금이 있는데, 엄격한 2단계 잠금은 다음과 같은 규칙을 따른다. 첫 번째 규칙은 트랜잭션 T가 객체를 읽기(쓰기)를 원하면 먼저 그 객체에 대한 공용(전용)잠금을 요구한다는 것이고, 두 번째 규칙은 트랜잭션이 소유한 모든 잠금은 트랜잭션이 완료될 때 해제한다는 것이다. 잠금 요구 및 획득의 규칙에 의하면, 어떤 트랜잭션에 의해 공용 잠금이 걸린 객체에 다른 트랜잭션이 공용 잠금을 요구하면 획득되나, 전용 잠금을 요구하면 대기해야 한다. 또, 어떤 트랜잭션에 의해 전용 잠금이 걸린 객체에 다른 트랜잭션이 어떠한 잠금을 요구하면 대기해야 한다. 그러나 자신이 이미 전용 잠금을 획득한 객체는 바로 읽을 수 있다.
도 11은 본 발명의 다른 실시예에 따른, 갱신 작업의 패턴별 동작 과정을 나타내는 도면이며, 도 12는 도 11의 동작 과정이 모두 종료한 경우에 결과로 생성되는 로그 엔트리를 나타내는 도면이다.
도 11을 참조하여 설정된 상황을 개략적으로 살펴보면, 트랜잭션 T1(1140)이 페이지1(1110)의 오프셋 10에서 4바이트만큼을 "name"에서 "kate"로, 오프셋 31에서 4바이트만큼 "0000"에서 "0021"로 갱신하였다. 페이지1(1110)의 복사본 페이지1'(1120)과 두 개의 로그 엔트리(1150, 1160)가 생성된 상태이다.
이하, 도 11에 일어나는 갱신 작업의 과정을 동그라미로 표시된 숫자(①~⑥)의 순서로 설명한다.
① "kate"를 "john"으로 갱신하는 경우이다. 즉, 동일한 영역을 갱신하는 경우이므로 해당하는 로그 엔트리(1150)가 이미 생성되어 있는 상태이다. 이때, 원본 페이지인 페이지1(1110)에서 갱신후 이미지인 "john"으로 변경하기만 하면 된다. 즉, 새로운 로그 엔트리가 기 생성된 로그 엔트리(1150)에 합쳐지는 결과가 되고 새로이 로그 엔트리를 추가할 필요가 없다.
② "0005"를 "0006"으로 갱신하는 경우이다. 오프셋 35에서 4바이트를 갱신하는데, 이것은 기존의 갱신영역과 이웃하는 영역이다. 이 경우는 두 번째 로그 엔트리(1160)의 갱신이미지의 끝나는 위치가 지금 갱신하는 이미지와 이웃한다는 것을 파악하여, 이웃하는 영역의 길이만큼 로그 엔트리(1160)의 길이 필드를 8로 변경(③) 하면 된다.
④ 페이지1(1110)의 오프셋 14에서 31까지 갱신하는 경우다. 이 경우는 기존의 2개의 갱신영역 사이에 위치하여 이웃하는 영역을 갱신하는 경우다. 이 경우는 기존의 로그 엔트리 중에서 두 번째 로그 엔트리(1160)가 삭제되고, 첫 번째 로그 엔트리(1150)의 길이 필드가 4에서 29로 갱신되고, 갱신 이미지가 페이지1(1110)에 기록되면 된다.
⑤,⑥ 기존에 갱신한 영역을 포함하여 갱신하는 경우다. ④와 유사한 식으로 처리를 수행한다.
①~⑥까지를 수행하고 나면, 도 12와 같이 단 하나의 로그 엔트리(1250)만 생성된다. 따라서, 최초 이미지(복사본 이미지)를 참고해 보면 총 8번의 갱신 작업이 일어났음에도 로그 엔트리는 1개로 병합되었음을 알 수 있다. 따라서, 트랜잭션이 커밋되거나 페이지가 플러시 될때, 로그 레코드 역시 1개만이 생성되어 기록된다.
도 13은 본 발명의 다른 실시예에 따른, 로그 엔트리를 생성하는 과정을 나타내는 의사 코드(pseudo-code)이다. 작업 순서의 앞,뒤가 바뀜으로써, 최종 결과가 달라지지 않는 한, 앞으로 설명하는 각 동작 단계의 선,후는 바뀌어 수행될 수 있다.
로그 엔트리를 생성하는 과정을 살펴보면, 만약 페이지의 첫 로그 엔트리인 경우에는 페이지 복사본 이미지가 생성되어야 한다. 그리고 로그 엔트리를 생성하 여 오프셋 값을 기준으로 정렬하여 리스트에 추가한다. 오프셋 값을 참고하여 병합 패턴에 따라 로그 엔트리를 서로 병합한다. 마지막으로 페이지의 원본 이미지를 갱신후 이미지(after image)로 갱신한다.
도 14는 본 발명의 다른 실시예에 따른, 트랜잭션(txn)이 커밋(commit)되는 과정을 나타내는 의사 코드이다.
트랜잭션이 커밋될 때의 로깅 작업을 살펴보면, 커밋한 트랜잭션이 갱신한 로그 엔트리가 있는 페이지가 있다면 그러한 페이지 모두에 대하여 아래의 작업이 수행된다. 먼저, 해당 트랜잭션의 로그 엔트리를 읽고, 로그 레코드를 생성한다. 로그 레코드에는 기본적으로 갱신전/후의 이미지가 필요하다. 그리고, 페이지에 다른 트랜잭션의 로그 엔트리가 존재한다면, 커밋된 트랜잭션이 갱신한 영역이 다른 트랜잭션의 갱신 중에 철회되지 않도록 하기 위하여, 트랜잭션이 갱신한 영역의 갱신후 이미지를 페이지의 복사본 이미지에 기록한다. 이는 커밋된 트랜잭션이 갱신한 결과는 반드시 데이터베이스에 반영되어야 한다는 DBMS의 지속성(durability)의 개념을 준수하기 위함이다. 따라서, 나중에 발생할지도 모르는 다른 트랜잭션의 철회 상황에 대하여, 현재 커밋된 트랜잭션의 갱신 영역의 데이터는 페이지의 복사본 이미지에 기록되므로 안전하게 유지될 수가 있다.
또는, 선택적으로 커밋된 사실을 버퍼 페이지 정보에 기록하여, 다른 트랜잭션의 철회 상황에 대비할 수도 있다. 이때는, 이러한 커밋 단계의 동작과 대응되게 철회 단계에서 페이지에 커밋한 다른 트랜잭션이 있는지를 확인하는 절차가 부가되어야 한다.
이렇게 다른 트랜잭션에 의한 철회시에 필요한 예방(prevention) 작업을 수행한 후, 생성된 로그 레코드를 로그 페이지에 기록하고, 읽은 로그 엔트리는 삭제한다.
다음으로 더 이상 페이지 내에 다른 트랜잭션의 로그 엔트리가 없다면, 즉 현재 커밋되는 트랜잭션이 유일한 트랜잭션이라면 더 이상 페이지의 복사본 이미지는 필요하지 않으므로 이를 삭제한다.
도 15는 본 발명의 다른 실시예에 따른, 트랜잭션이 철회(abort)되는 과정을 나타내는 의사 코드이다.
트랜잭션의 미완료란, DBMS에 의해 내부적인 이유로 철회되어 자동으로 재시작되는 경우나 트랜잭션 수행중에 일어나는 시스템 장애, 트랜잭션의 특정 명령이 잘못된 값을 읽는 경우나 디스크에 접근할 수 없는 경우와 같은 예외 상황 등을 일컫는다.
철회 과정시에, 페이지 내에 다른 트랜잭션의 로그 엔트리가 없다면, 즉 철회하는 트랜잭션이 해당 페이지에서 유일한 트랜잭션이라면, 페이지의 복사본 이미지를 원본 이미지로 갈음하고, 원본 이미지는 삭제하면 간단할 것이다. 그러나, 페이지의 다른 트랜잭션이 로그 엔트리를 가지고 있다면, 철회하는 트랜잭션은 자신의 로그 엔트리를 읽고 각각의 해당하는 갱신전 이미지 영역만을 복원하여야 한다.
앞서 살펴본 바와 같이, 선택적으로 버퍼 페이지 정보에 다른 트랜잭션의 커밋 유무를 나타내는 정보가 기록되어 있다면, 이러한 정보를 활용할 수 있다. 즉, 해당 페이지에 커밋한 다른 트랜잭션이 있다는 것을 버퍼 페이지 정보로부터 알 수 있는 경우에, 철회하는 트랜잭션은 자신의 로그 엔트리를 읽고 각각의 해당하는 갱신전 이미지 영역만을 복원할 수 있는 것이다.
도 16은 본 발명의 다른 실시예에 따른, 데이터 페이지가 플러시(flush)되는 과정을 나타내는 의사 코드이다.
버퍼 교체정책에 의해 페이지가 디스크로 플러시 될 때, 해당 페이지의 모든 로그 엔트리들을 로그 레코드로 만들어서 로그 페이지에 기록한다. 아울러, 페이지의 복사본 이미지는 삭제하면 된다.
도 17은 본 발명의 또 다른 실시예에 따른, 데이터베이스 로깅 장치를 개괄적으로 나타내는 기능 블록도이다.
도 17은 크게 로그 저장부(1710), 로그 독출부(1720) 및 로그 제어부(1730)을 포함한다. 로그 저장부(1710)는 갱신되는 데이터 페이지의 로그 정보를 저장하는 기능을 수행하고, 저장된 로그 정보는 데이터 페이지의 갱신 작업이 완료될 때 비로소 로그 독출부(1720)로 전달된다. 이렇게 독출된 로그 정보는 로그 제어부(1730)에 의해 로그 레코드로 생성되고, 로그 페이지에 기록된다.
도 18은 본 발명의 또 다른 실시예에 따른, 데이터베이스 로깅 장치를 나타내는 기능 블록도이다.
각 장치별 기능을 살펴보면, 트랜잭션 제어부(1810)는 응용 프로그램에 의해 데이터 페이지의 갱신 작업을 수행하는 트랙잭션들을 관리한다.
버퍼 제어부(1830)는 저장 매체로부터 디스크 입출력(I/O) 작업을 관리하여, 갱신된 데이터 페이지 및 로그 레코드가 기록된 로그 페이지를 저장 매체에 저장하거나 새로운 페이지를 저장 매체로부터 판독하는 작업을 수행한다. 즉, 버퍼 교체 정책에 의해 플러시 작업을 담당한다. 또한 버퍼 제어부(1830)는 원본 이미지, 복사본 이미지 및 갱신 작업을 수행하는 트랜잭션의 정보를 등록하고 있는 버퍼 페이지 정보를 관리한다. 상기 버퍼 페이지 정보에는 갱신되는 데이터 페이지의 페이지 ID, 복사본 이미지의 위치 포인터, 갱신 작업을 수행하는 트랜잭션의 ID, 트랜잭션의 커밋 수행여부 등이 등록되어 있을 수 있다.
로그 제어부(1820)는 트랜잭션 제어부(1810)가 수행하는 갱신 작업에 따라 생성된 로그 정보를 병합하여 로그 레코드를 생성하고, 이를 로그 페이지에 기록하는 역할을 수행하는데, 로그 제어부(1820)는 제1 저장부(1824), 제2 저장부(1823), 로그 병합부(1821) 및 로그 출력부(1822)를 더 포함할 수 있다.
제1 저장부(1824)에는 갱신이 발생하는 데이터 페이지의 복사본 이미지를 저장하는데, 복사본 이미지는 갱신이 반영되기 전의 원본 이미지와 동일한 데이터를 포함하고 있다.
제2 저장부(1823)는 트랜잭션 제어부(1810)에 의해 관리되는 트랜잭션의 갱신 작업에 의해 생성된 로그 엔트리를 리스트 형식으로 저장한다. 상기 살펴본 바와 같이, 로그 엔트리는 갱신되는 데이터 페이지 및 트랜잭션별로 관리되고, 오프셋 값을 기준으로 정렬된다.
로그 병합부(1821)는 이렇게 정렬되어 관리되는 로그 엔트리를 이용하여 제2 저장부(1823)에 저장된 상기 로그 엔트리를 병합하여 총 로그 엔트리 수를 감소시 킨다. 병합하는 작업은 앞서 설명한 갱신 패턴에 따라 수행된다.
로그 출력부(1822)는 갱신 작업이 완료되면, 로그 레코드를 작성되어 이를 로그 페이지에 기록한다. 갱신된 데이터 영역은 반드시 데이터베이스에 반영되어 일관성 및 지속성을 유지해야하기 때문이다. 이때, 로그 출력부(1822)는 제1 저장부(1824)에 저장되어 있는 복사본 이미지와 제2 저장부(1823)에 저장되어 있는 병합된 로그 엔트리를 이용하여 로그 레코드를 생성하여 로그 페이지에 기록한다. 로그 레코드는 위에서 설명한 ARIES 알고리즘에 따른 데이터 포맷에 맞추어 갱신 전/후의 이미지와 이에 대한 기타 필요 정보를 포함한다. 갱신전 이미지는 제1 저장부(1824)에 저장된 복사본 이미지이며, 갱신후 이미지는 현재 데이터 페이지의 이미지이고, 갱신된 영역에 대한 오프셋 정보는 제2 저장부(1823)에 저장된 로그 엔트리를 통해 알 수 있다.
도 19 내지 21은 본 발명에 따른, 갱신된 데이터 페이지의 일 예를 나타내는 도면이다.
도 19를 참조하면, 1 부터 12까지의 숫자는 갱신이 일어난 횟수 및 해당 데이터 영역을 의미한다. 종래 방식에 의하면, 도 19와 같은 갱신 작업에 의해 생성되는 로그 레코드의 수는 갱신 횟수에 비례하여 12개의 로그 레코드가 생성되고 각각의 로그 레코드는 LSN을 할당받아 로그 페이지에 기록된다. 그러나, 본 발명에 따르면 이와 같은 경우에도 갱신 영역 (1,5), (6,2,7,8,11), (4,9), (10,12)는 서로 이웃한 영역이므로 총 로그 레코드는 (1,5), (3), (6,2,7,8,11), (4,9), (10,12)에 대한 5개만이 생성된다. 아울러 이미 갱신된 영역과 동일한 영역에 또 다른 갱신이 발생한다 하더라도 로그 레코드는 추가로 발생하지 않는다.
도 20을 참조하면, 힙파일(heap file)과 B-트리(b-tree) 방식을 이용한 데이터베이스의 예에서, 갱신 작업의 패턴은 그림에서 볼 수 있듯이 1,2,3,4...의 순서로 양 가장자리에서 서로 마주보는 방향으로 일어난다. 이러한 패턴의 갱신 작업에 있어서, 본 발명에 따른 로깅 방식을 적용하면 단지 2개의 로그 레코드만이 생성되고, 만약 갱신 작업이 계속적으로 수행되어 도 20에서 가운데 지점에서 서로 만나는 경우에는 로그 레코드는 1개만이 생성될 것이다.
도 21을 참조하면, 카탈로그 매니저(CatalogMgr)의 갱신 패턴이 나타나있다. 카탈로그 매니저는 레코드 카운트와 인덱스 키 카운트의 정보를 포함하고 있다. 도 21에서 나타난 갱신 패턴에 의해, (1,2,3)과 (4,5)의 갱신 영역에 대하여 단지 2개의 로그 레코드가 생성됨을 알 수 있다.
도 22는 본 발명에 따른, 데이터베이스의 각 모듈별로 감소된 로그 레코드를 비교 설명하기 도표이다.
도 22를 참조하면, 데이터베이스에서 테이블 하나에 7000개의 레코드가 있는 경우, 이들 중 5000개의 레코드를 삭제하는 경우에 현재 발생하는 로그 레코드 수와 병합 후에 발생하는 로그 레코드의 수를 비교하고 있다.
데이터베이스 모듈 전체는 FPMap, CatalogMgr, DataPage를 모두 합친 통계이며, 개별 로그 레코드는 갱신 영역이 서로 다른 경우의 로그 레코드를 말하고, 병합 후 로그 레코드는 이웃한 영역의 경우까지 모두 병합한 경우의 로그 레코드를 말한다. FPMap(Free Page Map) 모듈은 전체 데이터베이스에 대하여 사용/비사용의 정보를 관리하는 모듈이고, CatalogMgr는 앞서 설명한 카탈로그 매니저로서, 레코드 카운트와 인덱스 키 카운트의 정보를 포함하고 있는 모듈이고, DataPage는 실제 데이터가 기록되어 있는 데이터 페이지이다.
로그 사이즈를 비교해 보면, 전체 1,315 KB의 로그 사이즈가 동일 영역의 로그 레코드만을 고려할 때는 1,120KB가 감소된 195KB에 불과하고, 다시 이웃한 영역까지 고려하였을 때는 23KB로서 종래 방식에 비해 1.7%에 불과하다는 것을 알 수 있다.
이상에서 설명한 바와 같이 본 발명에 의한 데이터베이스의 로깅 방법에 따르면, 로깅에 따른 로그 사이즈가 감소하여 디스크 입출력(I/O) 작업 횟수가 감소하고 결국 DBMS의 갱신 속도가 향상된다.
또한, 트랜잭션이 커밋되거나 페이지가 플러시 되는 시점에 페이지에 대한 여러 개의 로그 엔트리가 한꺼번에 로그 레코드로 생성되어 기록됨으로써, 로그 페이지에 기록된 로그 레코드들에서 갱신하고 있는 영역이 동일한 페이지일 확률이 증가하여 복구시에 복구해야 하는 페이지에 대한 지역성(locality)이 높아지게 된다.
한편 트랜잭션의 철회(abort)가 일어나는 경우, 메모리 상에 있는 로그 엔트리를 제거하고, 페이지 복사본을 원본으로 갈음함으로써 철회 작업을 간단히 수행할 수 있어 철회 비용이 감소된다.
복구(recovery)시에는 감소된 로그 사이즈로 인해 저장 매체로부터 판독해야 하는 로그 파일의 사이즈가 줄어들고, 더불어 높아진 지역성으로 인해 복구시에 저장 매체로부터 읽어들여야 하는 디스크 입출력 비용이 감소하는 효과가 있다.
이렇게 지연된(deferred) 로깅 방법은 메모리는 충분하나, 로그 기록으로 인해 디스크 입출력(I/O)이 병목이 되는 상황에서 저장 매체에 저장하는 로그의 크기를 줄임으로써 극대화된 이득을 나타낼 수 있다.

Claims (31)

  1. 데이터베이스의 로깅(logging) 방법에 있어서,
    갱신되는 데이터 페이지의 로그 정보를 저장하는 단계와;
    상기 데이터 페이지의 갱신 작업이 완료될 때, 상기 저장된 로그 정보를 독출하는 단계와;
    상기 독출된 로그 정보를 이용하여 로그 레코드를 생성하는 단계와;
    상기 생성된 로그 레코드를 로그 페이지에 기록하는 단계를 포함하는 것을 특징으로 하는 로깅 방법.
  2. 제1항에 있어서,
    상기 로그 정보를 저장하는 단계는,
    상기 갱신되는 데이터 페이지의 오프셋(offset) 값을 포함한 로그 엔트리를 생성하는 단계와;
    상기 생성된 로그 엔트리에 상기 갱신되는 데이터 페이지의 로그 정보를 기록하는 단계와;
    상기 기록된 로그 정보를 이용하여 적어도 하나 이상의 상기 로그 엔트리를 병합하는 단계를 더 포함하는 것을 특징으로 하는 로깅 방법.
  3. 제2항에 있어서,
    상기 병합하는 단계는,
    상기 갱신되는 데이터 페이지의 영역과 동일한 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 갱신되는 데이터의 로그 정보를 기록한 로그 엔트리를 상기 동일한 영역에 대하여 기 생성된 로그 엔트리에 합침으로써 병합하는 것을 특징으로 하는 로깅 방법.
  4. 제2항에 있어서,
    상기 병합하는 단계는,
    상기 갱신되는 데이터 페이지의 영역과 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 포함한 오프셋 값을 변경함으로써 병합하는 것을 특징으로 하는 로깅 방법.
  5. 제2항에 있어서,
    상기 병합하는 단계는,
    상기 갱신되는 데이터 페이지의 영역과 겹치는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 겹치는 영역에 대하여 기 생성된 로그 엔트리가 포함한 오프셋 값을 변경함으로써 병합하는 것을 특징으로 하는 로깅 방법.
  6. 제2항에 있어서,
    상기 병합하는 단계는,
    상기 데이터 페이지의 갱신 작업이 완료될 때 일괄적으로 수행되는 것을 특징으로 하는 로깅 방법.
  7. 제6항에 있어서,
    상기 갱신 작업이 완료될 때는,
    상기 갱신 작업을 수행하는 트랜잭션이 커밋(commit)되거나, 상기 데이터 페이지가 플러시(flush)될 때인 것을 특징으로 하는 로깅 방법.
  8. 제2항에 있어서,
    상기 생성된 로그 엔트리는,
    상기 갱신되는 데이터 페이지 및 상기 갱신 작업을 수행하는 트랜잭션별로 관리되는 것을 특징으로 하는 로깅 방법.
  9. 제8항에 있어서,
    상기 생성된 로그 엔트리는,
    상기 로그 엔트리가 포함한 오프셋 값을 기준으로 정렬되는 것을 특징으로 하는 로깅 방법.
  10. 제1항에 있어서,
    상기 로그 레코드를 생성하는 단계 및 기록하는 단계는,
    ARIES(Algorithms for Recovery and Isolation Exploiting Semantics) 알고리즘을 사용하고 WAL(Write Ahead Log) 프로토콜을 따르는 것을 특징으로 하는 로깅 방법.
  11. 데이터베이스의 로깅 방법에 있어서,
    갱신되는 데이터 페이지의 갱신전 원본 이미지와 동일한 복사본 이미지를 생성하는 단계와;
    상기 갱신되는 데이터 페이지에 대한 로그 엔트리를 생성하는 단계와;
    상기 생성된 로그 엔트리를 병합하는 단계와;
    상기 원본 이미지에 대한 갱신 작업을 수행하는 단계와;
    상기 갱신 작업의 완료시에 상기 원본 이미지, 복사본 이미지 및 상기 병합된 로그 엔트리를 이용하여 로그 레코드를 생성하는 단계를 포함하는 것을 특징으로 하는 로깅 방법.
  12. 제11항에 있어서,
    상기 병합하는 단계는,
    상기 갱신되는 데이터 페이지의 영역과 동일한 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 생성된 로그 엔트리를 상기 동일한 영역에 대하여 기 생성된 로그 엔트리에 합침으로써 병합하는 것을 특징으로 하는 로깅 방법.
  13. 제11항에 있어서,
    상기 병합하는 단계는,
    상기 갱신되는 데이터 페이지의 영역과 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 이웃하는 영역에 대하여 기 생성된 로그 엔트리가 포함한 오프셋 값을 변경함으로써 병합하는 것을 특징으로 하는 로깅 방법.
  14. 제11항에 있어서,
    상기 병합하는 단계는,
    상기 갱신되는 데이터 페이지의 영역과 겹치는 영역에 대하여 기 생성된 로그 엔트리가 존재하는 경우에, 상기 겹치는 영역에 대하여 기 생성된 로그 엔트리가 포함한 오프셋 값을 변경함으로써 병합하는 것을 특징으로 하는 로깅 방법.
  15. 제11항에 있어서,
    상기 병합하는 단계는,
    상기 원본 이미지에 대한 갱신 작업이 완료될 때 일괄적으로 수행되는 것을 특징으로 하는 로깅 방법.
  16. 제15항에 있어서,
    상기 갱신 작업이 완료될 때는,
    상기 갱신 작업을 수행하는 트랜잭션이 커밋되거나, 상기 원본 이미지의 데이터 페이지가 플러시 될 때인 것을 특징으로 하는 로깅 방법.
  17. 제11항에 있어서,
    상기 원본 이미지, 복사본 이미지 및 상기 갱신 작업을 수행하는 트랜잭션의 정보를 버퍼 페이지 정보에 등록하는 단계를 더 포함하는 것을 특징으로 하는 로깅 방법.
  18. 제17항에 있어서,
    상기 생성된 로그 엔트리는,
    상기 갱신되는 데이터 페이지 및 상기 갱신 작업을 수행하는 트랜잭션별로 관리되는 것을 특징으로 하는 로깅 방법.
  19. 제18항에 있어서,
    상기 생성된 로그 엔트리는,
    상기 로그 엔트리가 포함한 오프셋 값을 기준으로 정렬되는 것을 특징으로 하는 로깅 방법.
  20. 제19항에 있어서,
    상기 로그 엔트리는,
    상기 갱신되는 데이터 페이지의 영역의 길이 및 상기 갱신되는 데이터 페이지 내에서 갱신된 영역의 시작 위치를 나타내는 오프셋을 포함하거나, 상기 갱신되는 데이터 페이지 내에서 갱신된 영역의 시작 위치 및 끝 위치를 나타내는 오프셋을 포함하는 자료구조인 것을 특징으로 하는 로깅 방법.
  21. 제17항에 있어서,
    상기 갱신 작업을 수행하는 트랜잭션이 복수개이며 동시적으로 수행하는 경우에, 엄격한 2단계 잠금(strict 2-phase locking) 프로토콜을 적용하는 것을 특징으로 하는 로깅 방법.
  22. 제21항에 있어서,
    상기 갱신 작업이 완료될 때 상기 트랜잭션이 커밋되는 경우에,
    상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 있다면, 상기 커밋되는 트랜잭션의 각각의 로그 엔트리에 해당하는 상기 원본 이미지의 갱신된 영역을 상기 복사본 이미지의 대응하는 영역에 기록하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 없다면, 상기 복사본 이미지를 삭제하는 단계를 더 포함하는 것을 특징으로 하는 로깅 방법.
  23. 제22항에 있어서,
    상기 갱신 작업이 미완료로 종료되어 상기 트랜잭션이 철회(abort)되는 경우에,
    상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 있다면, 상기 철회된 트랜잭션의 각각의 로그 엔트리에 해당하는 상기 복사본 이미지의 갱신전 영역을 상기 원본 이미지의 대응하는 영역에 기록하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 없다면, 상기 복사본 이미지를 원본 이미지로 갈음하는 단계를 더 포함하는 것을 특징으로 하는 로깅 방법.
  24. 제21항에 있어서,
    상기 갱신 작업이 완료될 때 상기 트랜잭션이 커밋되는 경우에,
    상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 있다면, 상기 버퍼 페이지 정보에 상기 트랜잭션이 커밋되었음을 기록하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션이 없다면, 상기 복사본 이미지를 삭제하는 단계를 더 포함하는 것을 특징으로 하는 로깅 방법.
  25. 제24항에 있어서,
    상기 갱신 작업이 미완료로 종료되어 상기 트랜잭션이 철회(abort)되는 경우 에,
    상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하고, 상기 버퍼 페이지 정보를 참조하여 커밋을 수행한 상기 데이터 페이지의 다른 트랜잭션의 유무를 판단하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션 또는 커밋을 수행한 다른 트랜잭션이 있다면, 상기 철회된 트랜잭션의 각각의 로그 엔트리에 해당하는 상기 복사본 이미지의 갱신전 영역을 상기 원본 이미지의 대응하는 영역에 기록하는 단계와;
    상기 판단 결과, 상기 데이터 페이지의 다른 트랜잭션 및 커밋을 수행한 다른 트랜잭션이 없다면, 상기 복사본 이미지를 원본 이미지로 갈음하는 단계를 더 포함하는 것을 특징으로 하는 로깅 방법.
  26. 제21항에 있어서,
    상기 갱신 작업이 완료될 때 상기 원본 이미지의 데이터 페이지가 플러시 되는 경우에,
    상기 플러시 되는 데이터 페이지의 모든 상기 로그 엔트리를 로그 레코드로 생성하고 상기 복사본 이미지를 삭제하는 단계를 더 포함하는 것을 특징으로 하는 로깅 방법.
  27. 데이터베이스의 로깅 장치에 있어서,
    갱신되는 데이터 페이지의 로그 정보를 저장하는 로그 저장부와;
    상기 데이터 페이지의 갱신 작업이 완료될 때, 상기 로그 저장부에 저장된 로그 정보를 독출하는 로그 독출부와;
    상기 독출된 로그 정보를 이용하여 로그 레코드를 생성하고, 상기 생성된 로그 레코드를 로그 페이지에 기록하는 로그 제어부를 포함하는 것을 특징으로 하는 로깅 장치.
  28. 데이터베이스의 로깅 장치에 있어서,
    데이터 페이지의 갱신 작업을 수행하는 트랜잭션을 관리하는 트랜잭션 제어부와;
    상기 트랜잭션 제어부가 관리하는 트랜잭션의 갱신 작업에 따라 생성된 로그 정보를 병합하여 로그 레코드를 생성하고, 상기 생성된 로그 레코드를 로그 페이지에 기록하는 로그 제어부와;
    상기 갱신 작업이 수행된 데이터 페이지 및 로그 페이지를 저장 매체로 입출력하도록 관리하는 버퍼 제어부를 포함하는 것을 특징으로 로깅 장치.
  29. 제28항에 있어서,
    상기 로그 제어부는,
    상기 갱신 작업이 수행되는 데이터 페이지의 갱신전 원본 이미지와 동일한 복사본 이미지를 저장하는 제1 저장부와;
    상기 트랜잭션 제어부가 관리하는 트랜잭션의 갱신 작업에 따라 생성된 로그 엔트리를 저장하는 제2 저장부와;
    상기 제2 저장부에 저장된 적어도 하나 이상의 상기 로그 엔트리를 병합하는 로그 병합부와;
    상기 갱신 작업의 완료시에 상기 원본 이미지, 복사본 이미지 및 상기 병합된 로그 엔트리를 이용하여 로그 레코드를 생성하고, 상기 생성된 로그 레코드를 로그 페이지에 기록하는 로그 출력부를 더 포함하는 것을 특징으로 하는 로깅 장치.
  30. 제29항에 있어서,
    상기 버퍼 제어부는,
    상기 원본 이미지, 복사본 이미지 및 상기 갱신 작업을 수행하는 트랜잭션의 정보를 등록한 버퍼 페이지 정보를 관리하는 것을 특징으로 하는 로깅 장치.
  31. 제1항 내지 제26항 중 어느 한 항에 기재된 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록 매체.
KR1020060113386A 2006-11-16 2006-11-16 지연된 로깅 방법 및 그 장치 KR100862661B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020060113386A KR100862661B1 (ko) 2006-11-16 2006-11-16 지연된 로깅 방법 및 그 장치
US11/751,077 US7801855B2 (en) 2006-11-16 2007-05-21 Method and apparatus for merging log entries in a database management system
CN2007101085168A CN101183322B (zh) 2006-11-16 2007-05-31 延迟日志生成的方法及其设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060113386A KR100862661B1 (ko) 2006-11-16 2006-11-16 지연된 로깅 방법 및 그 장치

Publications (2)

Publication Number Publication Date
KR20080044480A true KR20080044480A (ko) 2008-05-21
KR100862661B1 KR100862661B1 (ko) 2008-10-10

Family

ID=39418174

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060113386A KR100862661B1 (ko) 2006-11-16 2006-11-16 지연된 로깅 방법 및 그 장치

Country Status (3)

Country Link
US (1) US7801855B2 (ko)
KR (1) KR100862661B1 (ko)
CN (1) CN101183322B (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8473464B2 (en) 2009-01-30 2013-06-25 Samsung Electronics Co., Ltd. Method and device for data recovery using bit logging
KR20160056694A (ko) 2014-11-12 2016-05-20 주식회사 알티베이스 테이블스페이스 속성 변경 방법 및 그 장치
WO2017082520A1 (ko) * 2015-11-10 2017-05-18 엘지전자 주식회사 데이터베이스 관리 시스템 및 그의 데이터 변경 및 복구 방법
KR20200008476A (ko) * 2018-07-16 2020-01-28 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
KR20200023757A (ko) * 2018-08-27 2020-03-06 에스케이하이닉스 주식회사 메모리 시스템

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4859535B2 (ja) * 2006-05-30 2012-01-25 株式会社日立製作所 業務管理システム、情報システム及び業務管理方法
US8108356B2 (en) * 2007-12-24 2012-01-31 Korea Advanced Institute Of Science And Technology Method for recovering data in a storage system
US8190579B2 (en) * 2008-06-06 2012-05-29 Bmc Software, Inc. IMS change mapper
JP4891388B2 (ja) * 2009-12-28 2012-03-07 株式会社エスディー システムイベントログシステム
IL208641A0 (en) * 2010-10-12 2010-12-30 Eci Telecom Ltd Method for accelerating start up of a computerized system
CN103092719B (zh) * 2011-10-28 2016-09-07 浙江大华技术股份有限公司 一种文件系统的断电保护方法
CN103092742B (zh) 2011-10-31 2015-08-19 国际商业机器公司 程序日志记录优化方法和系统
US9015108B2 (en) 2012-08-31 2015-04-21 Teradata Us, Inc. Time-bound batch status rollup for logged events
US10303564B1 (en) * 2013-05-23 2019-05-28 Amazon Technologies, Inc. Reduced transaction I/O for log-structured storage systems
GB2514563A (en) * 2013-05-28 2014-12-03 Ibm Selective purging of a log structure
US20150120645A1 (en) * 2013-10-31 2015-04-30 Futurewei Technologies, Inc. System and Method for Creating a Distributed Transaction Manager Supporting Repeatable Read Isolation level in a MPP Database
CN103678608B (zh) * 2013-12-16 2017-10-17 华为技术有限公司 日志管理方法和装置
US9753649B2 (en) * 2014-10-27 2017-09-05 Sandisk Technologies Llc Tracking intermix of writes and un-map commands across power cycles
CN105760283B (zh) * 2014-12-18 2018-11-09 阿里巴巴集团控股有限公司 一种日志输出方法和装置
CN106155832B (zh) * 2015-03-30 2019-03-22 Tcl集团股份有限公司 一种数据恢复的方法、装置及Android设备
US20170235781A1 (en) * 2016-02-16 2017-08-17 TmaxData Co., Ltd. Method, server and computer program stored in computer readable medium for managing log data in database
KR101990329B1 (ko) * 2017-08-10 2019-06-18 주식회사 티맥스데이터 로그 데이터 분석을 이용한 데이터베이스 복구 속도 향상 기법 및 장치
CN109542329B (zh) * 2017-09-21 2022-04-12 阿里云计算有限公司 日志写入方法、存储管理设备及系统
CN109617708B (zh) * 2018-10-31 2020-07-31 浙江口碑网络技术有限公司 一种埋点日志的压缩方法、设备及系统
US11321354B2 (en) * 2019-10-01 2022-05-03 Huawei Technologies Co., Ltd. System, computing node and method for processing write requests
US11520747B2 (en) * 2019-12-02 2022-12-06 Huawei Technologies Co., Ltd. Method and system for detecting and resolving a write conflict
US11435914B2 (en) * 2020-03-30 2022-09-06 Western Digital Technologies, Inc. Dynamic ZNS open zone active limit
CN113742333B (zh) * 2020-05-29 2023-08-04 杭州海康威视数字技术股份有限公司 一种维表数据更新方法、装置及电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5317739A (en) * 1992-03-30 1994-05-31 International Business Machines Corp. Method and apparatus for coupling data processing systems
US5487166A (en) * 1994-09-19 1996-01-23 Amdahl Corporation Computer with two-dimensional merge tournament sort using offset-value coding
JP2001229063A (ja) * 2000-02-17 2001-08-24 Mitsubishi Electric Corp データ管理システム
US7043504B1 (en) * 2000-04-10 2006-05-09 International Business Machines Corporation System and method for parallel primary and secondary backup reading in recovery of multiple shared database data sets

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8473464B2 (en) 2009-01-30 2013-06-25 Samsung Electronics Co., Ltd. Method and device for data recovery using bit logging
KR20160056694A (ko) 2014-11-12 2016-05-20 주식회사 알티베이스 테이블스페이스 속성 변경 방법 및 그 장치
WO2017082520A1 (ko) * 2015-11-10 2017-05-18 엘지전자 주식회사 데이터베이스 관리 시스템 및 그의 데이터 변경 및 복구 방법
KR20200008476A (ko) * 2018-07-16 2020-01-28 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
KR20200023757A (ko) * 2018-08-27 2020-03-06 에스케이하이닉스 주식회사 메모리 시스템
US11782825B2 (en) 2018-08-27 2023-10-10 SK Hynix Inc. Memory system which stores a plurality of write data grouped into a transaction

Also Published As

Publication number Publication date
CN101183322A (zh) 2008-05-21
US7801855B2 (en) 2010-09-21
US20080120349A1 (en) 2008-05-22
KR100862661B1 (ko) 2008-10-10
CN101183322B (zh) 2011-08-17

Similar Documents

Publication Publication Date Title
KR100862661B1 (ko) 지연된 로깅 방법 및 그 장치
US9953051B2 (en) Multi-version concurrency control method in database and database system
US9922077B2 (en) Reducing the cost of update, delete, and append-only insert operations in a database
JP4603546B2 (ja) 効率的なバージョン制御を有するデータベース管理システム
US5758356A (en) High concurrency and recoverable B-tree index management method and system
US5430869A (en) System and method for restructuring a B-Tree
JP3593366B2 (ja) デ−タベ−ス管理方法
KR100556594B1 (ko) 데이터베이스에 관한 방법
US20090183159A1 (en) Managing concurrent transactions using bloom filters
JP7101566B2 (ja) 不揮発性メモリにおけるマルチバージョン同時実行制御(mvcc)
JPH0628315A (ja) トランザクション・照会並行処理のための動的有限バージョン管理方法およびそのシステム
US9471622B2 (en) SCM-conscious transactional key-value store
JPH04337850A (ja) データベース・トランザクション及び照会処理システム
US8954407B2 (en) System and method for partially deferred index maintenance
KR101587995B1 (ko) 적응적 로깅 장치 및 방법
US10761936B2 (en) Versioned records management using restart era
US6571250B1 (en) Method and system for processing queries in a data processing system using index
US7051051B1 (en) Recovering from failed operations in a database system
Agrawal et al. Recovery algorithms for database machines with non-volatile main memory
CN113986974A (zh) 一种数据库事务管理方法及装置、恢复方法及装置
JP2004062759A (ja) データベースログの管理方法、その装置およびそのプログラム
KR20180082753A (ko) 비휘발성 메모리를 이용하는 데이터베이스 관리 시스템 및 방법
CN114936215B (zh) 一种预写式日志的处理方法、存储介质与设备
US11567671B2 (en) Method, electronic device, and computer program product for storage management
JP3450154B2 (ja) ファイルアクセス処理システム

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120914

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20130924

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140922

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150916

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160921

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170918

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20180917

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20190910

Year of fee payment: 12