On Fri, Apr 3, 2020 at 9:02 AM Amit Kapila <amit.kapil...@gmail.com> wrote: > > On Fri, Apr 3, 2020 at 8:55 AM Dilip Kumar <dilipbal...@gmail.com> wrote: > > > > I think now I got the reason. Basically, both of these records are > > storing the FPW, and FPW size can vary based on the hole size on the > > page. If hold size is smaller the image length will be more, the > > image_len= BLCKSZ-hole_size. So in subsequent records, the image size > > is bigger. > > > > This means if we always re-create the database or may be keep > full_page_writes to off, then we should get consistent WAL usage data > for all tests.
With new database, it is always the same. But, with full-page write, I could see one of the create index is writing extra wal and if we change the older then the new create index at that place will write extra wal. I guess that could be due to a non-in place update in some of the system tables. postgres[58554]=# create extension pg_stat_statements; CREATE EXTENSION postgres[58554]=# postgres[58554]=# create table t1(id integer); CREATE TABLE postgres[58554]=# insert into t1 select * from generate_series(1, 1000000); INSERT 0 1000000 postgres[58554]=# select * from pg_stat_statements_reset() ; pg_stat_statements_reset -------------------------- (1 row) postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 0); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_0 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 1); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_1 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 2); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_2 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 3); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_3 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 4); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_4 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 5); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_5 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 6); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_6 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 7); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_7 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# alter table t1 set (parallel_workers = 8); ALTER TABLE postgres[58554]=# vacuum;checkpoint; VACUUM CHECKPOINT postgres[58554]=# create index t1_idx_parallel_8 ON t1(id); CREATE INDEX postgres[58554]=# postgres[58554]=# select query, calls, wal_bytes, wal_records, wal_num_fpw from pg_stat_statements where query ilike '%create index%'; query | calls | wal_bytes | wal_records | wal_num_fpw ------------------------------------------+-------+-----------+-------------+------------- create index t1_idx_parallel_0 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_1 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_3 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_2 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_4 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_8 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_6 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_7 ON t1(id) | 1 | 20355953 | 2766 | 2745 create index t1_idx_parallel_5 ON t1(id) | 1 | 20359585 | 2767 | 2745 -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com