Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKh9M-0007LS-DB for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Mar 2021 12:44:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lKh9L-0005ey-Bp for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Mar 2021 12:44:15 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKh9K-0005cO-Tn for pgsql-hackers@lists.postgresql.org; Fri, 12 Mar 2021 12:44:15 +0000 Received: from forwardcorp1o.mail.yandex.net ([2a02:6b8:0:1a2d::193]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKh9D-00036j-LX for pgsql-hackers@postgresql.org; Fri, 12 Mar 2021 12:44:14 +0000 Received: from sas1-6b1512233ef6.qloud-c.yandex.net (sas1-6b1512233ef6.qloud-c.yandex.net [IPv6:2a02:6b8:c14:44af:0:640:6b15:1223]) by forwardcorp1o.mail.yandex.net (Yandex) with ESMTP id 8BDAB2E1506; Fri, 12 Mar 2021 15:44:05 +0300 (MSK) Received: from sas2-d40aa8807eff.qloud-c.yandex.net (sas2-d40aa8807eff.qloud-c.yandex.net [2a02:6b8:c08:b921:0:640:d40a:a880]) by sas1-6b1512233ef6.qloud-c.yandex.net (mxbackcorp/Yandex) with ESMTP id OOdIDWslGy-i40avxOJ; Fri, 12 Mar 2021 15:44:05 +0300 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1615553045; bh=53AmftvBl4hxwMYq/EPuBN7EjzeMBBaVahJbaCaJtyY=; h=To:References:Date:Subject:Cc:Message-Id:From:In-Reply-To; b=PD+hd07t7Azv6G2Ub/0QEJ9x/SFQ+UiskM1m3V0IDBVZf1DFXaGJFhh9wbstUdeOV CAOEzseLjyZE9K4YzdBEkQdnlcGzDkuTm68DhICI6Ock0UA7Y9uIINj0OYRj36l202 WZSw/NTVIGOviGoeuUywit3MmIebRCml6ILZhioo= Authentication-Results: sas1-6b1512233ef6.qloud-c.yandex.net; dkim=pass header.i=@yandex-team.ru Received: from dynamic-vpn.dhcp.yndx.net (dynamic-vpn.dhcp.yndx.net [2a02:6b8:b080:8001::1:e]) by sas2-d40aa8807eff.qloud-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id 7AWhSTUxBh-i3oa6x08; Fri, 12 Mar 2021 15:44:03 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client certificate not present) From: Andrey Borodin Message-Id: <3768803E-4794-409D-88D2-C3EF7CA1B7FC@yandex-team.ru> Content-Type: multipart/mixed; boundary="Apple-Mail=_2C8D8298-78B4-457A-B966-F61655699F35" Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\)) Subject: Re: MultiXact\SLRU buffers configuration Date: Fri, 12 Mar 2021 17:44:02 +0500 In-Reply-To: <04ae150b-6442-148a-bb23-77082f6fca1d@darold.net> Cc: Tomas Vondra , Tomas Vondra , Alexander Korotkov , Anastasia Lubennikova , Daniel Gustafsson , Kyotaro Horiguchi , pgsql-hackers To: Gilles Darold References: <20201028013651.de5cj2xadgmba5nf@development> <13D8FD63-559A-4737-B7FD-05288D1CEF8B@yandex-team.ru> <20201028233243.ygm6yqlynkqpzekr@development> <43F3DE92-F236-4EA5-B4D6-39BEF6BD849D@yandex-team.ru> <20201029134933.xd4mh2cofuf6tdfz@development> <65C1B4BA-D16F-4939-978B-AC8F370F5A5E@yandex-team.ru> <9b4d17df-b811-8323-16be-3cab913216d1@enterprisedb.com> <35862787-8b4d-a290-789e-6e12dc6527e8@enterprisedb.com> <13F86913-C01B-4983-AE2E-493F5A028280@yandex-team.ru> <6ba7eae2-8b0c-0690-11a5-e921e6586180@darold.net> <3F5E23A3-6250-486E-9CCA-E2A5B6A28B4F@yandex-team.ru> <636f694a-4d69-d6d9-78d1-c88714f3e2e0@darold.net> <3319917a-679e-b07d-b194-473552b72082@darold.net> <1E3DD5BF-A54E-4203-86C5-94C9EFA0E095@yandex-team.ru> <04ae150b-6442-148a-bb23-77082f6fca1d@darold.net> X-Mailer: Apple Mail (2.3608.120.23.2.4) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Apple-Mail=_2C8D8298-78B4-457A-B966-F61655699F35 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > 11 =D0=BC=D0=B0=D1=80=D1=82=D0=B0 2021 =D0=B3., =D0=B2 20:50, Gilles = Darold =D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB(=D0=B0= ): >=20 >=20 > The patch doesn't apply anymore in master cause of error: patch = failed: src/backend/utils/init/globals.c:150 >=20 >=20 >=20 > An other remark about this patch is that it should be mentionned in = the documentation (doc/src/sgml/config.sgml) that the new configuration = variables need a server restart, for example by adding "This parameter = can only be set at server start." like for shared_buffers. Patch on = postgresql.conf mention it. >=20 > And some typo to be fixed: >=20 >=20 >=20 > s/Tipically/Typically/ >=20 > s/asincronous/asyncronous/ >=20 > s/confugured/configured/ >=20 > s/substrnsactions/substransactions/ >=20 >=20 Thanks, Gilles! Fixed. Best regards, Andrey Borodin. --Apple-Mail=_2C8D8298-78B4-457A-B966-F61655699F35 Content-Disposition: attachment; filename=v10-0001-Make-all-SLRU-buffer-sizes-configurable.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v10-0001-Make-all-SLRU-buffer-sizes-configurable.patch" Content-Transfer-Encoding: quoted-printable =46rom=2002c5d56a65a187b0795fac246a77f9cf3107ed3b=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20Andrey=20Borodin=20=0ADate:=20= Mon,=2015=20Feb=202021=2021:51:56=20+0500=0ASubject:=20[PATCH=20v10]=20= Make=20all=20SLRU=20buffer=20sizes=20configurable=0A=0A---=0A=20= doc/src/sgml/config.sgml=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20|=20108=20++++++++++++++++++=0A=20= src/backend/access/transam/clog.c=20=20=20=20=20=20=20=20=20=20=20=20=20= |=20=20=206=20+=0A=20src/backend/access/transam/commit_ts.c=20=20=20=20=20= =20=20=20|=20=20=205=20+-=0A=20src/backend/access/transam/multixact.c=20=20= =20=20=20=20=20=20|=20=20=208=20+-=0A=20= src/backend/access/transam/subtrans.c=20=20=20=20=20=20=20=20=20|=20=20=20= 5=20+-=0A=20src/backend/commands/async.c=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20|=20=20=208=20+-=0A=20= src/backend/storage/lmgr/predicate.c=20=20=20=20=20=20=20=20=20=20|=20=20= =204=20+-=0A=20src/backend/utils/init/globals.c=20=20=20=20=20=20=20=20=20= =20=20=20=20=20|=20=20=208=20++=0A=20src/backend/utils/misc/guc.c=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=2077=20+++++++++++++=0A= =20src/backend/utils/misc/postgresql.conf.sample=20|=20=2016=20+++=0A=20= src/include/access/multixact.h=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=204=20-=0A=20src/include/access/subtrans.h=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20|=20=20=203=20-=0A=20= src/include/commands/async.h=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20|=20=20=205=20-=0A=20src/include/miscadmin.h=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=208=20++=0A=20= src/include/storage/predicate.h=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=20=204=20-=0A=2015=20files=20changed,=20240=20insertions(+),=20= 29=20deletions(-)=0A=0Adiff=20--git=20a/doc/src/sgml/config.sgml=20= b/doc/src/sgml/config.sgml=0Aindex=20a218d78bef..eb7f8f3c49=20100644=0A= ---=20a/doc/src/sgml/config.sgml=0A+++=20b/doc/src/sgml/config.sgml=0A@@=20= -1886,6=20+1886,114=20@@=20include_dir=20'conf.d'=0A=20=20=20=20=20=20=20= =20=0A=20=20=20=20=20=20=20=0A=20=20=20=20=20=20= =0A+=20=20=20=20=20=0A+=20=20=20=20=0A+=20=20=20=20=20=20= multixact_offsets_slru_buffers=20= (integer)=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =20=20multixact_offsets_slru_buffers=20= configuration=20parameter=0A+=20=20=20=20=20=20=0A= +=20=20=20=20=20=20=0A+=20=20=20=20=20=20=0A+=20=20=20=20= =20=20=20=0A+=20=20=20=20=20=20=20=20Specifies=20the=20amount=20of=20= memory=20to=20be=20used=20for=20MultiXact=20offsets.=20MultiXact=20= offsets=0A+=20=20=20=20=20=20=20=20are=20used=20to=20store=20information=20= about=20offsets=20of=20multiple=20row=20lockers=20(caused=20by=20SELECT=20= FOR=20UPDATE=20and=20others).=0A+=20=20=20=20=20=20=20=20It=20defaults=20= to=2064=20kilobytes=20(64KB).=0A+=20=20=20=20=20=20=20= =20This=20parameter=20can=20only=20be=20set=20at=20server=20start.=0A+=20= =20=20=20=20=20=20=0A+=20=20=20=20=20=20=0A+=20=20=20=20= =20=0A+=0A+=20=20=20=20=0A+=20=20=20=20=20=20= multixact_members_slru_buffers=20= (integer)=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =20=20multixact_members_slru_buffers=20= configuration=20parameter=0A+=20=20=20=20=20=20=0A= +=20=20=20=20=20=20=0A+=20=20=20=20=20=20=0A+=20=20=20=20= =20=20=20=0A+=20=20=20=20=20=20=20=20Specifies=20the=20amount=20of=20= memory=20to=20be=20used=20for=20MultiXact=20members.=20MultiXact=20= members=0A+=20=20=20=20=20=20=20=20are=20used=20to=20store=20information=20= about=20XIDs=20of=20multiple=20row=20lockers.=20Typically=20= multixact_members_slru_buffers=0A+=20=20=20=20=20=20=20= =20is=20twice=20more=20than=20= multixact_offsets_slru_buffers.=0A+=20=20=20=20=20=20=20= =20It=20defaults=20to=20128=20kilobytes=20(128KB).=0A= +=20=20=20=20=20=20=20=20This=20parameter=20can=20only=20be=20set=20at=20= server=20start.=0A+=20=20=20=20=20=20=20=0A+=20=20=20=20=20=20= =0A+=20=20=20=20=20=0A+=20=20=20=20=20=0A+=20=20= =20=20=0A+=20=20=20=20=20=20= subtrans_slru_buffers=20(integer)=0A= +=20=20=20=20=20=20=0A+=20=20=20=20=20=20=20= subtrans_slru_buffers=20configuration=20= parameter=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20= =0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20=20=0A= +=20=20=20=20=20=20=20=20Specifies=20the=20amount=20of=20memory=20to=20= be=20used=20for=20subtransactions.=0A+=20=20=20=20=20=20=20=20It=20= defaults=20to=20256=20kilobytes=20(256KB).=0A+=20=20=20= =20=20=20=20=20This=20parameter=20can=20only=20be=20set=20at=20server=20= start.=0A+=20=20=20=20=20=20=20=0A+=20=20=20=20=20=20=0A= +=20=20=20=20=20=0A+=20=20=20=20=20=0A+=20=20=20=20= =0A+=20=20=20=20=20=20= notify_slru_buffers=20(integer)=0A= +=20=20=20=20=20=20=0A+=20=20=20=20=20=20=20= notify_slru_buffers=20configuration=20= parameter=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20= =0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20=20=0A= +=20=20=20=20=20=20=20=20Specifies=20the=20amount=20of=20memory=20to=20= be=20used=20for=20asyncronous=20notifications=20(NOTIFY,=20LISTEN).=0A+=20= =20=20=20=20=20=20=20It=20defaults=20to=2064=20kilobytes=20= (64KB).=0A+=20=20=20=20=20=20=20=20This=20parameter=20= can=20only=20be=20set=20at=20server=20start.=0A+=20=20=20=20=20=20=20= =0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =0A+=20=20=20=20=20=0A+=20=20=20=20=0A+=20=20=20= =20=20=20serial_slru_buffers=20= (integer)=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =20=20serial_slru_buffers=20configuration=20= parameter=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20= =0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20=20=0A= +=20=20=20=20=20=20=20=20Specifies=20the=20amount=20of=20memory=20to=20= be=20used=20for=20predicate=20locks.=0A+=20=20=20=20=20=20=20=20It=20= defaults=20to=20128=20kilobytes=20(128KB).=0A+=20=20=20= =20=20=20=20=20This=20parameter=20can=20only=20be=20set=20at=20server=20= start.=0A+=20=20=20=20=20=20=20=0A+=20=20=20=20=20=20=0A= +=20=20=20=20=20=0A+=20=20=20=20=20=0A+=20=20=20=20= = =0A+=20=20=20=20=20=20clog_slru_buffers=20= (integer)=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =20=20clog_slru_buffers=20configuration=20= parameter=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20= =0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20=20=0A= +=20=20=20=20=20=20=20=20Specifies=20the=20amount=20of=20memory=20to=20= be=20used=20for=20CLOG.=0A+=20=20=20=20=20=20=20=20It=20defaults=20to=20= 0,=20in=20this=20case=20CLOG=20size=20is=20taken=20as=20= shared_buffers=20/=20512.=0A+=20=20=20=20=20=20=20=20= This=20parameter=20can=20only=20be=20set=20at=20server=20start.=0A+=20=20= =20=20=20=20=20=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =0A+=20=20=20=20=20=0A+=20=20=20=20=0A+=20= =20=20=20=20=20commit_ts_slru_buffers=20= (integer)=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =20=20commit_ts_slru_buffers=20configuration=20= parameter=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20= =0A+=20=20=20=20=20=20=0A+=20=20=20=20=20=20=20=0A= +=20=20=20=20=20=20=20=20Specifies=20the=20amount=20of=20memory=20to=20= be=20used=20for=20commit=20timestamps.=0A+=20=20=20=20=20=20=20=20It=20= defaults=20to=200,=20in=20this=20case=20CLOG=20size=20is=20taken=20as=20= shared_buffers=20/=20512.=0A+=20=20=20=20=20=20=20=20= This=20parameter=20can=20only=20be=20set=20at=20server=20start.=0A+=20=20= =20=20=20=20=20=0A+=20=20=20=20=20=20=0A+=20=20=20=20=20= =0A=20=0A=20=20=20=20=20=20=0A=20=20=20=20= =20=20=20max_stack_depth=20= (integer)=0Adiff=20--git=20= a/src/backend/access/transam/clog.c=20= b/src/backend/access/transam/clog.c=0Aindex=206fa4713fb4..e1d34aa361=20= 100644=0A---=20a/src/backend/access/transam/clog.c=0A+++=20= b/src/backend/access/transam/clog.c=0A@@=20-659,6=20+659,9=20@@=20= TransactionIdGetStatus(TransactionId=20xid,=20XLogRecPtr=20*lsn)=0A=20/*=0A= =20=20*=20Number=20of=20shared=20CLOG=20buffers.=0A=20=20*=0A+=20*=20If=20= values=20is=20configured=20via=20GUC=20-=20just=20use=20given=20value.=20= Otherwise=0A+=20*=20apply=20following=20euristics.=0A+=20*=0A=20=20*=20= On=20larger=20multi-processor=20systems,=20it=20is=20possible=20to=20= have=20many=20CLOG=20page=0A=20=20*=20requests=20in=20flight=20at=20one=20= time=20which=20could=20lead=20to=20disk=20access=20for=20CLOG=0A=20=20*=20= page=20if=20the=20required=20page=20is=20not=20found=20in=20memory.=20=20= Testing=20revealed=20that=20we=0A@@=20-675,6=20+678,9=20@@=20= TransactionIdGetStatus(TransactionId=20xid,=20XLogRecPtr=20*lsn)=0A=20= Size=0A=20CLOGShmemBuffers(void)=0A=20{=0A+=09/*=20consider=200=20and=20= 1=20as=20unset=20GUC=20*/=0A+=09if=20(clog_slru_buffers=20>=201)=0A+=09=09= return=20clog_slru_buffers;=0A=20=09return=20Min(128,=20Max(4,=20= NBuffers=20/=20512));=0A=20}=0A=20=0Adiff=20--git=20= a/src/backend/access/transam/commit_ts.c=20= b/src/backend/access/transam/commit_ts.c=0Aindex=20= 48e8d66286..7de3bca63d=20100644=0A---=20= a/src/backend/access/transam/commit_ts.c=0A+++=20= b/src/backend/access/transam/commit_ts.c=0A@@=20-530,7=20+530,10=20@@=20= pg_xact_commit_timestamp_origin(PG_FUNCTION_ARGS)=0A=20Size=0A=20= CommitTsShmemBuffers(void)=0A=20{=0A-=09return=20Min(16,=20Max(4,=20= NBuffers=20/=201024));=0A+=09/*=20consider=200=20and=201=20as=20unset=20= GUC=20*/=0A+=09if=20(commit_ts_slru_buffers=20>=201)=0A+=09=09return=20= commit_ts_slru_buffers;=0A+=09return=20Min(16,=20Max(4,=20NBuffers=20/=20= 512));=0A=20}=0A=20=0A=20/*=0Adiff=20--git=20= a/src/backend/access/transam/multixact.c=20= b/src/backend/access/transam/multixact.c=0Aindex=20= 1f9f1a1fa1..370c01e72b=20100644=0A---=20= a/src/backend/access/transam/multixact.c=0A+++=20= b/src/backend/access/transam/multixact.c=0A@@=20-1831,8=20+1831,8=20@@=20= MultiXactShmemSize(void)=0A=20=09=09=09=20mul_size(sizeof(MultiXactId)=20= *=202,=20MaxOldestSlot))=0A=20=0A=20=09size=20=3D=20= SHARED_MULTIXACT_STATE_SIZE;=0A-=09size=20=3D=20add_size(size,=20= SimpleLruShmemSize(NUM_MULTIXACTOFFSET_BUFFERS,=200));=0A-=09size=20=3D=20= add_size(size,=20SimpleLruShmemSize(NUM_MULTIXACTMEMBER_BUFFERS,=200));=0A= +=09size=20=3D=20add_size(size,=20= SimpleLruShmemSize(multixact_offsets_slru_buffers,=200));=0A+=09size=20=3D= =20add_size(size,=20SimpleLruShmemSize(multixact_members_slru_buffers,=20= 0));=0A=20=0A=20=09return=20size;=0A=20}=0A@@=20-1848,13=20+1848,13=20@@=20= MultiXactShmemInit(void)=0A=20=09MultiXactMemberCtl->PagePrecedes=20=3D=20= MultiXactMemberPagePrecedes;=0A=20=0A=20=09= SimpleLruInit(MultiXactOffsetCtl,=0A-=09=09=09=09=20=20= "MultiXactOffset",=20NUM_MULTIXACTOFFSET_BUFFERS,=200,=0A+=09=09=09=09=20= =20"MultiXactOffset",=20multixact_offsets_slru_buffers,=200,=0A=20=09=09=09= =09=20=20MultiXactOffsetSLRULock,=20"pg_multixact/offsets",=0A=20=09=09=09= =09=20=20LWTRANCHE_MULTIXACTOFFSET_BUFFER,=0A=20=09=09=09=09=20=20= SYNC_HANDLER_MULTIXACT_OFFSET);=0A=20=09= SlruPagePrecedesUnitTests(MultiXactOffsetCtl,=20= MULTIXACT_OFFSETS_PER_PAGE);=0A=20=09SimpleLruInit(MultiXactMemberCtl,=0A= -=09=09=09=09=20=20"MultiXactMember",=20NUM_MULTIXACTMEMBER_BUFFERS,=20= 0,=0A+=09=09=09=09=20=20"MultiXactMember",=20= multixact_offsets_slru_buffers,=200,=0A=20=09=09=09=09=20=20= MultiXactMemberSLRULock,=20"pg_multixact/members",=0A=20=09=09=09=09=20=20= LWTRANCHE_MULTIXACTMEMBER_BUFFER,=0A=20=09=09=09=09=20=20= SYNC_HANDLER_MULTIXACT_MEMBER);=0Adiff=20--git=20= a/src/backend/access/transam/subtrans.c=20= b/src/backend/access/transam/subtrans.c=0Aindex=206a8e521f89..0c24353d3a=20= 100644=0A---=20a/src/backend/access/transam/subtrans.c=0A+++=20= b/src/backend/access/transam/subtrans.c=0A@@=20-31,6=20+31,7=20@@=0A=20= #include=20"access/slru.h"=0A=20#include=20"access/subtrans.h"=0A=20= #include=20"access/transam.h"=0A+#include=20"miscadmin.h"=0A=20#include=20= "pg_trace.h"=0A=20#include=20"utils/snapmgr.h"=0A=20=0A@@=20-184,14=20= +185,14=20@@=20SubTransGetTopmostTransaction(TransactionId=20xid)=0A=20= Size=0A=20SUBTRANSShmemSize(void)=0A=20{=0A-=09return=20= SimpleLruShmemSize(NUM_SUBTRANS_BUFFERS,=200);=0A+=09return=20= SimpleLruShmemSize(subtrans_slru_buffers,=200);=0A=20}=0A=20=0A=20void=0A= =20SUBTRANSShmemInit(void)=0A=20{=0A=20=09SubTransCtl->PagePrecedes=20=3D=20= SubTransPagePrecedes;=0A-=09SimpleLruInit(SubTransCtl,=20"Subtrans",=20= NUM_SUBTRANS_BUFFERS,=200,=0A+=09SimpleLruInit(SubTransCtl,=20= "Subtrans",=20subtrans_slru_buffers,=200,=0A=20=09=09=09=09=20=20= SubtransSLRULock,=20"pg_subtrans",=0A=20=09=09=09=09=20=20= LWTRANCHE_SUBTRANS_BUFFER,=20SYNC_HANDLER_NONE);=0A=20=09= SlruPagePrecedesUnitTests(SubTransCtl,=20SUBTRANS_XACTS_PER_PAGE);=0A= diff=20--git=20a/src/backend/commands/async.c=20= b/src/backend/commands/async.c=0Aindex=204b16fb5682..f5c5592057=20100644=0A= ---=20a/src/backend/commands/async.c=0A+++=20= b/src/backend/commands/async.c=0A@@=20-107,7=20+107,7=20@@=0A=20=20*=20= frontend=20during=20startup.)=20=20The=20above=20design=20guarantees=20= that=20notifies=20from=0A=20=20*=20other=20backends=20will=20never=20be=20= missed=20by=20ignoring=20self-notifies.=0A=20=20*=0A-=20*=20The=20amount=20= of=20shared=20memory=20used=20for=20notify=20management=20= (NUM_NOTIFY_BUFFERS)=0A+=20*=20The=20amount=20of=20shared=20memory=20= used=20for=20notify=20management=20(notify_slru_buffers)=0A=20=20*=20can=20= be=20varied=20without=20affecting=20anything=20but=20performance.=20=20= The=20maximum=0A=20=20*=20amount=20of=20notification=20data=20that=20can=20= be=20queued=20at=20one=20time=20is=20determined=0A=20=20*=20by=20= slru.c's=20wraparound=20limit;=20see=20QUEUE_MAX_PAGE=20below.=0A@@=20= -225,7=20+225,7=20@@=20typedef=20struct=20QueuePosition=0A=20=20*=0A=20=20= *=20Resist=20the=20temptation=20to=20make=20this=20really=20large.=20=20= While=20that=20would=20save=0A=20=20*=20work=20in=20some=20places,=20it=20= would=20add=20cost=20in=20others.=20=20In=20particular,=20this=0A-=20*=20= should=20likely=20be=20less=20than=20NUM_NOTIFY_BUFFERS,=20to=20ensure=20= that=20backends=0A+=20*=20should=20likely=20be=20less=20than=20= notify_slru_buffers,=20to=20ensure=20that=20backends=0A=20=20*=20catch=20= up=20before=20the=20pages=20they'll=20need=20to=20read=20fall=20out=20of=20= SLRU=20cache.=0A=20=20*/=0A=20#define=20QUEUE_CLEANUP_DELAY=204=0A@@=20= -514,7=20+514,7=20@@=20AsyncShmemSize(void)=0A=20=09size=20=3D=20= mul_size(MaxBackends=20+=201,=20sizeof(QueueBackendStatus));=0A=20=09= size=20=3D=20add_size(size,=20offsetof(AsyncQueueControl,=20backend));=0A= =20=0A-=09size=20=3D=20add_size(size,=20= SimpleLruShmemSize(NUM_NOTIFY_BUFFERS,=200));=0A+=09size=20=3D=20= add_size(size,=20SimpleLruShmemSize(notify_slru_buffers,=200));=0A=20=0A=20= =09return=20size;=0A=20}=0A@@=20-562,7=20+562,7=20@@=20= AsyncShmemInit(void)=0A=20=09=20*=20Set=20up=20SLRU=20management=20of=20= the=20pg_notify=20data.=0A=20=09=20*/=0A=20=09NotifyCtl->PagePrecedes=20= =3D=20asyncQueuePagePrecedes;=0A-=09SimpleLruInit(NotifyCtl,=20"Notify",=20= NUM_NOTIFY_BUFFERS,=200,=0A+=09SimpleLruInit(NotifyCtl,=20"Notify",=20= notify_slru_buffers,=200,=0A=20=09=09=09=09=20=20NotifySLRULock,=20= "pg_notify",=20LWTRANCHE_NOTIFY_BUFFER,=0A=20=09=09=09=09=20=20= SYNC_HANDLER_NONE);=0A=20=0Adiff=20--git=20= a/src/backend/storage/lmgr/predicate.c=20= b/src/backend/storage/lmgr/predicate.c=0Aindex=20d493aeef0f..fad8cc572e=20= 100644=0A---=20a/src/backend/storage/lmgr/predicate.c=0A+++=20= b/src/backend/storage/lmgr/predicate.c=0A@@=20-872,7=20+872,7=20@@=20= SerialInit(void)=0A=20=09=20*/=0A=20=09SerialSlruCtl->PagePrecedes=20=3D=20= SerialPagePrecedesLogically;=0A=20=09SimpleLruInit(SerialSlruCtl,=20= "Serial",=0A-=09=09=09=09=20=20NUM_SERIAL_BUFFERS,=200,=20= SerialSLRULock,=20"pg_serial",=0A+=09=09=09=09=20=20serial_slru_buffers,=20= 0,=20SerialSLRULock,=20"pg_serial",=0A=20=09=09=09=09=20=20= LWTRANCHE_SERIAL_BUFFER,=20SYNC_HANDLER_NONE);=0A=20#ifdef=20= USE_ASSERT_CHECKING=0A=20=09SerialPagePrecedesLogicallyUnitTests();=0A@@=20= -1395,7=20+1395,7=20@@=20PredicateLockShmemSize(void)=0A=20=0A=20=09/*=20= Shared=20memory=20structures=20for=20SLRU=20tracking=20of=20old=20= committed=20xids.=20*/=0A=20=09size=20=3D=20add_size(size,=20= sizeof(SerialControlData));=0A-=09size=20=3D=20add_size(size,=20= SimpleLruShmemSize(NUM_SERIAL_BUFFERS,=200));=0A+=09size=20=3D=20= add_size(size,=20SimpleLruShmemSize(serial_slru_buffers,=200));=0A=20=0A=20= =09return=20size;=0A=20}=0Adiff=20--git=20= a/src/backend/utils/init/globals.c=20b/src/backend/utils/init/globals.c=0A= index=2073e0a672ae..f163ca17e9=20100644=0A---=20= a/src/backend/utils/init/globals.c=0A+++=20= b/src/backend/utils/init/globals.c=0A@@=20-148,3=20+148,11=20@@=20int64=09= =09VacuumPageDirty=20=3D=200;=0A=20=0A=20int=09=09=09VacuumCostBalance=20= =3D=200;=09/*=20working=20state=20for=20vacuum=20*/=0A=20bool=09=09= VacuumCostActive=20=3D=20false;=0A+=0A+int=09=09=09= multixact_offsets_slru_buffers=20=3D=208;=0A+int=09=09=09= multixact_members_slru_buffers=20=3D=2016;=0A+int=09=09=09= subtrans_slru_buffers=20=3D=2032;=0A+int=09=09=09notify_slru_buffers=20=3D= =208;=0A+int=09=09=09serial_slru_buffers=20=3D=2016;=0A+int=09=09=09= clog_slru_buffers=20=3D=200;=0A+int=09=09=09commit_ts_slru_buffers=20=3D=20= 0;=0Adiff=20--git=20a/src/backend/utils/misc/guc.c=20= b/src/backend/utils/misc/guc.c=0Aindex=20855076b1fd..080b3a9b35=20100644=0A= ---=20a/src/backend/utils/misc/guc.c=0A+++=20= b/src/backend/utils/misc/guc.c=0A@@=20-2279,6=20+2279,83=20@@=20static=20= struct=20config_int=20ConfigureNamesInt[]=20=3D=0A=20=09=09NULL,=20NULL,=20= NULL=0A=20=09},=0A=20=0A+=09{=0A+=09=09= {"multixact_offsets_slru_buffers",=20PGC_POSTMASTER,=20RESOURCES_MEM,=0A= +=09=09=09gettext_noop("Sets=20the=20number=20of=20shared=20memory=20= buffers=20used=20for=20MultiXact=20offsets=20SLRU."),=0A+=09=09=09NULL,=0A= +=09=09=09GUC_UNIT_BLOCKS=0A+=09=09},=0A+=09=09= &multixact_offsets_slru_buffers,=0A+=09=098,=202,=20INT_MAX=20/=202,=0A+=09= =09NULL,=20NULL,=20NULL=0A+=09},=0A+=0A+=09{=0A+=09=09= {"multixact_members_slru_buffers",=20PGC_POSTMASTER,=20RESOURCES_MEM,=0A= +=09=09=09gettext_noop("Sets=20the=20number=20of=20shared=20memory=20= buffers=20used=20for=20MultiXact=20members=20SLRU."),=0A+=09=09=09NULL,=0A= +=09=09=09GUC_UNIT_BLOCKS=0A+=09=09},=0A+=09=09= &multixact_members_slru_buffers,=0A+=09=0916,=202,=20INT_MAX=20/=202,=0A= +=09=09NULL,=20NULL,=20NULL=0A+=09},=0A+=0A+=09{=0A+=09=09= {"subtrans_slru_buffers",=20PGC_POSTMASTER,=20RESOURCES_MEM,=0A+=09=09=09= gettext_noop("Sets=20the=20number=20of=20shared=20memory=20buffers=20= used=20for=20substransactions=20SLRU."),=0A+=09=09=09NULL,=0A+=09=09=09= GUC_UNIT_BLOCKS=0A+=09=09},=0A+=09=09&subtrans_slru_buffers,=0A+=09=09= 32,=202,=20INT_MAX=20/=202,=0A+=09=09NULL,=20NULL,=20NULL=0A+=09},=0A+=0A= +=09{=0A+=09=09{"notify_slru_buffers",=20PGC_POSTMASTER,=20= RESOURCES_MEM,=0A+=09=09=09gettext_noop("Sets=20the=20number=20of=20= shared=20memory=20buffers=20used=20for=20asyncronous=20notifications=20= SLRU."),=0A+=09=09=09NULL,=0A+=09=09=09GUC_UNIT_BLOCKS=0A+=09=09},=0A+=09= =09¬ify_slru_buffers,=0A+=09=098,=202,=20INT_MAX=20/=202,=0A+=09=09= NULL,=20NULL,=20NULL=0A+=09},=0A+=0A+=09{=0A+=09=09= {"serial_slru_buffers",=20PGC_POSTMASTER,=20RESOURCES_MEM,=0A+=09=09=09= gettext_noop("Sets=20the=20number=20of=20shared=20memory=20buffers=20= used=20for=20predicate=20locks=20SLRU."),=0A+=09=09=09NULL,=0A+=09=09=09= GUC_UNIT_BLOCKS=0A+=09=09},=0A+=09=09&serial_slru_buffers,=0A+=09=0916,=20= 2,=20INT_MAX=20/=202,=0A+=09=09NULL,=20NULL,=20NULL=0A+=09},=0A+=0A+=09{=0A= +=09=09{"clog_slru_buffers",=20PGC_POSTMASTER,=20RESOURCES_MEM,=0A+=09=09= =09gettext_noop("Sets=20the=20number=20of=20shared=20memory=20buffers=20= used=20for=20commit=20log=20SLRU."),=0A+=09=09=09NULL,=0A+=09=09=09= GUC_UNIT_BLOCKS=0A+=09=09},=0A+=09=09&serial_slru_buffers,=0A+=09=090,=20= 0,=20INT_MAX=20/=202,=0A+=09=09NULL,=20NULL,=20NULL=0A+=09},=0A+=0A+=09{=0A= +=09=09{"commit_ts_slru_buffers",=20PGC_POSTMASTER,=20RESOURCES_MEM,=0A+=09= =09=09gettext_noop("Sets=20the=20number=20of=20shared=20memory=20buffers=20= used=20for=20commit=20timestamps=20SLRU."),=0A+=09=09=09NULL,=0A+=09=09=09= GUC_UNIT_BLOCKS=0A+=09=09},=0A+=09=09&commit_ts_slru_buffers,=0A+=09=09= 0,=200,=20INT_MAX=20/=202,=0A+=09=09NULL,=20NULL,=20NULL=0A+=09},=0A+=0A=20= =09{=0A=20=09=09{"temp_buffers",=20PGC_USERSET,=20RESOURCES_MEM,=0A=20=09= =09=09gettext_noop("Sets=20the=20maximum=20number=20of=20temporary=20= buffers=20used=20by=20each=20session."),=0Adiff=20--git=20= a/src/backend/utils/misc/postgresql.conf.sample=20= b/src/backend/utils/misc/postgresql.conf.sample=0Aindex=20= f46c2dd7a8..9ee7d17e8b=20100644=0A---=20= a/src/backend/utils/misc/postgresql.conf.sample=0A+++=20= b/src/backend/utils/misc/postgresql.conf.sample=0A@@=20-190,6=20+190,22=20= @@=0A=20=09=09=09=09=09#=20(change=20requires=20restart)=0A=20= #backend_flush_after=20=3D=200=09=09#=20measured=20in=20pages,=200=20= disables=0A=20=0A+#=20-=20SLRU=20Buffers=20-=0A+=0A= +#multixact_offsets_slru_buffers=20=3D=208=09#=20memory=20used=20for=20= MultiXact=20offsets=0A+=09=09=09=09=09#=20(change=20requires=20restart)=0A= +#multixact_members_slru_buffers=20=3D=2016=09#=20memory=20used=20for=20= MultiXact=20members=0A+=09=09=09=09=09#=20(change=20requires=20restart)=0A= +#subtrans_slru_buffers=20=3D=2032=09=09=09#=20memory=20used=20for=20= subtransactions=0A+=09=09=09=09=09#=20(change=20requires=20restart)=0A= +#notify_slru_buffers=20=3D=208=09=09=09#=20memory=20used=20for=20= asynchronous=20notifications=0A+=09=09=09=09=09#=20(change=20requires=20= restart)=0A+#serial_slru_buffers=20=3D=2016=09=09=09#=20memory=20used=20= for=20predicate=20locks=0A+=09=09=09=09=09#=20(change=20requires=20= restart)=0A+#clog_slru_buffers=20=3D=200=09=09=09=09#=20memory=20used=20= for=20CLOG=0A+=09=09=09=09=09#=20(change=20requires=20restart)=0A= +#commit_ts_slru_buffers=20=3D=200=09=09=09#=20memory=20used=20for=20= commit=20timestamps=0A+=09=09=09=09=09#=20(change=20requires=20restart)=0A= =20=0A=20= #-------------------------------------------------------------------------= -----=0A=20#=20WRITE-AHEAD=20LOG=0Adiff=20--git=20= a/src/include/access/multixact.h=20b/src/include/access/multixact.h=0A= index=204bbb035eae..97c0a46376=20100644=0A---=20= a/src/include/access/multixact.h=0A+++=20= b/src/include/access/multixact.h=0A@@=20-29,10=20+29,6=20@@=0A=20=0A=20= #define=20MaxMultiXactOffset=09((MultiXactOffset)=200xFFFFFFFF)=0A=20=0A= -/*=20Number=20of=20SLRU=20buffers=20to=20use=20for=20multixact=20*/=0A= -#define=20NUM_MULTIXACTOFFSET_BUFFERS=09=098=0A-#define=20= NUM_MULTIXACTMEMBER_BUFFERS=09=0916=0A-=0A=20/*=0A=20=20*=20Possible=20= multixact=20lock=20modes=20("status").=20=20The=20first=20four=20modes=20= are=20for=0A=20=20*=20tuple=20locks=20(FOR=20KEY=20SHARE,=20FOR=20SHARE,=20= FOR=20NO=20KEY=20UPDATE,=20FOR=20UPDATE);=20the=0Adiff=20--git=20= a/src/include/access/subtrans.h=20b/src/include/access/subtrans.h=0A= index=20d0ab44ae82..ca0999056e=20100644=0A---=20= a/src/include/access/subtrans.h=0A+++=20b/src/include/access/subtrans.h=0A= @@=20-11,9=20+11,6=20@@=0A=20#ifndef=20SUBTRANS_H=0A=20#define=20= SUBTRANS_H=0A=20=0A-/*=20Number=20of=20SLRU=20buffers=20to=20use=20for=20= subtrans=20*/=0A-#define=20NUM_SUBTRANS_BUFFERS=0932=0A-=0A=20extern=20= void=20SubTransSetParent(TransactionId=20xid,=20TransactionId=20parent);=0A= =20extern=20TransactionId=20SubTransGetParent(TransactionId=20xid);=0A=20= extern=20TransactionId=20SubTransGetTopmostTransaction(TransactionId=20= xid);=0Adiff=20--git=20a/src/include/commands/async.h=20= b/src/include/commands/async.h=0Aindex=209217f66b91..fa831e3721=20100644=0A= ---=20a/src/include/commands/async.h=0A+++=20= b/src/include/commands/async.h=0A@@=20-15,11=20+15,6=20@@=0A=20=0A=20= #include=20=0A=20=0A-/*=0A-=20*=20The=20number=20of=20SLRU=20= page=20buffers=20we=20use=20for=20the=20notification=20queue.=0A-=20*/=0A= -#define=20NUM_NOTIFY_BUFFERS=098=0A-=0A=20extern=20bool=20Trace_notify;=0A= =20extern=20volatile=20sig_atomic_t=20notifyInterruptPending;=0A=20=0A= diff=20--git=20a/src/include/miscadmin.h=20b/src/include/miscadmin.h=0A= index=2054693e047a..ca88b20ffa=20100644=0A---=20= a/src/include/miscadmin.h=0A+++=20b/src/include/miscadmin.h=0A@@=20= -162,6=20+162,14=20@@=20extern=20PGDLLIMPORT=20int=20MaxBackends;=0A=20= extern=20PGDLLIMPORT=20int=20MaxConnections;=0A=20extern=20PGDLLIMPORT=20= int=20max_worker_processes;=0A=20extern=20PGDLLIMPORT=20int=20= max_parallel_workers;=0A+extern=20PGDLLIMPORT=20int=20= multixact_offsets_slru_buffers;=0A+extern=20PGDLLIMPORT=20int=20= multixact_members_slru_buffers;=0A+extern=20PGDLLIMPORT=20int=20= multixact_members_slru_buffers;=0A+extern=20PGDLLIMPORT=20int=20= subtrans_slru_buffers;=0A+extern=20PGDLLIMPORT=20int=20= notify_slru_buffers;=0A+extern=20PGDLLIMPORT=20int=20= serial_slru_buffers;=0A+extern=20PGDLLIMPORT=20int=20clog_slru_buffers;=0A= +extern=20PGDLLIMPORT=20int=20commit_ts_slru_buffers;=0A=20=0A=20extern=20= PGDLLIMPORT=20int=20MyProcPid;=0A=20extern=20PGDLLIMPORT=20pg_time_t=20= MyStartTime;=0Adiff=20--git=20a/src/include/storage/predicate.h=20= b/src/include/storage/predicate.h=0Aindex=20152b698611..c72779bd88=20= 100644=0A---=20a/src/include/storage/predicate.h=0A+++=20= b/src/include/storage/predicate.h=0A@@=20-26,10=20+26,6=20@@=20extern=20= int=09max_predicate_locks_per_xact;=0A=20extern=20int=09= max_predicate_locks_per_relation;=0A=20extern=20int=09= max_predicate_locks_per_page;=0A=20=0A-=0A-/*=20Number=20of=20SLRU=20= buffers=20to=20use=20for=20Serial=20SLRU=20*/=0A-#define=20= NUM_SERIAL_BUFFERS=09=0916=0A-=0A=20/*=0A=20=20*=20A=20handle=20used=20= for=20sharing=20SERIALIZABLEXACT=20objects=20between=20the=20= participants=0A=20=20*=20in=20a=20parallel=20query.=0A--=20=0A2.24.3=20= (Apple=20Git-128)=0A=0A= --Apple-Mail=_2C8D8298-78B4-457A-B966-F61655699F35 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_2C8D8298-78B4-457A-B966-F61655699F35--