From f03a9ca4366d064d89b7cf7ed75d4e43f2ed0667 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 21 May 2019 12:23:16 -0400 Subject: [PATCH] Insert temporary debugging output in regression tests. We're seeing occasional instability in the plans generated for parallel queries on the "a_star" table hierarchy. This suggests that something is changing the planner's stats for those tables, but that should not be happening within a regression test run. To try to gather some information about what's happening, insert additional queries to check the basic page/tuple counts for these tables, as well as whether any vacuums or analyzes have happened on them. (We expect that only the database-wide VACUUM in sanity_check.sql will have touched them.) I added the probes not only in select_parallel.sql itself, but also in stats.sql, bearing in mind that the stats collector's lag may prevent the initial query from reporting current truth. If any extra vacuum/analyze has happened, the recheck in stats.sql definitely ought to see it. This commit can be reverted once we figure out what's going on. Per suggestion from David Rowley, though I changed the queries around. Discussion: https://postgr.es/m/CA+hUKG+0CxrKRWRMf5ymN3gm+BECHna2B-q1w8onKBep4HasUw@mail.gmail.com --- src/test/regress/expected/select_parallel.out | 27 +++++++++++++++++++ src/test/regress/expected/stats.out | 27 +++++++++++++++++++ src/test/regress/sql/select_parallel.sql | 8 ++++++ src/test/regress/sql/stats.sql | 8 ++++++ 4 files changed, 70 insertions(+) diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out index 0eca76cb41..9775cc898c 100644 --- a/src/test/regress/expected/select_parallel.out +++ b/src/test/regress/expected/select_parallel.out @@ -89,6 +89,33 @@ select round(avg(aa)), sum(aa) from a_star a3; 14 | 355 (1 row) +-- Temporary hack to investigate whether extra vacuum/analyze is happening +select relname, relpages, reltuples +from pg_class +where relname like '__star' order by relname; + relname | relpages | reltuples +---------+----------+----------- + a_star | 1 | 3 + b_star | 1 | 4 + c_star | 1 | 4 + d_star | 1 | 16 + e_star | 1 | 7 + f_star | 1 | 16 +(6 rows) + +select relname, vacuum_count, analyze_count, autovacuum_count, autoanalyze_count +from pg_stat_all_tables +where relname like '__star' order by relname; + relname | vacuum_count | analyze_count | autovacuum_count | autoanalyze_count +---------+--------------+---------------+------------------+------------------- + a_star | 1 | 0 | 0 | 0 + b_star | 1 | 0 | 0 | 0 + c_star | 1 | 0 | 0 | 0 + d_star | 1 | 0 | 0 | 0 + e_star | 1 | 0 | 0 | 0 + f_star | 1 | 0 | 0 | 0 +(6 rows) + -- Disable Parallel Append alter table a_star reset (parallel_workers); alter table b_star reset (parallel_workers); diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out index b01e58b98c..61fbf7e41e 100644 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@ -199,6 +199,33 @@ FROM prevstats AS pr; t (1 row) +-- Temporary hack to investigate whether extra vacuum/analyze is happening +select relname, relpages, reltuples +from pg_class +where relname like '__star' order by relname; + relname | relpages | reltuples +---------+----------+----------- + a_star | 1 | 3 + b_star | 1 | 4 + c_star | 1 | 4 + d_star | 1 | 16 + e_star | 1 | 7 + f_star | 1 | 16 +(6 rows) + +select relname, vacuum_count, analyze_count, autovacuum_count, autoanalyze_count +from pg_stat_all_tables +where relname like '__star' order by relname; + relname | vacuum_count | analyze_count | autovacuum_count | autoanalyze_count +---------+--------------+---------------+------------------+------------------- + a_star | 1 | 0 | 0 | 0 + b_star | 1 | 0 | 0 | 0 + c_star | 1 | 0 | 0 | 0 + d_star | 1 | 0 | 0 | 0 + e_star | 1 | 0 | 0 | 0 + f_star | 1 | 0 | 0 | 0 +(6 rows) + DROP TABLE trunc_stats_test, trunc_stats_test1, trunc_stats_test2, trunc_stats_test3, trunc_stats_test4; DROP TABLE prevstats; -- End of Stats Test diff --git a/src/test/regress/sql/select_parallel.sql b/src/test/regress/sql/select_parallel.sql index 03c056b8b7..f96812b550 100644 --- a/src/test/regress/sql/select_parallel.sql +++ b/src/test/regress/sql/select_parallel.sql @@ -36,6 +36,14 @@ explain (costs off) select round(avg(aa)), sum(aa) from a_star; select round(avg(aa)), sum(aa) from a_star a3; +-- Temporary hack to investigate whether extra vacuum/analyze is happening +select relname, relpages, reltuples +from pg_class +where relname like '__star' order by relname; +select relname, vacuum_count, analyze_count, autovacuum_count, autoanalyze_count +from pg_stat_all_tables +where relname like '__star' order by relname; + -- Disable Parallel Append alter table a_star reset (parallel_workers); alter table b_star reset (parallel_workers); diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql index feaaee6326..9defd4b7a9 100644 --- a/src/test/regress/sql/stats.sql +++ b/src/test/regress/sql/stats.sql @@ -174,6 +174,14 @@ SELECT st.heap_blks_read + st.heap_blks_hit >= pr.heap_blks + cl.relpages, SELECT pr.snap_ts < pg_stat_get_snapshot_timestamp() as snapshot_newer FROM prevstats AS pr; +-- Temporary hack to investigate whether extra vacuum/analyze is happening +select relname, relpages, reltuples +from pg_class +where relname like '__star' order by relname; +select relname, vacuum_count, analyze_count, autovacuum_count, autoanalyze_count +from pg_stat_all_tables +where relname like '__star' order by relname; + DROP TABLE trunc_stats_test, trunc_stats_test1, trunc_stats_test2, trunc_stats_test3, trunc_stats_test4; DROP TABLE prevstats; -- End of Stats Test