트랜잭션 로그

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

트랜잭션 로그는 데이터베이스 시스템에서 변경 사항을 기록하는 메커니즘이다. 각 로그 레코드는 로그 시퀀스 번호(LSN)를 가지며, 이전 레코드를 참조하는 구조를 통해 연결 리스트와 유사한 형태를 갖는다. 로그 레코드에는 트랜잭션 번호와 레코드 종류가 포함되며, 갱신, 보상, 커밋, 중단, 체크포인트 레코드 등 다양한 유형이 있다. 각 레코드는 데이터베이스의 변경 사항을 기록하고, 롤백, 커밋, 체크포인트와 같은 작업의 상태를 나타내며, 복구 알고리즘에 활용된다.

트랜잭션 로그
📚 더 읽어볼만한 페이지
  • 트랜잭션 처리 - 2단계 커밋 프로토콜
    2단계 커밋 프로토콜은 분산 컴퓨팅 환경에서 트랜잭션의 원자성을 보장하는 분산 알고리즘으로, 조정자와 참가자로 구성되어 모든 참가자가 트랜잭션을 완료하거나 아무도 완료하지 못하도록 하며, 커밋 요청 및 커밋 단계를 거쳐 모든 참가자의 동의를 얻어야 커밋된다.
  • 트랜잭션 처리 - 온라인 트랜잭션 처리
    온라인 트랜잭션 처리(OLTP)는 실시간 데이터베이스 트랜잭션 처리 방식으로, 가용성, 속도, 동시성, 내구성을 목표로 은행, 항공사, 전자 상거래 등에서 활용된다.
  • 데이터베이스 관리 시스템 - 트랜잭션 처리
    트랜잭션 처리는 데이터베이스 시스템에서 데이터의 일관성과 무결성을 보장하기 위한 기술이며, ACID 속성을 통해 데이터 정확성을 유지하고 롤백, 데드락 처리 등의 기술을 활용한다.
  • 데이터베이스 관리 시스템 - 저장 프로시저
    저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다.

2. 구조

트랜잭션 로그는 다음과 같은 구조를 갖는다.

* 로그 시퀀스 번호 (Log Sequence Number영어): 로그 레코드의 고유 식별자이다. 일반적으로 번호가 고유하게 증가하는 값이 할당되며, ARIES와 같은 복구 알고리즘에서 사용된다.
* 마지막 LSN: 마지막 레코드에 대한 참조. 트랜잭션 로그는 연결 리스트와 같은 구조를 가지게 된다.
* 트랜잭션 번호: 레코드를 생성한 데이터베이스의 트랜잭션 번호.
* 종류: 레코드 유형을 나타낸다.

모든 로그 레코드는 일반적인 특성 외에도 작업마다 고유의 특성을 가지고 있다. 다음은 일반적인 데이터베이스가 사용하는 로그 레코드의 유형이다.

* 업데이트 레코드는 데이터베이스 업데이트(변경)를 기록하며 다음 속성을 갖는다:
* 페이지 번호: 변경된 페이지 번호.
* 길이 및 위치: 페이지에서 변경된 영역.
* 업데이트 전후 이미지: 업데이트된 영역의 업데이트 이전 및 업데이트된 값 (데이터베이스에 따라 양쪽 또는 한쪽만 기록).
* 보상 레코드는 업데이트 롤백을 기록한다. 레코드는 별도 업데이트 레코드를 가리킨다.
* Undo Next LSN: 보상 처리가 필요한 다음 레코드 번호.
* 커밋 레코드는 트랜잭션 커밋을 기록한다.
* 중단 레코드는 트랜잭션 롤백을 기록한다.
* 체크포인트 레코드는 체크포인트 처리가 완료되었는지를 기록한다. 복구 처리 속도 향상에 기여한다.
* Redo LSN: 체크포인트 이후 처음 변경 사항 처리 레코드 번호 (이 레코드부터 작업을 다시 실행).
* Undo LSN: 체크포인트에서 수행 중이던 트랜잭션이 기록한 가장 오래된 레코드 번호 (이 레코드 추가 처리를 보상해야 할 가능성이 있음).

