Re: another autovacuum scheduling thread
От | David Rowley |
---|---|
Тема | Re: another autovacuum scheduling thread |
Дата | |
Msg-id | CAApHDvqrd=SHVUytdRj55OWnLH98Rvtzqam5zq2f4XKRZa7t9Q@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: another autovacuum scheduling thread (Robert Haas <robertmhaas@gmail.com>) |
Список | pgsql-hackers |
On Sat, 11 Oct 2025 at 07:43, Robert Haas <robertmhaas@gmail.com> wrote: > I think this is a reasonable starting point, although I'm surprised > that you chose to combine the sub-scores using + rather than Max. Adding up the component scores doesn't make sense to me either. That means you could have 0.5 for inserted tuples, 0.5 for dead tuples and, say 0.1 for analyze threshold, which all add up to 1.1, but neither component score is high enough for auto-vacuum to have to do anything yet. With Max(), we'd clearly see that there's nothing to do since the overall score isn't >= 1.0. > - The wraparound score can't be more than about 10, but the bloat > score could be arbitrarily large, especially for tables with few > tuples, so there may be lots of cases in which the wraparound score > has no impact on the behavior. That's a good point. I think we definitely do want to make it so tables in near danger of causing the database to stop accepting transactions are dealt with ASAP. Maybe the score calculation could change when the relevant age() goes above vacuum_failsafe_age / vacuum_multixact_failsafe_age and start scaling it very aggressively beyond that. There's plenty to debate, but at a first cut, maybe something like the following (coded in SQL for ease of result viewing): select xidage as "age(relfrozenxid)",case xidage::float8 < current_setting('vacuum_failsafe_age')::float8 when true then xidage / current_setting('autovacuum_freeze_max_age')::float8 else power(xidage / current_setting('autovacuum_freeze_max_age')::float8,xidage::float8 / 100_000_000) end xid_age_score from generate_series(0,2_000_000_000,100_000_000) xidage; which gives 1e+20 for age of 2 billion. It would take quite an unreasonable amount of bloat to score higher than that. I guess someone might argue that we should start taking it more seriously before the table's relfrozenxid age gets to vacuum_failsafe_age. Maybe that's true. I just don't know what. In any case, if a table's age gets that old, then something's probably not configured very well and needs attention. I did think maybe we could keep the addressing of auto-vacuum being configured to run too slowly as a separate thread. David
В списке pgsql-hackers по дате отправления: