Re: [HACKERS] Increase Vacuum ring buffer. - Mailing list pgsql-hackers
From | Stephen Frost |
---|---|
Subject | Re: [HACKERS] Increase Vacuum ring buffer. |
Date | |
Msg-id | 20170720190405.GM1769@tamriel.snowman.net Whole thread Raw |
In response to | Re: [HACKERS] Increase Vacuum ring buffer. (Robert Haas <robertmhaas@gmail.com>) |
Responses |
Re: [HACKERS] Increase Vacuum ring buffer.
|
List | pgsql-hackers |
Robert, * Robert Haas (robertmhaas@gmail.com) wrote: > On Thu, Jul 20, 2017 at 12:16 PM, Sokolov Yura > <funny.falcon@postgrespro.ru> wrote: > > But in fact, vacuum process performs FSYNC! It happens, cause vacuum > > evicts dirty pages from its ring buffer. And to evict dirty page, it > > has to be sure WAL record about its modification is FSYNC-ed to WAL. > > Because ring buffer is damn small, vacuum almost always have to perform > > FSYNC by itself and have to do it very frequently (cause ring is damn > > small). > > > > With greater ring buffer, there is greater chance that fsync were > > performed by wal_writer process, or other backend. And even if > > vacuum does fsync by itself, it syncs records about more modified > > pages from its ring, so evicting next page is free. > > OK, but I have helped *many* customers whose problem was that vacuum > ran too fast and blew data out of the OS cache causing query response > times to go through the roof. That's a common problem. Making VACUUM > run faster will presumably make it more common. I've also run into > many customers whose problem that vacuum ran too slowly, and generally > raising vacuum_cost_limit fixes that problem just fine. So I don't > think it's nearly as clear as you do that making VACUUM run faster is > desirable. I agree that it's a common problem for VACUUM to go too fast, or for VACUUM to go too slow, but that's really what the vacuum_cost_limit mechanism is for. I can see an argument that existing tuned systems which have been expecting the small ring-buffer to help slow down VACUUM may have to be adjusted to handle a change, though I would think that other changes we've made might also require changes to vacuum costing, so I'm not sure that this is particularly different in that regard. What I don't agree with is holding off on improving VACUUM in the case where cost delay is set to zero because we think people might be depending on it only going so fast in that case. If the cost delay is set to zero, then VACUUM really should be going as fast as it can and we should welcome improvments in that area in much the same way that we welcome performance improvements in sorting and other backend algorithms. > > If some fears that increasing vacuum ring buffer will lead to > > decreasing transaction performance, then why it were not exhaustively > > tested? > > If you want something changed, it's your job to do that testing. > Asking why nobody else tested the effects of changing the thing you > want changed is like asking why nobody else wrote the patch you want > written. I do agree with this. Asking for others to also test is fine, but it's the patch submitter who needs to ensure that said testing actually happens and that results are provided to -hackers to support the change. In particular, multiple different scenarios (DB all in shared_buffers, DB all in OS cache, DB not able to fit in memory at all, etc) should be tested. > > And possible community will decide, that it should be GUC variable: > > - if one prefers to keep its database unbloated, he could increase > > vacuum ring buffer, > > - otherwise just left it in "safe-but-slow" default. > > That's a possible outcome, but I don't think this discussion is really > going anywhere unless you are willing to admit that increasing VACUUM > performance could have some downsides. If you're not willing to admit > that, there's not a lot to talk about here. I'd rather we encourage people to use the existing knobs for tuning VACUUM speed rather than adding another one that ends up being actually only a proxy for speed. If there's a memory utilization concern here, then having a knob for that might make sense, but it sounds like the concern here is more about the speed and less about coming up with a reasonable way to scale the size of the ring buffer. Of course, I'm all for coming up with a good way to size the ring buffer, and providing a knob if we aren't able to do so, I just don't want to add unnecessary knobs if we don't need them. Thanks! Stephen
pgsql-hackers by date: