Jim Nasby wrote: > On Jul 27, 2007, at 1:49 AM, Alvaro Herrera wrote: >> ITAGAKI Takahiro wrote: >>> "Simon Riggs" <[EMAIL PROTECTED]> wrote: >>> >>>> Read the heap blocks in sequence, but make a conditional lock for >>>> cleanup on each block. If we don't get it, sleep, then try again when we >>>> wake up. If we fail the second time, just skip the block completely. >> >> It would be cool if we could do something like sweep a range of pages, >> initiate IO for those that are not in shared buffers, and while that is >> running, lock and clean up the ones that are in shared buffers, skipping >> those that are not lockable right away; when that's done, go back to >> those buffers that were gotten from I/O and clean those up. And retry >> the locking for those that couldn't be locked the first time around, >> also conditionally. And when that's all done, a third pass could get >> those blocks that weren't cleaned up in none of the previous passes (and >> this time the lock would not be conditional). > > Would that be substantially easier than just creating a bgreader?
I'm not sure about easier, but I'm not sure that the bgreader can do the same job. ISTM that the bgreader would be mostly in charge of reading in advance of backends, whereas what I'm proposing is mostly about finding the best spot for locking. It might turn out to be more trouble than it's worth though, for sure. And in any case I'm not in a hurry to implement it. In any case I'm not so sure about skipping vacuuming a block if it's not lockable. -- Alvaro Herrera http://www.amazon.com/gp/registry/CTMLCN8V17R4 "Crear es tan difĂcil como ser libre" (Elsa Triolet) ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend