Re: Autovacuum on partitioned table (autoanalyze)
Alvaro Herrera <alvherre@alvh.no-ip.org>
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: yuzuko <yuzukohosoya@gmail.com>
Cc: Tomas Vondra <tomas.vondra@enterprisedb.com>, David Steele <david@pgmasters.net>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>, Justin Pryzby <pryzby@telsasoft.com>, Daniel Gustafsson <daniel@yesql.se>, Amit Langote <amitlangote09@gmail.com>, Masahiko Sawada <masahiko.sawada@2ndquadrant.com>, Laurenz Albe <laurenz.albe@cybertec.at>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Greg Stark <stark@mit.edu>
Date: 2021-04-08T03:22:35Z
Lists: pgsql-hackers
Attachments
- v16_autovacuum_on_partitioned_table.patch (text/x-diff) patch v16
OK, I bit the bullet and re-did the logic in the way I had proposed earlier in the thread: do the propagation on the collector's side, by sending only the list of ancestors: the collector can read the tuple change count by itself, to add it to each ancestor. This seems less wasteful. Attached is v16 which does it that way and seems to work nicely under my testing. However, I just noticed there is a huge problem, which is that the new code in relation_needs_vacanalyze() is doing find_all_inheritors(), and we don't necessarily have a snapshot that lets us do that. While adding a snapshot acquisition at that spot is a very easy fix, I hesitate to fix it that way, because the whole idea there seems quite wasteful: we have to look up, open and lock every single partition, on every single autovacuum iteration through the database. That seems bad. I'm inclined to think that a better idea may be to store reltuples for the partitioned table in pg_class.reltuples, instead of having to add up the reltuples of each partition. I haven't checked if this is likely to break anything. (Also, a minor buglet: if we do ANALYZE (col1), then ANALYZE (col2) a partition, then we repeatedly propagate the counts to the parent table, so we would cause the parent to be analyzed more times than it should. Sounds like we should not send the ancestor list when a column list is given to manual analyze. I haven't verified this, however.) -- Álvaro Herrera Valdivia, Chile Syntax error: function hell() needs an argument. Please choose what hell you want to involve.
Commits
-
Keep stats up to date for partitioned tables
- e1efc5b465c8 14.0 landed
- 375aed36ad83 15.0 landed
-
Revert analyze support for partitioned tables
- b3d24cc0f0aa 14.0 landed
- 6f8127b73901 15.0 landed
-
Document ANALYZE storage parameters for partitioned tables
- 41badeaba8be 14.0 landed
-
autovacuum: handle analyze for partitioned tables
- 0827e8af70f4 14.0 landed