From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Greg Sabino Mullane <htamfids(at)gmail(dot)com> |
Cc: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>, pgsql-general(at)lists(dot)postgresql(dot)org |
Subject: | Re: Repeatable Read Isolation Level "transaction start time" |
Date: | 2024-10-05 19:09:39 |
Message-ID: | 1067324.1728155379@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Greg Sabino Mullane <htamfids(at)gmail(dot)com> writes:
> All we can guarantee
> via pg_stat_activity is that if xact_start and query_start *are* identical,
> no snapshot has been granted yet,
Surely that's not true either. xact_start = query_start implies that
the current statement is the first in its transaction (assuming
sufficiently fine-grained clock timestamps, something I'm not sure is
an entirely safe assumption). But if that statement is not simply
a BEGIN, it's likely obtained its own transaction snapshot after a
few microseconds.
As long as "read the system clock" is a distinct operation from
"read a snapshot", there are going to be skew issues here. We
could maybe eliminate that by reading the clock while holding the
lock that prevents commits while reading a snapshot, but I doubt
that anybody is going to accept that on performance grounds.
Adding a not-guaranteed-cheap syscall inside that extremely hot
code path seems unsatisfactory.
Also, we currently do guarantee that xact_start matches query_start
for the first statement of the transaction (the converse of what
I said above). Removing that guarantee in order to add some other
one wouldn't necessarily please everybody.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Klaver | 2024-10-05 20:11:56 | Re: grant connect to all databases |
Previous Message | Tom Lane | 2024-10-05 18:57:59 | Re: grant connect to all databases |