Re: thoughts on "prevent wraparound" vacuum - Mailing list pgsql-hackers

From Michail Nikolaev
Subject Re: thoughts on "prevent wraparound" vacuum
Date
Msg-id CANtu0ojDS=sKJFDhuxoB2+9z40CQMckGsJBT8b9=p+_ig6h=WA@mail.gmail.com
Whole thread Raw
In response to Re: thoughts on "prevent wraparound" vacuum  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
Hello.

>- Which version of postgres is this? Newer versions avoid scanning
>  unchanged parts of the heap even for freezing (9.6+, with additional
>  smaller improvements in 11).

Oh, totally forgot about version and settings...

server_version 10.9 (Ubuntu 10.9-103)

So, "don't vacuum all-frozen pages" included.

> - have you increased the vacuum cost limits? Before PG 12 they're so low
>   they're entirely unsuitable for larger databases, and even in 12 you
>   should likely increase them for a multi-TB database

Current settings are:

autovacuum_max_workers 8
autovacuum_vacuum_cost_delay 5ms
autovacuum_vacuum_cost_limit 400
autovacuum_work_mem -1

vacuum_cost_page_dirty 40
vacuum_cost_page_hit 1
vacuum_cost_page_miss 10

"autovacuum_max_workers" set to 8 because server needs to process a lot of changing relations.
Settings were more aggressive previously (autovacuum_vacuum_cost_limit was 2800) but it leads to very high IO load causing issues with application performance and stability (even on SSD).

 "vacuum_cost_page_dirty" was set to 40 few month ago. High IO write peaks were causing application requests to stuck into WALWriteLock.
After some investigations we found it was caused by WAL-logging peaks.
Such WAL-peaks are mostly consist of such records:

Type                                                        N(%)                            Record size (%)             FPI size (%)                        Combined size (%)
------
Heap2/CLEAN                                       10520 (  0.86)                623660 (  0.21)               5317532 (  0.53)                 5941192 (  0.46)
Heap2/FREEZE_PAGE                         113419 (  9.29)              6673877 (  2.26)             635354048 ( 63.12)            642027925 ( 49.31)

another example:

Heap2/CLEAN                                        196707 (  6.96)             12116527 (  1.56)           292317231 ( 37.77)            304433758 ( 19.64)
Heap2/FREEZE_PAGE                          1819 (  0.06)                 104012 (  0.01)              13324269 (  1.72)                13428281 (  0.87)

Thanks,
Michail.

pgsql-hackers by date:

Previous
From: David Rowley
Date:
Subject: Re: Performance issue in foreign-key-aware join estimation
Next
From: David Rowley
Date:
Subject: Re: Speed up transaction completion faster after many relations areaccessed in a transaction