fsync is really killing xapian (and notmuch). What suffers, are the boolean prefixes (tag, id, and thread). Using libeatmydata (which disables fsync) shows a 10x speedup for tagging. The speedup is only factor 2 for e.g. from: searches. This is ext4 on recent stock Ubuntu. Given that search by tag and thread are performed really often (each time I advance a thread, for example), that really hurts. With a warm file cache and a thread containing 11 messages: --------------------------------------------------- time notmuch tag +test -- thread:0000000000000f4e real 0m0.677s user 0m0.030s sys 0m0.020s --------------------------------------------------- time LD_PRELOAD=./libeatmydata.so notmuch tag +test -- thread:0000000000000f4e real 0m0.040s user 0m0.020s sys 0m0.020s --------------------------------------------------- However tagging ~850 messages based on a from search is "ONLY" factor 2: ------------------------------------------------------ time notmuch tag +test -- from:"sebastian@sspaeth.de" real 0m2.355s user 0m1.240s sys 0m0.040s --------------------------------------------------- time LD_PRELOAD=./libeatmydata.so notmuch tag +test -- from:"sebastian@sspaeth.de" real 0m1.286s user 0m1.230s sys 0m0.010s ---------------------------------------------------