Dont fsync the WAL on read queries

This commit is contained in:
Jussi Saurio
2025-02-03 20:39:34 +02:00
parent d4cb0a1223
commit 1f888fea4f
3 changed files with 15 additions and 1 deletions

View File

@@ -63,7 +63,7 @@ pub use storage::wal::CheckpointStatus;
pub use storage::wal::Wal;
pub static DATABASE_VERSION: OnceLock<String> = OnceLock::new();
#[derive(Clone)]
#[derive(Clone, PartialEq, Eq)]
enum TransactionState {
Write,
Read,

View File

@@ -215,6 +215,11 @@ impl Pager {
Ok(CheckpointStatus::Done)
}
pub fn end_read_tx(&self) -> Result<()> {
self.wal.borrow().end_read_tx()?;
Ok(())
}
/// Reads a page from the database.
pub fn read_page(&self, page_idx: usize) -> Result<PageRef> {
trace!("read_page(page_idx = {})", page_idx);

View File

@@ -1012,6 +1012,15 @@ impl Program {
}
}
log::trace!("Halt auto_commit {}", self.auto_commit);
let connection = self
.connection
.upgrade()
.expect("only weak ref to connection?");
let current_state = connection.transaction_state.borrow().clone();
if current_state == TransactionState::Read {
pager.end_read_tx()?;
return Ok(StepResult::Done);
}
return if self.auto_commit {
match pager.end_tx() {
Ok(crate::storage::wal::CheckpointStatus::IO) => Ok(StepResult::IO),