3. 로그 레코드 종류

트랜잭션 로그는 데이터베이스 시스템에서 변경 사항을 기록하는 데 사용되며, 다음과 같은 종류의 로그 레코드를 포함한다.

* 업데이트 레코드 (Update Record): 데이터베이스의 변경(업데이트) 사항을 기록한다.
* 보상 레코드 (Compensation Log Record, CLR): 업데이트의 롤백(이전 상태로 되돌리는 것)을 기록한다.
* 커밋 레코드 (Commit Record): 트랜잭션 커밋을 기록한다.
* 중단 레코드 (Abort Record): 트랜잭션 롤백을 기록한다.
* 체크포인트 레코드 (Checkpoint Record): 체크포인트(검사 지점) 처리가 완료되었음을 기록하며, 복구 처리 속도를 높인다.
* 완료 레코드 (Complete Record): 특정 트랜잭션에 대한 모든 작업이 완료되었음(완전히 커밋되었거나 중단되었음)을 기록한다.

3.1. 업데이트 레코드 (Update Record)

업데이트 레코드는 데이터베이스 업데이트(변경)를 기록하며, 다음과 같은 속성을 갖는다.

* 페이지 번호: 변경된 페이지의 번호를 나타낸다.
* 길이 및 위치: 페이지에서 변경된 영역을 나타낸다.
* 업데이트 전후 이미지: 업데이트된 영역의 업데이트 이전 및 업데이트된 값을 나타낸다. 데이터베이스에 따라 양쪽 또는 한쪽만 기록하는 차이가 있다.

3.2. 보상 레코드 (Compensation Log Record, CLR)

보상 로그 레코드(Compensation Log Record, CLR)는 데이터베이스 갱신(업데이트)의 롤백을 기록하며, 별도의 업데이트 레코드를 가리킨다. 각 레코드는 다음의 정보를 포함한다.

* Undo Next LSN: 보상 처리가 필요한 다음 레코드 번호.

3.3. 커밋 레코드 (Commit Record)

커밋 레코드는 트랜잭션의 커밋을 기록한다.

3.4. 중단 레코드 (Abort Record)

트랜잭션 롤백을 기록한다. Abort Record영어는 트랜잭션을 중단하고 롤백하기로 한 결정을 기록하는 레코드이다.

3.5. 체크포인트 레코드 (Checkpoint Record)

체크포인트 레코드는 체크포인트 처리가 완료되었음을 기록한다. 이 레코드는 복구 처리 속도를 높이는 데 기여하는데, 로드할 가장 오래된 레코드를 알려주기 때문이다. 체크포인트 레코드의 내용은 다음과 같다.

* Redo LSN: 체크포인트 이후 처음 변경 사항 처리 레코드 번호. 이 레코드부터 작업을 다시 실행해야 한다.
* Undo LSN: 체크포인트에서 수행 중이던 트랜잭션이 기록한 가장 오래된 레코드 번호. 이 레코드 추가 처리를 보상해야 할 가능성이 있다.

PostgreSQL과 같이 체크포인트를 생성하는 동안 모든 더티 페이지가 플러시되는 경우, 체크포인트 레코드는 다음을 포함할 수 있다.

* redoLSN: 더티 페이지에 해당하는 첫 번째 로그 레코드에 대한 참조. 즉, 체크포인트 시점에 플러시되지 않은 첫 번째 업데이트이며, 복구 시 다시 실행이 시작되어야 하는 위치이다.
* undoLSN: 진행 중인 가장 오래된 트랜잭션의 가장 오래된 로그 레코드에 대한 참조. 진행 중인 모든 트랜잭션을 실행 취소하는 데 필요한 가장 오래된 로그 레코드이다.

3.6. 완료 레코드 (Complete Record)

완료 레코드는 특정 트랜잭션에 대한 모든 작업이 완료되었음(완전히 커밋되었거나 중단되었음)을 기록한다.