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 | 20160616185748.32pjujl37xfo7rh7@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Re: [HACKERS] Re: pgsql: Avoid extra locks in GetSnapshotData if old_snapshot_threshold < (Kevin Grittner <kgrittn@gmail.com>) |
Ответы |
Re: [HACKERS] Re: pgsql: Avoid extra locks in
GetSnapshotData if old_snapshot_threshold <
|
Список | pgsql-committers |
On 2016-06-16 13:53:01 -0500, Kevin Grittner wrote: > On Thu, Jun 16, 2016 at 1:19 PM, Kevin Grittner <kgrittn@gmail.com> wrote: > > On Thu, Jun 16, 2016 at 11:54 AM, Andres Freund <andres@anarazel.de> wrote: > >> On 2016-06-16 12:43:34 -0400, Robert Haas wrote: > > >>> Maybe it would help if you lay out the whole sequence of events, like: > >>> > >>> S1: Does this. > >>> S2: Does that. > >>> S1: Now does something else. > >> > >> I presume it'd be something like: > >> > >> Assuming a 'toasted' table, which contains one row, with a 1GB field. > >> > >> S1: BEGIN REPEATABLE READ; > >> S1: SELECT SUM(length(one_gb_record)) FROM toasted; > >> S2: DELETE FROM toasted; > >> AUTOVAC: vacuum toasted's toast table, it's large. skip toasted, it's small > >> S1: SELECT SUM(length(one_gb_record)) FROM toasted; > >> <missing chunk error> > > > > I'll put together a test like that and post in a bit. > > old_snapshot_threshold = '1min' > autovacuum_vacuum_threshold = 0\ > autovacuum_vacuum_scale_factor = 0.0000000001 > > test=# CREATE TABLE gb (rec bytea not null); > CREATE TABLE > test=# ALTER TABLE gb ALTER COLUMN rec SET STORAGE external; > ALTER TABLE > test=# INSERT INTO gb SELECT t FROM (SELECT repeat('x', > 1000000000)::bytea) x(t); > INSERT 0 1 > test=# BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; > BEGIN > test=# SELECT SUM(length(rec)) FROM gb; > sum > ------------ > 1000000000 > (1 row) > > [wait for autovacuum to run] > > test=# SELECT SUM(length(rec)) FROM gb; > ERROR: snapshot too old See https://www.postgresql.org/message-id/20160616183207.wygoktoplycdzav7@alap3.anar for a recipe that reproduce the issue. I presume your example also vacuums the main table due to the threshold and scale factor you set (which will pretty much alwasy vacuum a table, no?). Andres Freund
В списке pgsql-committers по дате отправления: