[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: Implementing database tuning checks (2.1.29/db4.2.52.2/bdb)
On Thu, 22 Apr 2004, Buchan Milne wrote:
> I have implemented parts of the tuning recommendations in
> http://www.openldap.org/faq/data/cache/191.html using a script to report
> the suggested minimum cache size.
>
[snip]
>
> How does one determine (ie which options to db_stat and which resulting
> value) the number of hash buckets, overflow pages and duplicate pages for
> an index file?
This is how I interpreted Howard's post. Change the values of
$db_stat, $db_config_home, and $db_archive to taste. Works with
OL 2.1.25 and BDB 4.2.52 on RedHat Linux 9.0. Sorry if any of the
below gets word-wrapped in your mailer.
#!/usr/bin/perl
my $db_config_home = "/var/lib/ldap";
my $db_stat = "/usr/sbin/slapd_db_stat -h $db_config_home";
my $db_archive = "/usr/sbin/slapd_db_archive -h $db_config_home";
my @all_dbs = `$db_archive -s`; chomp(@all_dbs);
my (
@stats,
%d_btree,
%d_hash
);
#-----------------------+
# Get stats for each db |
#-----------------------+
foreach my $db (@all_dbs) {
@stats = `$db_stat -d $db`;
chomp(@stats);
if ($stats[0] =~ /Btree/) {
$d_btree{$db}{"page_size"} = (split(/\s/, $stats[4]))[0];
$d_btree{$db}{"internal_pages"} = (split(/\s/, $stats[8]))[0];
$d_btree{$db}{"cache_size"} =
($d_btree{$db}{"internal_pages"} + 1) *
$d_btree{$db}{"page_size"};
}
else {
$d_hash{$db}{"page_size"} = (split(/\s/, $stats[3]))[0];
$d_hash{$db}{"hash_buckets"} = (split(/\s/, $stats[7]))[0];
$d_hash{$db}{"bkt_of_pages"} = (split(/\s/, $stats[11]))[0];
$d_hash{$db}{"dup_pages"} = (split(/\s/, $stats[13]))[0];
$d_hash{$db}{"cache_size"} =
(($d_hash{$db}{"hash_buckets"} +
$d_hash{$db}{"bkt_of_pages"} +
$d_hash{$db}{"dup_pages"}) *
$d_hash{$db}{"page_size"})/2;
}
}
#-----------------------+
# Write stats to stdout |
#-----------------------+
my $total_cache_size;
print "Minimum BDB cache size\n";
print "Date: " . scalar(localtime()) . "\n";
print "\n";
printf (
"%-35s %3s %3s %3s %5s %7s\n",
"Hash dbs", "HBk", "Ovr", "Dup", "PgSz", "Cache"
);
while (my ($dbname, $h_ref) = each (%d_hash)) {
printf (
"%-35s %3d %3d %3d %5d %7d\n",
$dbname,
$$h_ref{'hash_buckets'},
$$h_ref{'bkt_of_pages'},
$$h_ref{'dup_pages'},
$$h_ref{'page_size'},
$$h_ref{'cache_size'}
);
$total_cache_size += $$h_ref{'cache_size'};
}
print "\n";
printf ("%-44s %3s %5s %7s\n", "Btrieve dbs", "IPg", "PgSz", "Cache");
while (my ($dbname, $h_ref) = each (%d_btree)) {
printf (
"%-44s %3s %5s %7s\n",
$dbname,
$$h_ref{'internal_pages'},
$$h_ref{'page_size'},
$$h_ref{'cache_size'}
);
$total_cache_size += $$h_ref{'cache_size'};
}
print "\n";
printf ("%-55s %7d\n", "Minimum cache size:", $total_cache_size);
exit;
--
Kirk Turner-Rustin
Information Systems
Ohio Wesleyan University
http://www.owu.edu
ktrustin@owu.edu