is compared to the total number of tuples inserted, updated, or deleted
since the last ANALYZE.
+ For partitioned tables, inserts, updates and deletes on partitions
+ are counted towards this threshold; however, DDL
+ operations such as ATTACH, DETACH
+ and DROP are not, so running a manual
+ ANALYZE is recommended if the partition added or
+ removed contains a statistically significant volume of data.
Whenever you have significantly altered the distribution of data
within a table, running ANALYZE is strongly recommended. This
- includes bulk loading large amounts of data into the table. Running
+ includes bulk loading large amounts of data into the table as well as
+ attaching, detaching or dropping partitions. Running
ANALYZE (or VACUUM ANALYZE)
ensures that the planner has up-to-date statistics about the
table. With no statistics or obsolete statistics, the planner might
- If the table being analyzed has one or more children,
- ANALYZE will gather statistics twice: once on the
- rows of the parent table only, and a second time on the rows of the
- parent table with all of its children. This second set of statistics
- is needed when planning queries that traverse the entire inheritance
- tree. The autovacuum daemon, however, will only consider inserts or
- updates on the parent table itself when deciding whether to trigger an
- automatic analyze for that table. If that table is rarely inserted into
- or updated, the inheritance statistics will not be up to date unless you
- run ANALYZE manually.
+ If the table being analyzed is partitioned, ANALYZE
+ will gather statistics by sampling blocks randomly from its partitions;
+ in addition, it will recurse into each partition and update its statistics.
+ (However, in multi-level partitioning scenarios, each leaf partition
+ will only be analyzed once.)
+ By constrast, if the table being analyzed has inheritance children,
+ ANALYZE will gather statistics for it twice:
+ once on the rows of the parent table only, and a second time on the
+ rows of the parent table with all of its children. This second set of
+ statistics is needed when planning queries that traverse the entire
+ inheritance tree. The child tables themselves are not individually
+ analyzed in this case.
- If any of the child tables are foreign tables whose foreign data wrappers
+ The autovacuum daemon counts inserts, updates and deletes in the
+ partitions to determine if auto-analyze is needed. However, adding
+ or removing partitions does not affect autovacuum daemon decisions,
+ so triggering a manual ANALYZE is recommended
+ when this occurs.
+
+
+ Tuples changed in inheritance children do not count towards analyze
+ on the parent table. If the parent table is empty or rarely modified,
+ it may never be processed by autovacuum. It's necessary to
+ periodically run a manual ANALYZE to keep the
+ statistics of the table hierarchy up to date.
+
+
+ If any of the child tables or partitions are foreign tables whose foreign data wrappers
do not support ANALYZE, those child tables are ignored while
gathering inheritance statistics.