Re: Purging few months old data and vacuuming in production

n.kobzarev@aeronavigator.ru

From: Николай Кобзарев <n.kobzarev@aeronavigator.ru>
To: hjp-pgsql@hjp.at
Cc: pgsql-general@lists.postgresql.org
Date: 2023-01-07T17:38:39Z
Lists: pgsql-general


Суббота,  7 января 2023, 20:23 +03:00 от Peter J. Holzer <hjp-pgsql@hjp.at>:
>On 2023-01-07 07:40:01 -0600, Ron wrote:
>> On 1/7/23 05:29, Peter J. Holzer wrote:
>>     If I understood correctly, you have to delete about 3 million records
>>     (worst case) from the main table each day. Including the other 8 tables
>>     those are 27 million DELETE queries each of which deletes only a few
>>     records. That's about 300 queries per second. I'd be worried about
>>     impacting performance on other queries at this rate.
>> 
>> 
>> 300 records/second.  Fewer DELETE statements if there are one-many
>> relationships with the child tables.
>
>Nope:
>
>| Each of these tables' daily record increment is on an average 2 to 3
>| million
>
>I am assuming that the main table is typical, so there will be 2 to 3
>million DELETEs from the main table and also from each of the other 8
>tables (which may delete 0, 1, or more records). Also, it was mentioned
>that only some of these tables have a direct FK relationship, so the
>DELETE queries against the other tables may be (much) more expensive
>than a simple `delete from my_table where main_id = :1`.
>
>        hp
>
>-- 
>   _  | Peter J. Holzer    | Story must make more sense than reality.
>|_|_) |                    |
>| |   |  hjp@hjp.at |    -- Charles Stross, "Creative writing
>__/   |  http://www.hjp.at/ |       challenge!"


So one may consider deleting from child tables, and only after that delete from main table, avoiding enforcing foreign key during delete. Also consider deletes by relatively small chunks, in loop.