diff options
author | Melanie Plageman <melanieplageman@gmail.com> | 2025-03-03 11:18:05 -0500 |
---|---|---|
committer | Melanie Plageman <melanieplageman@gmail.com> | 2025-03-03 11:18:05 -0500 |
commit | 99f8f3fbbc8f743290844e8c676d39dad11c5d5d (patch) | |
tree | bfa0507e88c83d28053a7e8beb36d8d61b43b871 /src/test | |
parent | 8492feb98f6df3f0f03e84ed56f0d1cbb2ac514c (diff) | |
download | postgresql-99f8f3fbbc8f743290844e8c676d39dad11c5d5d.tar.gz postgresql-99f8f3fbbc8f743290844e8c676d39dad11c5d5d.zip |
Add relallfrozen to pg_class
Add relallfrozen, an estimate of the number of pages marked all-frozen
in the visibility map.
pg_class already has relallvisible, an estimate of the number of pages
in the relation marked all-visible in the visibility map. This is used
primarily for planning.
relallfrozen, together with relallvisible, is useful for estimating the
outstanding number of all-visible but not all-frozen pages in the
relation for the purposes of scheduling manual VACUUMs and tuning vacuum
freeze parameters.
A future commit will use relallfrozen to trigger more frequent vacuums
on insert-focused workloads with significant volume of frozen data.
Bump catalog version
Author: Melanie Plageman <melanieplageman@gmail.com>
Reviewed-by: Nathan Bossart <nathandbossart@gmail.com>
Reviewed-by: Robert Treat <rob@xzilla.net>
Reviewed-by: Corey Huinker <corey.huinker@gmail.com>
Reviewed-by: Greg Sabino Mullane <htamfids@gmail.com>
Discussion: https://postgr.es/m/flat/CAAKRu_aj-P7YyBz_cPNwztz6ohP%2BvWis%3Diz3YcomkB3NpYA--w%40mail.gmail.com
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/stats_import.out | 99 | ||||
-rw-r--r-- | src/test/regress/sql/stats_import.sql | 49 |
2 files changed, 97 insertions, 51 deletions
diff --git a/src/test/regress/expected/stats_import.out b/src/test/regress/expected/stats_import.out index 1f150f7b08d..4df287e547f 100644 --- a/src/test/regress/expected/stats_import.out +++ b/src/test/regress/expected/stats_import.out @@ -14,12 +14,12 @@ CREATE TABLE stats_import.test( ) WITH (autovacuum_enabled = false); CREATE INDEX test_i ON stats_import.test(id); -- starting stats -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 0 | -1 | 0 + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 0 | -1 | 0 | 0 (1 row) BEGIN; @@ -68,12 +68,12 @@ SELECT (1 row) -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 0 | -1 | 0 + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 0 | -1 | 0 | 0 (1 row) -- relpages may be -1 for partitioned tables @@ -170,18 +170,19 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 2::integer); pg_restore_relation_stats --------------------------- t (1 row) -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 17 | 400 | 4 + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 17 | 400 | 4 | 2 (1 row) -- ok: just relpages @@ -194,12 +195,12 @@ SELECT pg_restore_relation_stats( t (1 row) -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 16 | 400 | 4 + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 16 | 400 | 4 | 2 (1 row) -- ok: just reltuples @@ -212,12 +213,12 @@ SELECT pg_restore_relation_stats( t (1 row) -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 16 | 500 | 4 + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 16 | 500 | 4 | 2 (1 row) -- ok: just relallvisible @@ -230,12 +231,30 @@ SELECT pg_restore_relation_stats( t (1 row) -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 16 | 500 | 5 + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 16 | 500 | 5 | 2 +(1 row) + +-- ok: just relallfrozen +SELECT pg_restore_relation_stats( + 'relation', 'stats_import.test'::regclass, + 'version', 150000::integer, + 'relallfrozen', 3::integer); + pg_restore_relation_stats +--------------------------- + t +(1 row) + +SELECT relpages, reltuples, relallvisible, relallfrozen +FROM pg_class +WHERE oid = 'stats_import.test'::regclass; + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 16 | 500 | 5 | 3 (1 row) -- warn: bad relpages type @@ -244,19 +263,20 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', 'nope'::text, 'reltuples', 400.0::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); WARNING: argument "relpages" has type "text", expected type "integer" pg_restore_relation_stats --------------------------- f (1 row) -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; - relpages | reltuples | relallvisible -----------+-----------+--------------- - 16 | 400 | 4 + relpages | reltuples | relallvisible | relallfrozen +----------+-----------+---------------+-------------- + 16 | 400 | 4 | 3 (1 row) -- invalid relkinds for statistics @@ -992,7 +1012,8 @@ SELECT * FROM pg_catalog.pg_restore_relation_stats( 'version', '180000'::integer, 'relpages', '11'::integer, 'reltuples', '10000'::real, - 'relallvisible', '0'::integer + 'relallvisible', '0'::integer, + 'relallfrozen', '0'::integer ); pg_restore_relation_stats --------------------------- @@ -1194,7 +1215,8 @@ SELECT pg_catalog.pg_restore_relation_stats( 'relation', 0::oid, 'relpages', 17::integer, 'reltuples', 400.0::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); WARNING: argument "relation" has type "oid", expected type "regclass" ERROR: "relation" cannot be NULL --- error: relation not found @@ -1202,7 +1224,8 @@ SELECT pg_catalog.pg_restore_relation_stats( 'relation', 0::regclass, 'relpages', 17::integer, 'reltuples', 400.0::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); ERROR: could not open relation with OID 0 -- warn and error: unrecognized argument name SELECT pg_restore_relation_stats( @@ -1219,7 +1242,8 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, NULL, '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); ERROR: name at variadic position 5 is NULL -- error: argument name is an integer SELECT pg_restore_relation_stats( @@ -1227,7 +1251,8 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 17, '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); ERROR: name at variadic position 5 has type "integer", expected type "text" -- error: odd number of variadic arguments cannot be pairs SELECT pg_restore_relation_stats( @@ -1235,6 +1260,7 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', '17'::integer, 'reltuples', 400::real, + 'relallfrozen', 3::integer, 'relallvisible'); ERROR: variadic arguments must be name/value pairs HINT: Provide an even number of variadic arguments that can be divided into pairs. @@ -1244,7 +1270,8 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); ERROR: could not open relation with OID 0 -- error: object does not exist SELECT pg_catalog.pg_restore_attribute_stats( diff --git a/src/test/regress/sql/stats_import.sql b/src/test/regress/sql/stats_import.sql index 8c183bceb8a..febda3d18d9 100644 --- a/src/test/regress/sql/stats_import.sql +++ b/src/test/regress/sql/stats_import.sql @@ -18,7 +18,7 @@ CREATE TABLE stats_import.test( CREATE INDEX test_i ON stats_import.test(id); -- starting stats -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; @@ -49,7 +49,7 @@ SELECT pg_catalog.pg_clear_relation_stats( 'stats_import.test'::regclass); -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; @@ -120,9 +120,10 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 2::integer); -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; @@ -132,7 +133,7 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', '16'::integer); -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; @@ -142,7 +143,7 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'reltuples', '500'::real); -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; @@ -152,7 +153,17 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relallvisible', 5::integer); -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen +FROM pg_class +WHERE oid = 'stats_import.test'::regclass; + +-- ok: just relallfrozen +SELECT pg_restore_relation_stats( + 'relation', 'stats_import.test'::regclass, + 'version', 150000::integer, + 'relallfrozen', 3::integer); + +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; @@ -162,9 +173,10 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', 'nope'::text, 'reltuples', 400.0::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); -SELECT relpages, reltuples, relallvisible +SELECT relpages, reltuples, relallvisible, relallfrozen FROM pg_class WHERE oid = 'stats_import.test'::regclass; @@ -680,7 +692,8 @@ SELECT * FROM pg_catalog.pg_restore_relation_stats( 'version', '180000'::integer, 'relpages', '11'::integer, 'reltuples', '10000'::real, - 'relallvisible', '0'::integer + 'relallvisible', '0'::integer, + 'relallfrozen', '0'::integer ); -- Generate statistics on table with data @@ -850,14 +863,16 @@ SELECT pg_catalog.pg_restore_relation_stats( 'relation', 0::oid, 'relpages', 17::integer, 'reltuples', 400.0::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); --- error: relation not found SELECT pg_catalog.pg_restore_relation_stats( 'relation', 0::regclass, 'relpages', 17::integer, 'reltuples', 400.0::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); -- warn and error: unrecognized argument name SELECT pg_restore_relation_stats( @@ -873,7 +888,8 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, NULL, '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); -- error: argument name is an integer SELECT pg_restore_relation_stats( @@ -881,7 +897,8 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 17, '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); -- error: odd number of variadic arguments cannot be pairs SELECT pg_restore_relation_stats( @@ -889,6 +906,7 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', '17'::integer, 'reltuples', 400::real, + 'relallfrozen', 3::integer, 'relallvisible'); -- error: object doesn't exist @@ -897,7 +915,8 @@ SELECT pg_restore_relation_stats( 'version', 150000::integer, 'relpages', '17'::integer, 'reltuples', 400::real, - 'relallvisible', 4::integer); + 'relallvisible', 4::integer, + 'relallfrozen', 3::integer); -- error: object does not exist SELECT pg_catalog.pg_restore_attribute_stats( |