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 \" 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 {