Thank you for response.
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