wooyounggggg / database-internals

데이터베이스 인터널스를 읽고 공유합니다.
0 stars 0 forks source link

[keyword] 5장 트랜잭션 처리와 복구 #13

Closed seonWKim closed 1 year ago

seonWKim commented 1 year ago

주제

'5장 - 트랜잭션 처리와 복구'을 읽고 내용을 요약하거나,
중요✨ 하다고 생각하는 키워드 및 관련 설명을 코멘트로 달아주세요

연관 챕터

14

seonWKim commented 1 year ago

https://github.com/seonwoo960000/database-internals/blob/main/ch5/Chapter5.md

gracefulife commented 1 year ago

SQLITE 소스코드 확인방법 https://sqlite.org/src/doc/trunk/README.md

transaction 구현 진입점 https://github.com/sqlite/sqlite/blob/master/src/pager.h#L162

wooyounggggg commented 1 year ago

ChatGPT에게 steal / force 정책에 대해 질문해보았습니다.

Q) dbms의 steal정책과 force정책이 뭐야?

A) DBMS에서 Steal 정책과 Force 정책은 데이터베이스의 트랜잭션 처리 동안 디스크와 메모리 간의 페이지 교환에 대한 규칙을 나타냅니다. 이 두 가지 정책은 주로 트랜잭션의 커밋(commit)과 롤백(rollback) 동작을 관리하는 데 사용됩니다.

Steal 정책: Steal 정책은 트랜잭션이 커밋되기 전에 데이터 변경 내용을 디스크에 기록할 수 있는 권한을 줍니다. 따라서 트랜잭션이 실행되는 동안 데이터 변경 사항을 메모리에서 디스크로 페이징할 수 있습니다. 이는 다음과 같은 상황에서 사용될 수 있습니다: 버퍼 풀이 부족한 경우: 트랜잭션이 메모리에 더 이상 데이터를 캐시할 수 없는 경우, Steal 정책에 따라 변경된 페이지를 디스크에 기록하고 메모리를 확보합니다. 체크포인트 동작: 데이터베이스의 체크포인트 동작에서 Steal 정책을 사용하여 커밋되지 않은 데이터 변경 내용을 디스크에 기록하고, 이를 기준으로 트랜잭션 복구 시점을 결정할 수 있습니다. Force 정책: Force 정책은 트랜잭션이 커밋되기 전까지 데이터 변경 내용을 디스크로 강제로 기록해야 함을 나타냅니다. 즉, 트랜잭션이 완료되기 전까지 변경된 페이지를 디스크로 강제로 플러시하여 영구적인 저장을 보장합니다. 이는 다음과 같은 상황에서 사용될 수 있습니다: 로그 기록: Force 정책은 트랜잭션 로그를 안전하게 디스크에 기록하여 데이터 일관성을 유지합니다. 로그 기록 후에 트랜잭션을 커밋하고, 커밋 시점 이후에 변경된 데이터를 디스크에 기록합니다. 체크포인트 동작: 체크포인트 동작에서 Force 정책을 사용하여 모든 변경 내용을 디스크에 기록하고, 이를 기준으로 트랜잭션 복구 시점을 결정할 수 있습니다. Steal 정책과 Force 정책은 데이터베이스 시스템의 일관성과 내구성을 유지하기 위한 중요한 메커니즘입니다. 이러한 정책은 트랜잭션 복구 및 장애 복구에 중요한 역할을 합니다.

Q) 그럼 두 정책의 차이는 권한을 주는지, 강제하는지의 차이야?

A) 네, 맞습니다. 두 정책의 주요한 차이점은 권한 부여와 강제 동작입니다.

Steal 정책: Steal 정책은 트랜잭션이 커밋되기 전에 데이터 변경 내용을 디스크에 기록할 수 있는 권한을 주는 것입니다. 즉, 트랜잭션이 실행되는 동안 변경된 페이지를 디스크로 페이징할 수 있습니다. 이는 메모리 공간이 부족하거나 체크포인트 등의 상황에서 사용될 수 있습니다.

Force 정책: Force 정책은 트랜잭션이 커밋되기 전까지 데이터 변경 내용을 디스크로 강제로 기록해야 함을 나타냅니다. 따라서 트랜잭션이 완료되기 전까지 변경된 페이지를 디스크로 강제로 플러시하여 영구적인 저장을 보장합니다. 이는 데이터의 일관성과 내구성을 위해 로그 기록 및 체크포인트 동작에서 사용됩니다.

요약하자면, Steal 정책은 트랜잭션 실행 중에 변경된 데이터를 디스크로 기록할 권한을 주고, Force 정책은 트랜잭션이 완료되기 전까지 변경된 데이터를 디스크로 강제로 기록하는 동작을 요구합니다.