diff -Naur openldap-2.1.15.orig/servers/slapd/back-bdb/back-bdb.h openldap-2.1.15/servers/slapd/back-bdb/back-bdb.h
--- openldap-2.1.15.orig/servers/slapd/back-bdb/back-bdb.h	Wed Feb 26 16:17:50 2003
+++ openldap-2.1.15/servers/slapd/back-bdb/back-bdb.h	Thu Mar 13 10:56:35 2003
@@ -59,6 +59,7 @@
 #endif
 
 #define DEFAULT_CACHE_SIZE     1000
+#define DEFAULT_DBCACHE_SIZE	(128 * BDB_ID2ENTRY_PAGESIZE)
 
 /* The default search IDL stack cache depth */
 #define DEFAULT_SEARCH_STACK_DEPTH	16
@@ -115,6 +116,7 @@
 
 	slap_mask_t	bi_defaultmask;
 	Cache		bi_cache;
+	int		bi_dbcachesize;
 	Avlnode		*bi_attrs;
 	void		*bi_search_stack;
 	int		bi_search_stack_depth;
diff -Naur openldap-2.1.15.orig/servers/slapd/back-bdb/config.c openldap-2.1.15/servers/slapd/back-bdb/config.c
--- openldap-2.1.15.orig/servers/slapd/back-bdb/config.c	Thu Mar  6 00:48:33 2003
+++ openldap-2.1.15/servers/slapd/back-bdb/config.c	Thu Mar 13 10:47:30 2003
@@ -158,6 +158,16 @@
 	                 bdb->bi_idl_cache_max_size = atoi( argv[1] );
 #endif
 
+	/* size of each dbcache in bytes */
+	} else if ( strcasecmp( argv[0], "dbcachesize" ) == 0 ) {
+		if ( argc < 2 ) {
+			fprintf( stderr,
+		"%s: line %d: missing size in \"dbcachesize <size>\" line\n",
+			    fname, lineno );
+			return( 1 );
+		}
+		bdb->bi_dbcachesize = atoi( argv[1] );
+
 	/* anything else */
 	} else {
 		fprintf( stderr, "%s: line %d: "
diff -Naur openldap-2.1.15.orig/servers/slapd/back-bdb/init.c openldap-2.1.15/servers/slapd/back-bdb/init.c
--- openldap-2.1.15.orig/servers/slapd/back-bdb/init.c	Thu Mar  6 00:36:09 2003
+++ openldap-2.1.15/servers/slapd/back-bdb/init.c	Thu Mar 13 10:52:26 2003
@@ -90,6 +90,7 @@
 	bdb->bi_dbenv_mode = SLAPD_DEFAULT_DB_MODE;
 
 	bdb->bi_cache.c_maxsize = DEFAULT_CACHE_SIZE;
+	bdb->bi_dbcachesize = DEFAULT_DBCACHE_SIZE;
 
 	bdb->bi_lock_detect = DB_LOCK_DEFAULT;
 	bdb->bi_search_stack_depth = DEFAULT_SEARCH_STACK_DEPTH;
@@ -206,6 +207,20 @@
 		bdb->bi_idl_cache_size = 0;
 	}
 #endif
+
+	rc = bdb->bi_dbenv->set_cachesize(bdb->bi_dbenv, 0, bdb->bi_dbcachesize, 0);
+	if ( rc != 0 ) {
+#ifdef NEW_LOGGING
+			LDAP_LOG( BACK_BDB, ERR, 
+				"bdb_db_open: set_cachesize(%d) failed: %s (%d)\n", 
+				bdb->bi_dbcachesize, db_strerror(rc), rc );
+#else
+			Debug( LDAP_DEBUG_ANY,
+				"bdb_db_open: set_set_cachesize(%d) failed: %s (%d)\n",
+				bdb->bi_dbcachesize, db_strerror(rc), rc );
+#endif
+			return rc;
+	}
 
 #ifdef BDB_SUBDIRS
 	{

