I pushed this patch after rewriting it rather completely. I added tracing notices to inspect the blocks it was prefetching and observed that the original coding was failing to prefetch the final streak of blocks in the table, which is an important oversight considering that it may very well be that those are the only blocks to read at all.
I timed vacuuming a 4000-block table in my laptop (single SSD disk; dropped FS caches after deleting all rows in table, so that vacuum has to read all blocks from disk); it changes from 387ms without patch to 155ms with patch. I didn't measure how much it takes to run the other steps in the vacuum, but it's clear that the speedup for the truncation phase is considerable. ¡Thanks, Claudio! -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers