Re: SLRU optimization - configurable buffer pool and partitioning the SLRU lock

Dilip Kumar <dilipbalaut@gmail.com>

From: Dilip Kumar <dilipbalaut@gmail.com>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: "Andrey M. Borodin" <x4mmm@yandex-team.ru>, tender wang <tndrwang@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-02-27T09:56:35Z
Lists: pgsql-hackers
On Mon, Feb 26, 2024 at 9:46 PM Alvaro Herrera <alvherre@alvh.no-ip.org>
wrote:

> On 2024-Feb-23, Dilip Kumar wrote:
>
> +  <para>
> +   For each <literal>SLRU</literal> area that's part of the core server,
> +   there is a configuration parameter that controls its size, with the
> suffix
> +   <literal>_buffers</literal> appended.  For historical
> +   reasons, the names are not exact matches, but <literal>Xact</literal>
> +   corresponds to <literal>transaction_buffers</literal> and the rest
> should
> +   be obvious.
> +   <!-- Should we edit pgstat_internal.h::slru_names so that the "name"
> matches
> +        the GUC name?? -->
> +  </para>
>
> I think I would like to suggest renaming the GUCs to have the _slru_ bit
> in the middle:
>
> +# - SLRU Buffers (change requires restart) -
> +
> +#commit_timestamp_slru_buffers = 0          # memory for pg_commit_ts (0
> = auto)
> +#multixact_offsets_slru_buffers = 16            # memory for
> pg_multixact/offsets
> +#multixact_members_slru_buffers = 32            # memory for
> pg_multixact/members
> +#notify_slru_buffers = 16                   # memory for pg_notify
> +#serializable_slru_buffers = 32             # memory for pg_serial
> +#subtransaction_slru_buffers = 0            # memory for pg_subtrans (0 =
> auto)
> +#transaction_slru_buffers = 0               # memory for pg_xact (0 =
> auto)
>
> and the pgstat_internal.h table:
>
> static const char *const slru_names[] = {
>         "commit_timestamp",
>         "multixact_members",
>         "multixact_offsets",
>         "notify",
>         "serializable",
>         "subtransaction",
>         "transaction",
>         "other"                                         /* has to be last
> */
> };
>
> This way they match perfectly.
>

Yeah, I think this looks fine to me.

-- 
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com

Commits

  1. Fix zeroing of pg_serial page without SLRU bank lock

  2. Fix misspelled assertions

  3. GUC table: Add description to computed variables

  4. Improve performance of subsystems on top of SLRU

  5. Rename SLRU elements in view pg_stat_slru

  6. Use atomic access for SlruShared->latest_page_number

  7. Split use of SerialSLRULock, creating SerialControlLock

  8. Index SLRUs by 64-bit integers rather than by 32-bit integers

  9. Add a macro templatized hashtable.