Lee,
http://www.openldap.org/lists/openldap-software/200311/msg00479.html
schu
That is an excellent explanation. Since this is so easily calculated, why not include this either:
a) As part of the openldap daemon, such that if db type = bdb, on startup openldap runs db_stat -m, calculates teh appropriate values, checks that a the system has mem*2 or something, and generates a DB_CONFIG. This could even be a options in slapd.conf (i.e. AUTOTUNE_BDB = 1)
b) As an included shell script (i.e. openldap_bdb_tune)?
Thank you for all the help.
Lee
I have the cache set to 15MB. Besides using 15MB of memory, is there any down side to it being this big (i.e. if the cache is huge does performance degrade b/c it takes longer to search the entire cache)?
On Dec 16, 2003, at 8:54 AM, Andreas wrote:
On Tue, Dec 16, 2003 at 08:38:23AM -0500, Frank Swasey wrote:
Check with db_stat -m if it is enough. Also remember that, if this file is created after the database, this setting has no effect.
but a db_recover is sufficient to rebuild the environment so it does take effect.
Check out this excellent post by Howard:
http://www.openldap.org/lists/openldap-software/200311/msg00469.html
#!/bin/sh
DATADIR="/usr/local/var/openldap-data"
DB_STAT="/usr/local/BerkeleyDB.4.1/bin/db_stat"
INDEXMEM=0
TOTALHASHBUCKETS=0
TOTALOVERFLOWPAGES=0
TOTALDUPLICATEPAGES=0
DN2INTERNALPAGES=`$DB_STAT -d $DATADIR/dn2id.bdb \
| grep "Number of tree internal pages" \
| awk '{ print $1 }'`
DN2PAGESIZE=`$DB_STAT -d $DATADIR/dn2id.bdb \
| grep "Underlying database page size" \
| awk '{ print $1 }'`
ID2INTERNALPAGES=`$DB_STAT -d $DATADIR/id2entry.bdb \
| grep "Number of tree internal pages" \
| awk '{ print $1 }'`
ID2PAGESIZE=`$DB_STAT -d $DATADIR/id2entry.bdb \
| grep "Underlying database page size" \
| awk '{ print $1 }'`
INDEXMEM=`expr $INDEXMEM + \( $DN2INTERNALPAGES \* $DN2PAGESIZE \)`
INDEXMEM=`expr $INDEXMEM + \( $ID2INTERNALPAGES \* $ID2PAGESIZE \)`
INTERNALPAGESSIZE=$INDEXMEM
INTERNALPAGES=`expr $DN2INTERNALPAGES + $ID2INTERNALPAGES`
DATABASES=`$DB_STAT -m -h $DATADIR | grep -v "dn2id" | grep -v "id2entry" \
| awk '/^Pool File:/ {print $3}' \
| awk -F. '{print $1}'`
for DATABASE in $DATABASES; do
HASHBUCKETS=`$DB_STAT -d $DATADIR/$DATABASE.bdb -s $DATABASE \
| grep "Number of hash buckets" \
| awk '{ print $1 }'`
OVERFLOWPAGES=`$DB_STAT -d $DATADIR/$DATABASE.bdb -s $DATABASE \
| grep "Number of bucket overflow pages" \
| awk '{ print $1 }'`
DUPLICATEPAGES=`$DB_STAT -d $DATADIR/$DATABASE.bdb -s $DATABASE \
| grep "Number of duplicate pages" \
| awk '{ print $1 }'`
TOTALHASHBUCKETS=`expr $TOTALHASHBUCKETS + $HASHBUCKETS`
TOTALOVERFLOWPAGES=`expr $TOTALOVERFLOWPAGES + $OVERFLOWPAGES`
TOTALDUPLICATEPAGES=`expr $TOTALDUPLICATEPAGES + $DUPLICATEPAGES`
TMP=`expr \( $HASHBUCKETS + $OVERFLOWPAGES + $DUPLICATEPAGES \) \* $DN2PAGESIZE`
INDEXMEM=`expr $INDEXMEM + $TMP`
done
echo
echo
echo "Number of tree internal pages (dn2id + id2entry): $INTERNALPAGES"
echo "Tree internal pages size (internal pages * pagesize): $INTERNALPAGESSIZE"
echo "Total hash buckets for all indexes: $TOTALHASHBUCKETS"
echo "Total overflow pages for all indexes: $TOTALOVERFLOWPAGES"
echo "Total duplicate pages for all indexes: $TOTALDUPLICATEPAGES"
echo "Cache Size needed (internal pages + hash buckets + overflow pages + duplicate pages ) * pagesize: $INDEXMEM"