Re: Configure autovacuum

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: "Shenavai, Manuel" <manuel(dot)shenavai(at)sap(dot)com>, pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Configure autovacuum
Date: 2024-07-04 20:06:45
Message-ID: 0d27eb23-56bf-4158-9a7f-2fd954788fe9@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 7/4/24 10:24, Shenavai, Manuel wrote:
> Thanks for the questions.
>
> Here are some details:
> 1) we use this query to get the bloat: https://github.com/ioguix/pgsql-bloat-estimation/blob/master/table/table_bloat.sql
> But in our load test, we got a empty database with 1 record that gets updated very frequently. Here we just meature the DB size to see how big the DB grows:
> SELECT pg_total_relation_size('my-table') / 1024/1014;

That really does not clear things up:

1) pg_total_relation_size measures the size of a relation(table) not the
database.

2) The database is not empty if it has relation of size 200GB.

3) Just because a database grows big does not mean it is bloated.
Include the output of the bloat query.

>
> 2) Dead tuples: select n_dead_tup,n_live_tup, n_tup_del, relname,* from pg_stat_all_tables where relname= (select REPLACE((SELECT cast (reltoastrelid::regclass as text) FROM pg_class WHERE relkind = 'r' AND reltoastrelid <> 0 and relname = 'my-table'),'pg_toast.',''));
> We are only updating the blob so we are mostly interested in the toast

By blob do you mean bytea or large objects?

>
> 3) In our load test, High Load means constantly updating a single record with a predefined payload (i.e. random bytearray of x MB) for x minutes. We update up to 60MB per second

Do you do this all in one transaction?

> 4) Postgres Version: 14.12-2
> 5) We are using default autovacuum-settings
>
> Best regards,
> Manuel
>
> -----Original Message-----
> From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
> Sent: 04 July 2024 17:43
> To: Shenavai, Manuel <manuel(dot)shenavai(at)sap(dot)com>; pgsql-general <pgsql-general(at)postgresql(dot)org>
> Subject: Re: Configure autovacuum
>
> On 7/4/24 08:16, Shenavai, Manuel wrote:
>> We see that our DB keeps increasing under high load (many updates). We see that our DB has a size of 200GB and we got 199GB bloat, 0 dead tuple. And when the DB is put on high load (many updates), we still see that the DB size grows. We try to find parameters to avoid DB growth.
>
> Show your work:
>
> 1) How did you determine the bloat number?
>
> 2) How did you determine there are 0 dead tuples?
>
> 3) Define high load.
>
> 4) Postgres version?
>
> 5) What are your autovacuum settings?
>
>
>>
>> I think we need to tweak the autovacuum settings and maybe limit the volume of data that can be written to the DB.
>
> That will need to happen on client end.
>
>>
>> Is there any setting in postgres that would allow to write only certain volume? For example, limit the amount of data that can be written to a table to 100MB/minute.
>>
>> Best regards,
>> Manuel
>>
>> -----Original Message-----
>> From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
>> Sent: 14 June 2024 16:32
>> To: Shenavai, Manuel <manuel(dot)shenavai(at)sap(dot)com>; pgsql-general <pgsql-general(at)postgresql(dot)org>
>> Subject: Re: Configure autovacuum
>>
>> On 6/13/24 23:20, Shenavai, Manuel wrote:
>>> Hi everyone,
>>>
>>> I would like to configure the autovacuum in a way that it runs very
>>> frequently (i.e. after each update-statement). I tried the following
>>
>> Why?
>>
>> What is the problem you are trying to solve?
>>
>>> settings on my table:
>>>
>>> alter table mytable set (autovacuum_vacuum_scale_factor  = 0.0);
>>>
>>> alter table mytable set (autovacuum_vacuum_cost_delay  = 0.0);
>>>
>>> alter table mytable set (autovacuum_vacuum_cost_limit  = 10000);
>>>
>>> alter table mytable set (autovacuum_vacuum_threshold  = 1);
>>>
>>> I do a lot of updates on a single tuple and I would expect that the
>>> autovacuum would start basically after each update (due to
>>> autovacuum_vacuum_threshold=1). But the autovacuum is not running.
>>>
>>> Is it possible to configure postgres to autovacuum very aggressively
>>> (i.e. after each update-statement)?
>>>
>>> Thanks in advance &
>>>
>>> Best regards,
>>>
>>> Manuel
>>>
>>
>

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Kent Dorfman 2024-07-04 20:35:30 Re: Design strategy for table with many attributes
Previous Message David G. Johnston 2024-07-04 19:56:14 Re: Design strategy for table with many attributes