Shame on me! I've sent an erroneous patch set. Version 7 is defective. Here is the proper version v8 with minor refactoring in segresize.c.
Also, I rename bump cat version patch into txt in order not to break cfbot. -- Best regards, Maxim Orlov.
From 73b8663093ff1c58def9a80abab142a12c993bf6 Mon Sep 17 00:00:00 2001 From: Maxim Orlov <orlo...@gmail.com> Date: Wed, 13 Nov 2024 16:34:34 +0300 Subject: [PATCH v8 5/5] TEST: bump catver --- src/bin/pg_upgrade/pg_upgrade.h | 2 +- src/include/catalog/catversion.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bin/pg_upgrade/pg_upgrade.h b/src/bin/pg_upgrade/pg_upgrade.h index 2c85ec1e94..18faedc963 100644 --- a/src/bin/pg_upgrade/pg_upgrade.h +++ b/src/bin/pg_upgrade/pg_upgrade.h @@ -119,7 +119,7 @@ extern char *output_files[]; * * XXX: should be changed to the actual CATALOG_VERSION_NO on commit. */ -#define MULTIXACTOFFSET_FORMATCHANGE_CAT_VER 202409041 +#define MULTIXACTOFFSET_FORMATCHANGE_CAT_VER 202411112 /* * large object chunk size added to pg_controldata, diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 5dd91e190a..3d09caf5ae 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -57,6 +57,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202411111 +#define CATALOG_VERSION_NO 202411112 #endif -- 2.43.0
v8-0002-Use-64-bit-multixact-offsets.patch
Description: Binary data
generate.sh
Description: Bourne shell script
test.sh
Description: Bourne shell script
#!/usr/bin/env python3 import sys; import threading; import psycopg2; def test_multixact(tblname: str): with psycopg2.connect(dbname="postgres") as conn: cur = conn.cursor() cur.execute( f""" DROP TABLE IF EXISTS {tblname}; CREATE TABLE {tblname}(i int primary key, n_updated int) WITH (autovacuum_enabled=false); INSERT INTO {tblname} select g, 0 from generate_series(1, 50) g; """ ) # Lock entries using parallel connections in a round-robin fashion. nclients = 50 update_every = 97 connections = [] for _ in range(nclients): # Do not turn on autocommit. We want to hold the key-share locks. conn = psycopg2.connect(dbname="postgres") connections.append(conn) # On each iteration, we commit the previous transaction on a connection, # and issue another select. Each SELECT generates a new multixact that # includes the new XID, and the XIDs of all the other parallel transactions. # This generates enough traffic on both multixact offsets and members SLRUs # to cross page boundaries. for i in range(20000): conn = connections[i % nclients] conn.commit() # Perform some non-key UPDATEs too, to exercise different multixact # member statuses. if i % update_every == 0: conn.cursor().execute(f"update {tblname} set n_updated = n_updated + 1 where i = {i % 50}") else: conn.cursor().execute(f"select * from {tblname} for key share") test_multixact(sys.argv[1])
v8-0001-Use-64-bit-format-output-for-multixact-offsets.patch
Description: Binary data
v8-0004-Get-rid-of-MultiXactMemberFreezeThreshold-call.patch
Description: Binary data
v8-0003-Make-pg_upgrade-convert-multixact-offsets.patch
Description: Binary data