From: | Peter Geoghegan <pg(at)bowt(dot)ie> |
---|---|
To: | Michael Paquier <michael(at)paquier(dot)xyz> |
Cc: | Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Justin Pryzby <pryzby(at)telsasoft(dot)com>, Andres Freund <andres(at)anarazel(dot)de>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Teaching users how they can get the most out of HOT in Postgres 14 |
Date: | 2021-06-15 02:46:17 |
Message-ID: | CAH2-Wz=9-_0bBP3FL5n8aaFuEPAoe4WimtUBKdKdDyvesH0TqQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Mon, Jun 14, 2021 at 5:23 PM Michael Paquier <michael(at)paquier(dot)xyz> wrote:
> > *Why* does it have to work at the system level? I don't understand
> > what you mean about the system level.
>
> I mean that you lack a GUC that allows to enforce to *not* use this
> optimization for all relations, for all processes.
You've just explained what a GUC is. This is not helpful.
> > Why is this fundamentally different to those two things?
>
> Because the situation looks completely different to me here. TRUNCATE
> is thought as a option to be able to avoid an exclusive lock when
> truncating the relation file size at the end of VACUUM. More
> importantly the default of TRUNCATE is *false*, meaning that we are
> never going to skip the truncation unless one specifies it at the
> relation level.
Maybe it looks different to you because that's not actually true;
VACUUM *does* skip the truncation when it feels like it, regardless of
the value of the reloption. In general there is no strict guarantee of
truncation ever happening -- see lazy_truncate_heap().
Again: Why is this fundamentally different?
> Here, what we have is a decision that is enforced to happen by
> default, all the time, with the user not knowing about it. If there
> is a bug of an issue with it, users, based on your proposal, would be
> forced to change it for each *relation*. If they miss some of those
> relations, they may still run into problems without knowing about it.
> The change of default behavior and having no way to control it in
> a simple way look incompatible to me.
You've just explained what a reloption is. Again, this is not helping.
> Perhaps. What I am really scared about is that you are assuming that
> enforcing this decision will be *always* fine.
I very clearly and repeatedly said that there was uncertainty about
causing issues in rare real world cases. Are you always 100% certain
that your code has no bugs before you commit it?
Should I now add a GUC for every single feature that I commit? You are
just asserting that we must need to add a GUC, without giving any real
reasons -- you're just giving generic reasons that work just as well
in most situations. I'm baffled by this.
> What I am trying to
> say here is that it *may not* be fine for everybody, and that there
> should be an easy way to turn it off if that proves to be a problem.
As I said, I think that the relationship is both necessary and
sufficient. A GUC is a heavyweight solution that seems quite
unnecessary.
> I don't quite see how that's an implementation problem, we have
> already many reloptions that are controlled with GUCs if the
> reloptions have no default.
I never said that there was an implementation problem with a GUC. Just
that it was unnecessary, and not consistent with existing practice.
Does anyone else have an opinion on this? Of course I can easily add a
GUC. But I won't do so in the absence of any real argument in favor of
it.
> I think that a more careful choice implementation would have been to
> turn this optimization off by default, while having an option to allow
> one to turn it on at will.
You have yet to say anything about the implementation.
--
Peter Geoghegan
From | Date | Subject | |
---|---|---|---|
Next Message | Julien Rouhaud | 2021-06-15 02:48:44 | Re: Duplicate history file? |
Previous Message | Michael Paquier | 2021-06-15 02:39:24 | Re: Different compression methods for FPI |