On Tue, Aug 27, 2019 at 12:04:27PM +0200, Uwe Kleine-König wrote: > $ sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"; time env GIT_CONFIG_NOSYSTEM=1 HOME=/nonexistant XDG_CONFIG_HOME=/nonexistant git --no-pager show --no-color --no-decorate v5.2 > ... > > real 0m1.041s > user 0m0.000s > sys 0m0.021s > > $ git for-each-ref |wc -l > 10013 > > So this is indeed the problem. That's not that many refs. Are they mostly unpacked? Loose refs are awful on a cold cache, since it's one inode per ref (or worse, since it has walk the directories, too). Try: find .git/refs -type f | wc -l to see the loose ones. If there are a lot, try: git pack-refs --prune --all (or just "git gc", which does this). Modern versions of Git should delete any leftover empty directories after pruning the loose variants, but I think won't go out of their way to remove ones they didn't delete from. And those are still expensive to walk on a cold cache. If it's still slow, try: find .git/refs/* -type d | xargs rmdir -v -Peff