On 2016-06-16 13:53:01 -0500, Kevin Grittner wrote: > On Thu, Jun 16, 2016 at 1:19 PM, Kevin Grittner <kgri...@gmail.com> wrote: > > On Thu, Jun 16, 2016 at 11:54 AM, Andres Freund <and...@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.wygoktoplycdz...@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 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers