Walsender getting klilled, ERROR: out of memory in server logs

Started by Subhrajit Mutsuddiabout 2 years ago2 messagesbugs
Jump to latest
#1Subhrajit Mutsuddi
subhrajitmutsuddi@gmail.com

Hi All,

I have a table test(id int, lobcol bytea), the REPLICA IDENTITY setting of
the table is set to FULL. We are using the test_decoding plugin for logical
decoding. We inserted a record with lobcol size of 256 MB. While updating
that record with another lobcol value of 256 MB, we found in the server
logs that the corresponding walsender process keeps getting killed and it
shows 'out of memory' and this particular message repeats.

[11349]: ERROR: out of memory

DETAIL: Cannot enlarge string buffer containing 1073741822 bytes by 1 more
bytes.

[11587]: ERROR: out of memory

DETAIL: Cannot enlarge string buffer containing 1073741822 bytes by 1 more
bytes.

Can you please help me understand the cause of this issue ? If there are
any relevant documentation links or any possible workaround please share it.

Thank you,

Regards,
Subhrajit

#2Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Subhrajit Mutsuddi (#1)
Re: Walsender getting klilled, ERROR: out of memory in server logs

On Tue, 2024-03-26 at 09:54 +0530, Subhrajit Mutsuddi wrote:

I have a table test(id int, lobcol bytea), the REPLICA IDENTITY setting of the
table is set to FULL. We are using the test_decoding plugin for logical decoding.
We inserted a record with lobcol size of 256 MB. While updating that record with
another lobcol value of 256 MB, we found in the server logs that the corresponding
walsender process keeps getting killed and it shows 'out of memory' and this
particular message repeats. 

[11349] ERROR:  out of memory
DETAIL:  Cannot enlarge string buffer containing 1073741822 bytes by 1 more bytes.

Can you please help me understand the cause of this issue ? If there are any
relevant documentation links or any possible workaround please share it.

1B is the maximum amount of memory for an allocation in PostgreSQL.

With REPLICA IDENTITY FULL, the UPDATE has to contain both the old and the
new value for the "bytea". In text mode, a "bytea" is more than twice its
binary size, because it is encoded as a hexadecimal string.

You might have more luck if you create the subscription with the "binary"
option.

But it is mildly insane to use REPLICA IDENTITY FULL with such a table.
Create a primary key and use that as replica identity.

Yours,
Laurenz Albe