Remove duplicate table scan in logical apply worker and code refactoring - Mailing list pgsql-hackers

From Zhijie Hou (Fujitsu)
Subject Remove duplicate table scan in logical apply worker and code refactoring
Date
Msg-id OS0PR01MB571623E39984D94CBB5341D994AB2@OS0PR01MB5716.jpnprd01.prod.outlook.com
Whole thread Raw
Responses Re: Remove duplicate table scan in logical apply worker and code refactoring
Re: Remove duplicate table scan in logical apply worker and code refactoring
RE: Remove duplicate table scan in logical apply worker and code refactoring
List pgsql-hackers
Hi,

When reviewing the code in logical/worker.c, I noticed that when applying a
cross-partition update action, it scans the old partition twice.
I am attaching the patch 0001 to remove this duplicate table scan.

The test shows that it brings noticeable improvement:

Steps
-----
Pub:
create table tab (a int not null, b int);
alter table tab replica identity full;
insert into tab select 1,generate_series(1, 1000000, 1);

Sub:
create table tab (a int not null, b int) partition by range (b);
create table tab_1 partition of tab for values from (minvalue) to (5000000);
create table tab_2 partition of tab for values from (5000000) to (maxvalue);
alter table tab replica identity full;


Test query:
update tab set b = 6000000 where b > 999900; -- UPDATE 100

Results (The time spent by apply worker to apply the all the UPDATEs):
Before    14s
After    7s
-----

Apart from above, I found there are quite a few duplicate codes related to partition
handling(e.g. apply_handle_tuple_routing), so I tried to extract some
common logic to simplify the codes. Please see 0002 for this refactoring.

Best Regards,
Hou Zhijie


Attachment

pgsql-hackers by date:

Previous
From: Peter Eisentraut
Date:
Subject: Re: Add 64-bit XIDs into PostgreSQL 15
Next
From: Amit Kapila
Date:
Subject: Re: Conflict detection and logging in logical replication