On Thu, Mar 14, 2019 at 5:17 PM Pavan Deolasee <pavan.deola...@gmail.com> wrote: > > > > On Wed, Mar 13, 2019 at 11:37 AM Masahiko Sawada <sawada.m...@gmail.com> > wrote: >> >> >> >> I think that since COPY FREEZE can be executed only when the table is >> created or truncated within the transaction other users cannot insert >> any rows during COPY FREEZE. >> > > Right. But the truncating transaction can insert unfrozen rows into the table > before inserting more rows via COPY FREEZE. > > postgres=# CREATE EXTENSION pageinspect ; > CREATE EXTENSION > postgres=# BEGIN; > BEGIN > postgres=# TRUNCATE testtab ; > TRUNCATE TABLE > postgres=# INSERT INTO testtab VALUES (100, 200); > INSERT 0 1 > postgres=# COPY testtab FROM STDIN WITH (FREEZE); > Enter data to be copied followed by a newline. > End with a backslash and a period on a line by itself, or an EOF signal. > >> 1 2 > >> 2 3 > >> \. > COPY 2 > postgres=# COMMIT; > > postgres=# SELECT lp, to_hex(t_infomask) FROM > heap_page_items(get_raw_page('testtab', 0)); > lp | to_hex > ----+-------- > 1 | 800 > 2 | b00 > 3 | b00 > (3 rows) > > The first row in inserted by regular insert and it's not frozen. The next 2 > are frozen. We can't mark such as page all-visible, all-frozen.
Understood. Thank you for explanation! > >> >> >> I'd suggest to measure performance overhead. I can imagine one use >> case of COPY FREEZE is the loading a very large table. Since in >> addition to set visibility map bits this patch could scan a very large >> table I'm concerned that how much performance is degraded by this >> patch. > > > Ok. I will run some tests. But please note that this patch is a bug fix to > address the performance issue that is caused by having to rewrite the entire > table when all-visible bit is set on the page during first vacuum. So while > we may do some more work during COPY FREEZE, we're saving a lot of page > writes during next vacuum. Also, since the scan that we are doing in this > patch is done on a page that should be in the buffer cache, we will pay a bit > in terms of CPU cost, but not anything in terms of IO cost. Agreed. I had been misunderstanding this patch. The page scan during COPY FREEZE is necessary and it's very cheaper than doing in the first vacuum. Regards, -- Masahiko Sawada NIPPON TELEGRAPH AND TELEPHONE CORPORATION NTT Open Source Software Center