Bruce Momjian wrote:
Gregory Stark wrote:
"Bruce Momjian" <[EMAIL PROTECTED]> writes:

On Tue, 2008-03-18 at 03:59 +0000, Bruce Momjian wrote:
* Speed WAL recovery by allowing more than one page to be prefetched

  This involves having a separate process that can be told which pages
  the recovery process will need in the near future.
Are you reading the same thread I am?  See:

        http://archives.postgresql.org/pgsql-hackers/2008-02/msg01301.php
I don't think there's any consensus for the approach you describe above. If
anything it seemed the least objectionable form was something involving
posix_fadvise or libaio.

The least objectionable form is probably Aidan Van Dyk's suggestion of doing it in restore_command, completely outside the backend. It would need deep knowledge of the WAL format, but other than that, you could implement it as a pgfoundry project, side-stepping any objections we on pgsql-hackers might have :-).

Tom did wave us off from Simon's approach on the basis of it being hard to
test and Heikki seemed to be agreeing on the basis that it would be better to
reuse infrastructure useful in other cases as well. So I guess that's some
kind of consensus... of two.

Yep, that was my analysis too.

A "separate process that can be told which pages the recovery process will need in the future" doesn't imply posix_fadvise or libaio or anything like that to me. It sounds like a background reader process, but only one of those is hardly enough.

And it doesn't mention the point Tom raised that we shouldn't invent anything specific to WAL replay.

How about:

* Speed WAL recovery by allowing more than one page to be prefetched

This should be done utilizing the same infrastructure used for prefetching in general, to avoid introducing complex, error-prone code to WAL replay codepath, which doesn't get much testing compared to the rest of the system.

There's already this TODO item:

Experiment with multi-threaded backend better resource utilization

This would allow a single query to make use of multiple CPU's or multiple I/O channels simultaneously. One idea is to create a background reader that can pre-fetch sequential and index scan pages needed by other backends. This could be expanded to allow concurrent reads from multiple devices in a partitioned table.

This should probably be split into two. Using multiple CPUs for satisfying one query is quite different from implementing some kind of a pre-fetching mechanism using posix_fadvise(), libaio, or background reader processes.

--
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

--
Sent via pgsql-committers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

Reply via email to