Re: [PATCH v4] parallel pg_restore: avoid disk seeks when jumping short distance forward

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Dimitrios Apostolou <jimis@gmx.net>
Cc: Chao Li <li.evan.chao@gmail.com>, Nathan Bossart <nathandbossart@gmail.com>, Thomas Munro <thomas.munro@gmail.com>, pgsql-hackers@lists.postgresql.org
Date: 2025-10-20T22:23:27Z
Lists: pgsql-hackers
Dimitrios Apostolou <jimis@gmx.net> writes:
> Thanks for the extensive testing! Did you see the same syscall pattern in strace output, as I did?

Yes, I did look at that, and it's the same as you saw:
HEAD repeats

        read(4k)
        lseek(~128k forward)

which is to be expected if we have to read data block headers
that are ~128K apart; while patched repeats

         read(4k)
         read(~128k)

which is a bit odd in itself, why isn't it merging the reads better?

> I was using an HDD,

Ah.  Your original message mentioned NVMe so I was assuming you
were also looking at solid-state drives.  I can imagine that
seeking is more painful on HDDs ...

			regards, tom lane



Commits

  1. Avoid short seeks in pg_restore.

  2. Don't rely on zlib's gzgetc() macro.

  3. Add more TAP test coverage for pg_dump.

  4. Split 002_pg_dump.pl into two test files.

  5. Align the data block sizes of pg_dump's various compression modes.

  6. Fix serious performance problems in LZ4Stream_read_internal.

  7. Fix poor buffering logic in pg_dump's lz4 and zstd compression code.

  8. Fix issue with reading zero bytes in Gzip_read.

  9. Restore test coverage of LZ4Stream_gets().