Re: [HACKERS] CLUSTER command progress monitor
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Alvaro Herrera <alvherre@2ndquadrant.com>, Masahiko Sawada <sawada.mshk@gmail.com>, Tatsuro Yamada <tatsuro.yamada.tf@nttcom.co.jp>, Rafia Sabih <rafia.pghackers@gmail.com>, Dmitry Dolgov <9erthalion6@gmail.com>, Peter Geoghegan <pg@bowt.ie>, PostgreSQL-development <pgsql-hackers@postgresql.org>, Jeff Janes <jeff.janes@gmail.com>, Thomas Munro <thomas.munro@enterprisedb.com>, Michael Paquier <michael.paquier@gmail.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Date: 2019-09-14T02:45:47Z
Lists: pgsql-hackers
On Fri, Sep 13, 2019 at 12:48:40PM -0400, Robert Haas wrote: > On Fri, Sep 13, 2019 at 12:03 PM Alvaro Herrera > <alvherre@2ndquadrant.com> wrote: >> Ummm ... I've been operating --in this thread-- under the assumption >> that it is REINDEX to blame for this problem, not CREATE INDEX, because >> my recollection is that I tested CREATE INDEX together with CLUSTER and >> it worked fine. Has anybody done any actual research that the problem >> is to blame on CREATE INDEX and not REINDEX? > > I am not sure. I think, though, that the point is that all three > commands rebuild indexes. So unless they all expect the same things in > terms of which counters get set during that process, things will not > work correctly. I have provided a short summary of the two issues on the open item page (https://wiki.postgresql.org/wiki/PostgreSQL_12_Open_Items) as the open item was too much evasive. Here is a copy-paste for the archives of what I wrote: 1) A progress may be started while another one is already in progress. Hence, if progress gets stopped the previously-started state is removed, causing all follow-up updates to not happen. 2) Progress updates happening in a code path shared between those three commands may clobber a previous state present. Regarding 1) and based on what I found in the code, you can blame REINDEX reporting which has added progress_start calls in code paths which are also taken by CREATE INDEX and CLUSTER, causing their progress reporting to go to the void. In order to fix this one we could do what I summarized in [1]. As mentioned by Robert, the problem summarized in 2) is much more complex using the current infrastructure, and one could blame all the commands per the way they do not share the same set of progress phases. There are a couple of potential solutions which have been discussed on the thread: - Allow commands to share the same set of phases, which requires some kind of mapping between the phases (?). - Allow progress reports to become a stack. This would also take care of any kind of issues in 1) for the future, and this can cause the incorrect command to be reported to pg_stat_activity if not being careful. - Allow only reporting for a given command ID, which would basically require to pass down the command ID to progress update APIs and bypass an update if the command ID provided by caller does not match the existing one started (?). 1) is pretty easy to fix based on the current state of the code, 2) requires much more consideration, and that's no material for v12. It could be perfectly possible as well that we have another solution not discussed yet on this thread. [1]: https://www.postgresql.org/message-id/20190905010316.GB14853@paquier.xyz -- Michael
Commits
-
Fix progress reporting of CLUSTER / VACUUM FULL
- 6212276e4343 13.0 landed
- da47e43dc32e 12.0 landed
-
Fix thinko when ending progress report for a backend
- f4b91a50e9e6 9.6.16 landed
- 4950f09e7ae2 10.11 landed
- af28744288b1 11.6 landed
- 4c3e750ab4b5 12.0 landed
- ae060a52b288 13.0 landed
-
Report progress of REINDEX operations
- 03f9e5cba0ee 12.0 cited
-
Add progress reporting for CLUSTER and VACUUM FULL.
- 6f97457e0ddd 12.0 landed
-
Un-hide most cascaded-drop details in regression test results.
- 940311e4bb32 12.0 cited
-
Fix memory leak in printtup.c.
- f2004f19ed9c 12.0 cited
-
Remove unused macro
- fb5806533f9f 12.0 cited