Re: [HACKERS] Re: pgsql: Avoid extra locks in GetSnapshotData if old_snapshot_threshold <
От | Andres Freund |
---|---|
Тема | Re: [HACKERS] Re: pgsql: Avoid extra locks in GetSnapshotData if old_snapshot_threshold < |
Дата | |
Msg-id | 20160615192011.eicg7hwkndyx2cmo@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Re: [HACKERS] Re: pgsql: Avoid extra locks in GetSnapshotData if old_snapshot_threshold < (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: [HACKERS] Re: pgsql: Avoid extra locks in
GetSnapshotData if old_snapshot_threshold <
|
Список | pgsql-committers |
On 2016-06-15 14:50:46 -0400, Robert Haas wrote: > On Wed, Jun 15, 2016 at 2:45 PM, Alvaro Herrera > <alvherre@2ndquadrant.com> wrote: > > Robert Haas wrote: > >> On Wed, Jun 15, 2016 at 1:44 PM, Kevin Grittner <kgrittn@gmail.com> > >> wrote: > >> > The test I showed creates a situation which (to ANALYZE) is > >> > identical to what you describe -- ANALYZE sees a page with an LSN > >> > recent enough that it could have been (and actually has been) > >> > pruned. Why would it be better for the ANALYZE to fail than to > >> > complete? > >> > >> As I understand it, the reason we need to sometimes give "ERROR: > >> snapshot too old" after early pruning is because we might otherwise > >> give the wrong answer. > > > > So what constitutes "the wrong answer"? A regular transaction reading a > > page and not finding a tuple that should have been there but was > > removed, is a serious problem and should be aborted. For ANALYZE it may > > not matter a great deal. Some very old tuple that might have been > > chosen for the sample is not there; a different tuple is chosen instead, > > so the stats might be slightly difference. No big deal. > > > > Maybe it is possible to get into trouble if you're taking a sample for > > an expression index. > > The expression index case is the one to worry about; if there is a > problem, that's where it is. What bothers me is that a function used > in an expression index could do anything at all - it can read any > table in the database. Isn't that also a problem around fetching toast tuples? As we don't TestForOldSnapshot_impl() for toast, We might fetch a toast tuple which since have been re-purposed for a datum of a different type. Which can have arbitrarily bad consequences afaics. Andres
В списке pgsql-committers по дате отправления: