Summary:
Currently we use page size to create shared memory segment for pg client communication.
By default it is just 4KB.
When response does not fit into segment, it is transferred via RPC.
Such logic increase latency. Nearly 10ms per 1000 requeses.
During scan we fetch data by chunks of 1000 rows.
So nearly all scan read responses does not fit into 4KB and we fallback to RPC every time.
This diff introduces intermediate shared memory buffers, that are greater in size.
And could be reused by different postgres connections.
Read time changes in newly added test (PgSingleTServerTest.ScanOneColumn):
Don't use shared memory at all: 1.17s
Only 4KB segments: 1.35s
With intermediate big buffers: 1.06s
Original commit: 12b2c407197438b34c9e00afa6e3a23f7c6b1b07/D38149
Jira: DB-12886
Test Plan: PgSingleTServerTest.ScanOneColumn
Reviewers: rthallam, esheng
Reviewed By: esheng
Subscribers: ybase, yql
Tags: #jenkins-ready
Differential Revision: https://phorge.dev.yugabyte.com/D38684