Re: row filtering for logical replication
Peter Smith <smithpb2250@gmail.com>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Release cache tuple when no longer needed
- ed0fbc8e5ac9 15.0 landed
-
Add some additional tests for row filters in logical replication.
- ceb57afd3ce1 15.0 landed
-
Fix one of the tests introduced in commit 52e4f0cd47.
- cfb4e209ec15 15.0 landed
-
Allow specifying row filters for logical replication of tables.
- 52e4f0cd472d 15.0 landed
-
Move scanint8() to numutils.c
- cfc7191dfea3 15.0 cited
-
Replace Test::More plans with done_testing
- 549ec201d613 15.0 cited
-
Reduce relcache access in WAL sender streaming logical changes
- 6ce16088bfed 15.0 cited
-
Small cleanups related to PUBLICATION framework code
- c9105dd3660f 15.0 cited
-
Add a view to show the stats of subscription workers.
- 8d74fc96db5f 15.0 cited
-
Allow publishing the tables of schema.
- 5a2832465fd8 15.0 cited
-
Doc: improve documentation of CREATE/ALTER SUBSCRIPTION.
- 1882d6cca161 15.0 cited
-
Add PublicationTable and PublicationRelInfo structs
- 0c6828fa987b 15.0 cited
-
Remove unused argument "txn" in maybe_send_schema().
- 93d573d86571 15.0 cited
-
Add prepare API support for streaming transactions in logical replication.
- 63cf61cdeb7b 15.0 cited
-
Unify PostgresNode's new() and get_new_node() methods
- 201a76183e20 15.0 cited
-
Use l*_node() family of functions where appropriate
- 2b00db4fb0c7 15.0 cited
-
Add support for prepared transactions to built-in logical replication.
- a8fd13cab0ba 15.0 cited
-
Restore the portal-level snapshot after procedure COMMIT/ROLLBACK.
- ef9480509622 11.13 cited
-
Rename a parse node to be more general
- 91d1f2d30210 14.0 landed
-
Remove unused column atttypmod from initial tablesync query
- 4ad31bb2ef25 14.0 landed
-
SEARCH and CYCLE clauses
- 3696a600e229 14.0 cited
Attachments
- workload-d.PNG (image/png)
On Fri, Feb 4, 2022 at 2:26 AM Ajin Cherian <itsajin@gmail.com> wrote: > > On Sat, Jan 29, 2022 at 11:31 AM Andres Freund <andres@anarazel.de> wrote: > > > > Hi, > > > > Are there any recent performance evaluations of the overhead of row filters? I > > think it'd be good to get some numbers comparing: > > > > 1) $workload with master > > 2) $workload with patch, but no row filters > > 3) $workload with patch, row filter matching everything > > 4) $workload with patch, row filter matching few rows > > > > For workload I think it'd be worth testing: > > a) bulk COPY/INSERT into one table > > b) Many transactions doing small modifications to one table > > c) Many transactions targetting many different tables > > d) Interspersed DDL + small changes to a table > > > > Here's the performance data results for scenario d: > > HEAD "with patch no row filter" "with patch 0%" "row-filter-patch > 25%" "row-filter-patch v74 50%" "row-filter-patch 75%" > "row-filter-patch v74 100%" > 1 65.397639 64.414034 5.919732 20.012096 36.35911 49.412548 64.508842 > 2 65.641783 65.255775 5.715082 20.157575 36.957403 51.355821 65.708444 > 3 65.096526 64.795163 6.146072 21.130709 37.679346 49.568513 66.602145 > 4 65.173569 64.644448 5.787197 20.784607 34.465133 55.397313 63.545337 > 5 65.791092 66.000412 5.642696 20.258802 36.493626 52.873252 63.511428 > > The performance is similar to the other scenarios. > The script used is below: > > CREATE TABLE test (key int, value text, value1 text, data jsonb, > PRIMARY KEY(key, value)); > > CREATE PUBLICATION pub_1 FOR TABLE test WHERE (key > 0); -- 100% allowed > CREATE PUBLICATION pub_1 FOR TABLE test WHERE (key > 250000); -- 75% allowed > CREATE PUBLICATION pub_1 FOR TABLE test WHERE (key > 500000); -- 50% allowed > CREATE PUBLICATION pub_1 FOR TABLE test WHERE (key > 750000); -- 25% allowed > CREATE PUBLICATION pub_1 FOR TABLE test WHERE (key > 1000000); -- 0% allowed > > DO > $do$ > BEGIN > FOR i IN 1..1000001 BY 4000 LOOP > Alter table test alter column value1 TYPE varchar(30); > INSERT INTO test VALUES(i,'BAH', row_to_json(row(i))); > Alter table test ALTER COLUMN value1 TYPE text; > UPDATE test SET value = 'FOO' WHERE key = i; > COMMIT; > END LOOP; > END > $do$; > Just for completeness, I have shown Ajin's workload "d" test results as a bar chart same as for the previous perf test posts: HEAD 65.40 v74 no filters 64.90 v74 allow 100% 64.59 v74 allow 75% 51.27 v74 allow 50% 35.97 v74 allow 25% 20.40 v74 allow 0% 5.78 PSA. ------ Kind Regards, Peter Smith. Fujitsu Australia