Browse Source

Import from SAMBA tdb:
commit a6cc04a20089e8fbcce138c271961c37ddcd6c34
Author: Andrew Tridgell <tridge@samba.org>
Date: Mon Jun 1 13:13:07 2009 +1000

overallocate all records by 25%

This greatly reduces the fragmentation of databases where records
tend to grow slowly by a small amount each time. The case where this
is most seen is the ldb index records. Adding this overallocation
reduced the size of the resulting database by more than 20x when
running a test that adds 10k users.

Rusty Russell 16 years ago
parent
commit
ccce1aa254
1 changed files with 3 additions and 0 deletions
  1. 3 0
      ccan/tdb/freelist.c

+ 3 - 0
ccan/tdb/freelist.c

@@ -284,6 +284,9 @@ tdb_off_t tdb_allocate(struct tdb_context *tdb, tdb_len_t length, struct list_st
 	if (tdb_lock(tdb, -1, F_WRLCK) == -1)
 	if (tdb_lock(tdb, -1, F_WRLCK) == -1)
 		return 0;
 		return 0;
 
 
+	/* over-allocate to reduce fragmentation */
+	length *= 1.25;
+
 	/* Extra bytes required for tailer */
 	/* Extra bytes required for tailer */
 	length += sizeof(tdb_off_t);
 	length += sizeof(tdb_off_t);
 	length = TDB_ALIGN(length, TDB_ALIGNMENT);
 	length = TDB_ALIGN(length, TDB_ALIGNMENT);