Well, writes are definitely slower than reads. This is especially bad with
writes that sync() frequently, as the default configuration does. (Of
course they're safe, so that makes a sane default.)
With that said, the first big thing you're missing is the -q flag to
slapadd. Note that if the slapadd -q fails, your only recourse will be a
rm. But it looks like your original procedure presumes an rm anyway.
Second, if you've got enough RAM to cache your entire database in-memory,
you should adjust your DB_CONFIG and/or back-bdb directives to do so. This
isn't always possible (depends on entry sizes, number of entries, and
other such variables) but if you can do it, the performance is obviously
fantastic. You can determine the right size using the methods in the
FAQ-O-Matic or, since you're really concerned about load times, one
practical method is to run "slapadd -qv" and look if the times between
entries slow down -- the disk writes, being orders of magnitude slower,
are often visible to the naked eye in my experience. At the end you'll
experience a long flush, but that's good -- it should be gunning your I/O
capabilities.
currently the best way to minimize downtime I found is to replace
"directory" line in slapd.conf, then do slapadd "into" new physical
location, and then just stop slapd, change dirname, change directory
line back, and start again. I'm afraid it's actually not slapd issue,
but just some file-reading/adding -related thing.
Well, yes, an atomic mv is going to be quicker than slapadd. IMO the best
way to minimize downtime is to have lots of replicas, so you can afford to
take as long as you desire with a slapadd in any directory you desire...
I'd be happy to jump to 2.4.7 series, but it still seems
a little bit unstable, segfaults sometimes with some
searches.
There are significant performance enhancements in 2.4. Version 2.4.9 seems
to be coming along well and hopefully will fix the seg fault issues you
experience (if you've can, it'd be a great contribution to grab RE24 from
CVS and see if you can reproduce segfaults with those "some searches").