From 69c61604c0e92ea1f705834e4aa6171f14ffba42 Mon Sep 17 00:00:00 2001 From: All Asmaul Husnain <2263081025@uttarauniversity.edu.bd> Date: Thu, 1 Oct 2026 21:40:22 +0600 Subject: [PATCH 1/2] perf: buffer B tree writes until flush --- src/btree.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/btree.c b/src/btree.c index 726632e..804c58f 100644 --- a/src/btree.c +++ b/src/btree.c @@ -213,7 +213,6 @@ static void write_metadata(BTree *tree) write_u32(page + 4U, META_VERSION); write_u32(page + 8U, tree->root_page); write_u32(page + 12U, tree->row_count); - (void)pager_flush(tree->pager, 0); } static uint32_t leaf_find_index(const unsigned char *page, int id) @@ -298,7 +297,7 @@ static BTreeResult update_parent_separator(BTree *tree, uint32_t leaf_page) if (result != BTREE_OK) { return result; } - return flush_page(tree, parent_page); + return BTREE_OK; } } @@ -364,7 +363,7 @@ static BTreeResult internal_insert(BTree *tree, uint32_t parent_page, } set_node_parent(right, parent_page); - return flush_page(tree, parent_page); + return BTREE_OK; } static BTreeResult create_root_from_split(BTree *tree, @@ -407,7 +406,7 @@ static BTreeResult create_root_from_split(BTree *tree, return result; } - return flush_page(tree, old_root); + return BTREE_OK; } static BTreeResult split_leaf(BTree *tree, uint32_t leaf_page, @@ -482,12 +481,7 @@ static BTreeResult split_leaf(BTree *tree, uint32_t leaf_page, return result; } - result = flush_page(tree, leaf_page); - if (result != BTREE_OK) { - return result; - } - - return flush_page(tree, new_page_number); + return BTREE_OK; } BTree *btree_open(Pager *pager, BTreeResult *result) @@ -603,7 +597,6 @@ BTreeResult btree_insert(BTree *tree, const Row *row) result = split_leaf(tree, page_number, row->id, row); if (result == BTREE_OK) { ++tree->row_count; - write_metadata(tree); } return result; } @@ -614,18 +607,12 @@ BTreeResult btree_insert(BTree *tree, const Row *row) serialize_row(leaf_cell(page, index), row); set_node_count(page, count + 1U); - result = flush_page(tree, page_number); - if (result != BTREE_OK) { - return result; - } - result = update_parent_separator(tree, page_number); if (result != BTREE_OK) { return result; } ++tree->row_count; - write_metadata(tree); return BTREE_OK; } From f9497088c6a40e2dab694326d81b14c6debdebda Mon Sep 17 00:00:00 2001 From: All Asmaul Husnain <2263081025@uttarauniversity.edu.bd> Date: Thu, 1 Oct 2026 21:40:42 +0600 Subject: [PATCH 2/2] refactor: remove per insert flush helper --- src/btree.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/btree.c b/src/btree.c index 804c58f..45d33ad 100644 --- a/src/btree.c +++ b/src/btree.c @@ -267,11 +267,6 @@ static uint32_t max_key(const BTree *tree, uint32_t page_number, BTreeResult *re return max_key(tree, internal_right_child(page), result); } -static BTreeResult flush_page(BTree *tree, uint32_t page_number) -{ - return pager_flush(tree->pager, page_number) == PAGER_OK ? BTREE_OK : BTREE_IO_ERROR; -} - static BTreeResult update_parent_separator(BTree *tree, uint32_t leaf_page) { BTreeResult result;