Temporarily install debugging in partition_prune test

The buildfarm animal parula has been sporadically failing in the
partition_prune test for the past week or so.  It appears like an
auto-vacuum or auto-analyze has run on one of the partitions of the "ab"
table, causing the plan to change.  This is unexpected as the table is
empty.

Here we install some telemetry to find out if this is the case.  This
also joins in pg_index to see if something has gone wrong with the index
which could result in the planner being unable to use that index.

We can revert this once we've figured out the cause of the plan
instability.

Reported-by: Tom Lane
Investigation-by: Tom Lane
Discussion: https://postgr.es/m/4009739.1710878318%40sss.pgh.pa.us
This commit is contained in:
David Rowley 2024-03-21 21:21:05 +13:00
parent 6185c9737c
commit 1db689715d
2 changed files with 76 additions and 0 deletions

View File

@ -2449,6 +2449,37 @@ create index ab_a3_b3_a_idx on ab_a3_b3 (a);
set enable_hashjoin = 0;
set enable_mergejoin = 0;
set enable_memoize = 0;
-- Temporarily install some debugging to investigate plan instability.
select c.relname,c.relpages,c.reltuples,i.indisvalid,s.autovacuum_count,s.autoanalyze_count
from pg_class c
left join pg_stat_all_tables s on c.oid = s.relid
left join pg_index i on c.oid = i.indexrelid
where c.relname like 'ab\_%' order by c.relname;
relname | relpages | reltuples | indisvalid | autovacuum_count | autoanalyze_count
----------------+----------+-----------+------------+------------------+-------------------
ab_a1 | 0 | -1 | | 0 | 0
ab_a1_b1 | 0 | -1 | | 0 | 0
ab_a1_b1_a_idx | 1 | 0 | t | |
ab_a1_b2 | 0 | -1 | | 0 | 0
ab_a1_b2_a_idx | 1 | 0 | t | |
ab_a1_b3 | 0 | -1 | | 0 | 0
ab_a1_b3_a_idx | 1 | 0 | t | |
ab_a2 | 0 | -1 | | 0 | 0
ab_a2_b1 | 0 | -1 | | 0 | 0
ab_a2_b1_a_idx | 1 | 0 | t | |
ab_a2_b2 | 0 | -1 | | 0 | 0
ab_a2_b2_a_idx | 1 | 0 | t | |
ab_a2_b3 | 0 | -1 | | 0 | 0
ab_a2_b3_a_idx | 1 | 0 | t | |
ab_a3 | 0 | -1 | | 0 | 0
ab_a3_b1 | 0 | -1 | | 0 | 0
ab_a3_b1_a_idx | 1 | 0 | t | |
ab_a3_b2 | 0 | -1 | | 0 | 0
ab_a3_b2_a_idx | 1 | 0 | t | |
ab_a3_b3 | 0 | -1 | | 0 | 0
ab_a3_b3_a_idx | 1 | 0 | t | |
(21 rows)
select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on ab.a = a.a where a.a in(0, 0, 1)');
explain_parallel_append
--------------------------------------------------------------------------------------------------------
@ -2824,6 +2855,37 @@ deallocate ab_q3;
deallocate ab_q4;
deallocate ab_q5;
deallocate ab_q6;
-- Temporarily install some debugging to investigate plan instability.
select c.relname,c.relpages,c.reltuples,i.indisvalid,s.autovacuum_count,s.autoanalyze_count
from pg_class c
left join pg_stat_all_tables s on c.oid = s.relid
left join pg_index i on c.oid = i.indexrelid
where c.relname like 'ab\_%' order by c.relname;
relname | relpages | reltuples | indisvalid | autovacuum_count | autoanalyze_count
----------------+----------+-----------+------------+------------------+-------------------
ab_a1 | 0 | -1 | | 0 | 0
ab_a1_b1 | 0 | -1 | | 0 | 0
ab_a1_b1_a_idx | 1 | 0 | t | |
ab_a1_b2 | 0 | -1 | | 0 | 0
ab_a1_b2_a_idx | 1 | 0 | t | |
ab_a1_b3 | 0 | -1 | | 0 | 0
ab_a1_b3_a_idx | 1 | 0 | t | |
ab_a2 | 0 | -1 | | 0 | 0
ab_a2_b1 | 0 | -1 | | 0 | 0
ab_a2_b1_a_idx | 1 | 0 | t | |
ab_a2_b2 | 0 | -1 | | 0 | 0
ab_a2_b2_a_idx | 1 | 0 | t | |
ab_a2_b3 | 0 | -1 | | 0 | 0
ab_a2_b3_a_idx | 1 | 0 | t | |
ab_a3 | 0 | -1 | | 0 | 0
ab_a3_b1 | 0 | -1 | | 0 | 0
ab_a3_b1_a_idx | 1 | 0 | t | |
ab_a3_b2 | 0 | -1 | | 0 | 0
ab_a3_b2_a_idx | 1 | 0 | t | |
ab_a3_b3 | 0 | -1 | | 0 | 0
ab_a3_b3_a_idx | 1 | 0 | t | |
(21 rows)
-- UPDATE on a partition subtree has been seen to have problems.
insert into ab values (1,2);
explain (analyze, costs off, summary off, timing off)

View File

@ -607,6 +607,13 @@ set enable_hashjoin = 0;
set enable_mergejoin = 0;
set enable_memoize = 0;
-- Temporarily install some debugging to investigate plan instability.
select c.relname,c.relpages,c.reltuples,i.indisvalid,s.autovacuum_count,s.autoanalyze_count
from pg_class c
left join pg_stat_all_tables s on c.oid = s.relid
left join pg_index i on c.oid = i.indexrelid
where c.relname like 'ab\_%' order by c.relname;
select explain_parallel_append('select avg(ab.a) from ab inner join lprt_a a on ab.a = a.a where a.a in(0, 0, 1)');
-- Ensure the same partitions are pruned when we make the nested loop
@ -674,6 +681,13 @@ deallocate ab_q4;
deallocate ab_q5;
deallocate ab_q6;
-- Temporarily install some debugging to investigate plan instability.
select c.relname,c.relpages,c.reltuples,i.indisvalid,s.autovacuum_count,s.autoanalyze_count
from pg_class c
left join pg_stat_all_tables s on c.oid = s.relid
left join pg_index i on c.oid = i.indexrelid
where c.relname like 'ab\_%' order by c.relname;
-- UPDATE on a partition subtree has been seen to have problems.
insert into ab values (1,2);
explain (analyze, costs off, summary off, timing off)