Обсуждение: Walsender getting klilled, ERROR: out of memory in server logs

Поиск
Список
Период
Сортировка

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

От
Subhrajit Mutsuddi
Дата:
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

 




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

От
Laurenz Albe
Дата:
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