Thank you for response.

On Tue, Sep 19, 2023 at 2:52 AM Michael Paquier <mich...@paquier.xyz> wrote:

> On Mon, Sep 18, 2023 at 05:49:51PM +0300, Sergey Sergey wrote:
> > Hope this patch will be usefull/
>
> -    uint64       fpLockBits;        /* lock modes held for each fast-path
> slot */
> +    uint8        fpLockBits[FP_LOCK_SLOTS_PER_BACKEND];        /* lock
> modes
>
> If my maths are right, this makes PGPROC 8 bytes larger with 16 slots
> by default.  That is not a good idea.
>

You maths are correct. I can't estimate overall effect of this PGPROC
grows.
Our typical setup include 768Gb RAM. It looks like space-for-time
optimization.
I check ordinary pgbench for patched and unpatched version.Total average tps
are the same. Patched version has very stable tps values during test.

>
> +  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
>
> And this points out that ./configure has been generated with one of
> Debian's autoreconf commands, which is something to avoid.
>

Yes, first i try to build it Debian way.
I can rebuild ./configure with autoconf.


>
> I am not sure that this patch is a good idea long-term.  Wouldn't it
> be better to invent new and more scalable concepts able to tackle
> bottlenecks around these code paths instead of using compile-time
> tweaks like that?
>

Another one way is to replace fixed arrays inside PGPROC

uint8           fpLockBits[FP_LOCK_SLOTS_PER_BACKEND];          /* lock
modes
Oid             fpRelId[FP_LOCK_SLOTS_PER_BACKEND]; /* slots for rel oids */

with pointers to arrays allocated outside PGPROC.

We also can use c99 flexible array pointers feature. This way we should make
structure like

struct FPLock
{
    uint8 fpLockBit;
    Oid   fpRelid;
}

Set the array of struct FPLock at the end of PGPROC structure. And
calculate memory
allocation for PGPROC using some GUC variable.

This two ways seems so complex for me.



> --
> Michael
>

Reply via email to