aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMelanie Plageman <melanieplageman@gmail.com>2025-03-03 11:18:05 -0500
committerMelanie Plageman <melanieplageman@gmail.com>2025-03-03 11:18:05 -0500
commit99f8f3fbbc8f743290844e8c676d39dad11c5d5d (patch)
treebfa0507e88c83d28053a7e8beb36d8d61b43b871 /src/test
parent8492feb98f6df3f0f03e84ed56f0d1cbb2ac514c (diff)
downloadpostgresql-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.out99
-rw-r--r--src/test/regress/sql/stats_import.sql49
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(