Re: Trigger more frequent autovacuums

From: wenhui qiu <qiuwenhuifx(at)gmail(dot)com>
To: Melanie Plageman <melanieplageman(at)gmail(dot)com>, Nathan Bossart <nathandbossart(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Japin Li <japinli(at)hotmail(dot)com>, Robert Haas <robertmhaas(at)gmail(dot)com>
Subject: Re: Trigger more frequent autovacuums
Date: 2025-03-07 09:37:56
Message-ID: CAGjGUAJtvVLYSNnE1GKOdHex-HWxaQ1nPfdjb-2=0EqHJDEd0g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi
The more accurate data I've found is tabentry->live_tuples; provides the
second version

#Here's a simple test I did

test=# select count(*) from join1;
count
---------
2289001
(1 row)

test=# update join1 set name=md5(now()::text) where id<1000000;
UPDATE 1938700
test=# select 1938700/2289001;
?column?
----------
0
(1 row)

test=# select 1938700/2289001::float;
?column?
--------------------
0.8469633696097119
(1 row)

test=#

test=# select count(*) from join1;
count
---------
2289001
(1 row)
test=# update join1 set name=md5(now()::text) where id<=80000;
UPDATE 159901
test=# select 159901/2289001::float;
?column?
---------------------
0.06985623859491542
(1 row)

test=# select * from pg_stat_all_tables where relname='join1';
-[ RECORD 1 ]----------+------------------------------
relid | 16385
schemaname | public
relname | join1
seq_scan | 17
last_seq_scan | 2025-03-07 15:34:02.793659+08
seq_tup_read | 14994306
idx_scan | 7
last_idx_scan | 2025-03-07 15:34:23.404788+08
idx_tup_fetch | 500281
n_tup_ins | 2289001
n_tup_upd | 2268604
n_tup_del | 0
n_tup_hot_upd | 399
n_tup_newpage_upd | 2268205
n_live_tup | 2286701
n_dead_tup | 159901
n_mod_since_analyze | 159901
n_ins_since_vacuum | 0
last_vacuum | 2025-03-06 18:18:11.318419+08
last_autovacuum | 2025-03-07 15:25:53.055576+08
last_analyze | 2025-03-06 18:18:11.424253+08
last_autoanalyze | 2025-03-07 15:25:53.456656+08
vacuum_count | 3
autovacuum_count | 3
analyze_count | 2
autoanalyze_count | 4
total_vacuum_time | 205
total_autovacuum_time | 2535
total_analyze_time | 203
total_autoanalyze_time | 1398

test=#
test=# update join1 set name=md5(now()::text) where id<=80000;
UPDATE 159901

test=# \x
Expanded display is on.
test=# select (n_live_tup)/(n_live_tup+n_dead_tup)::float from
pg_stat_all_tables where relname='join1';
-[ RECORD 1 ]----------------
?column? | 0.8774142777358045

test=# select * from pg_stat_all_tables where relname='join1';
-[ RECORD 1 ]----------+------------------------------
relid | 16385
schemaname | public
relname | join1
seq_scan | 17
last_seq_scan | 2025-03-07 15:34:02.793659+08
seq_tup_read | 14994306
idx_scan | 8
last_idx_scan | 2025-03-07 15:46:38.331795+08
idx_tup_fetch | 660182
n_tup_ins | 2289001
n_tup_upd | 2428505
n_tup_del | 0
n_tup_hot_upd | 424
n_tup_newpage_upd | 2428081
n_live_tup | 2289001
n_dead_tup | 319802
n_mod_since_analyze | 0
n_ins_since_vacuum | 0
last_vacuum | 2025-03-06 18:18:11.318419+08
last_autovacuum | 2025-03-07 15:25:53.055576+08
last_analyze | 2025-03-06 18:18:11.424253+08
last_autoanalyze | 2025-03-07 15:47:35.950932+08
vacuum_count | 3
autovacuum_count | 3
analyze_count | 2
autoanalyze_count | 5
total_vacuum_time | 205
total_autovacuum_time | 2535
total_analyze_time | 203
total_autoanalyze_time | 1770

test=#
tail -n 1000 postgresql-Fri_17.csv |grep join1
2025-03-07 17:30:12.782 +08,,,755739,,67cabca4.b881b,3,,2025-03-07 17:30:12
+08,2017/2,0,DEBUG,00000,"vacthresh: 457850.218750,anlthresh:
228950.109375, the join1 has 2289001.000000 reltuples, pcnt_unfrozen:
1.000000, pcnt_visibletuples: 0.877414 ",,,,,,,,,"","autovacuum worker",,0
2025-03-07 17:31:12.803 +08,,,756028,,67cabce0.b893c,3,,2025-03-07 17:31:12
+08,2003/4,0,DEBUG,00000,"vacthresh: 457850.218750,anlthresh:
228950.109375, the join1 has 2289001.000000 reltuples, pcnt_unfrozen:
1.000000, pcnt_visibletuples: 0.877414 ",,,,,,,,,"","autovacuum worker",,0
2025-03-07 17:32:12.822 +08,,,756405,,67cabd1c.b8ab5,3,,2025-03-07 17:32:12
+08,2006/4,0,DEBUG,00000,"vacthresh: 457850.218750,anlthresh:
228950.109375, the join1 has 2289001.000000 reltuples, pcnt_unfrozen:
1.000000, pcnt_visibletuples: 0.877414 ",,,,,,,,,"","autovacuum worker",,0
2025-03-07 17:33:12.842 +08,,,757026,,67cabd58.b8d22,3,,2025-03-07 17:33:12
+08,2009/4,0,DEBUG,00000,"vacthresh: 457850.218750,anlthresh:
228950.109375, the join1 has 2289001.000000 reltuples, pcnt_unfrozen:
1.000000, pcnt_visibletuples: 0.877414 ",,,,,,,,,"","autovacuum worker",,0

On Fri, Mar 7, 2025 at 2:22 PM wenhui qiu <qiuwenhuifx(at)gmail(dot)com> wrote:

> HI Nathan Bossart Melanie Plageman
>
> Firstly, congratulations on the submission of this path:
> https://commitfest.postgresql.org/patch/5320/
>
> vacthresh = (float4) vac_base_thresh + vac_scale_factor * reltuples;
> anlthresh = (float4) anl_base_thresh + anl_scale_factor * reltuples;
> vacinsthresh = (float4) vac_ins_base_thresh + vac_ins_scale_factor *
> reltuples;
> These three calculations have already been optimised for two of them, and
> with this patch, we have the key data pcnt_unfrozen, I think we can also
> consider applying it to the vacthresh and anlthresh calculations, and I've
> added a new pcnt_unrelallvisible parameter with reference to pcnt_unfrozen,
> so I'm not sure if it's a good idea for me to use it. I'd like to hear your
> opinions on this.
> #Here's a simple test I did
> test=# select count(*) from join1;
> count
> ---------
> 2289001
> (1 row)
>
> test=# update join1 set name=md5(now()::text) where id<=20000;
> UPDATE 70001
> test=#
>
> 2025-03-07 14:03:33.968 +08,,,607191,,67ca8c35.943d7,2,,2025-03-07
> 14:03:33 +08,2005/2,0,DEBUG,00000,"vacthresh: 222674.750000,anlthresh:
> 11371.118164, the j
> oin1 has 2291275.000000 reltuples, pcnt_unfrozen: 0.485810,
> pcnt_unrelallvisible: 0.049410 ",,,,,,,,,"","autovacuum worker",,0
>
>

Attachment Content-Type Size
Optimising-the-vacuum-algorithm-v2.diff application/octet-stream 2.4 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Dean Rasheed 2025-03-07 10:08:41 Re: [PATCH] Add get_bytes() and set_bytes() functions
Previous Message Christoph Berg 2025-03-07 09:22:16 Re: zstd failing on mipsel (PG 15.12, pg_verifybackup/t/010_client_untar.pl)