28.4.4. Progress Reporting phase status

Started by PG Bug reporting formalmost 2 years ago3 messagesdocs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/16/progress-reporting.html
Description:

Hi there,

I noticed that in "28.4.4. Progress Reporting" chapter for
`pg_stat_progress_create_index`, the "Table 28.43. CREATE INDEX Phases" may
be misleading as phase displayed for "building index" is often more
detailed.
I found in this presentation[1]https://wiki.postgresql.org/images/3/38/Progress-report.pdf (slide 20) what seems to be the exact status
displayed by the table while creating the index.
Maybe documentation table displaying all status could be extended to display
the following status:

- building index: initializing [2]I'm not sure that this one actually exists but I've seen the ones below while testing in my local environment
- building index: scanning table
- building index: sorting live tuples
- building index: sorting dead tuples
- building index: loading tuples in tree

I hope this email is somewhat useful and I apologise in advance as english
is my second language.
Best regards from France,

Eve Fritz

[1]: https://wiki.postgresql.org/images/3/38/Progress-report.pdf
[2]: I'm not sure that this one actually exists but I've seen the ones below while testing in my local environment
while testing in my local environment

#2Euler Taveira
euler@eulerto.com
In reply to: PG Bug reporting form (#1)
Re: 28.4.4. Progress Reporting phase status

On Thu, May 30, 2024, at 12:50 PM, PG Doc comments form wrote:

I noticed that in "28.4.4. Progress Reporting" chapter for
`pg_stat_progress_create_index`, the "Table 28.43. CREATE INDEX Phases" may
be misleading as phase displayed for "building index" is often more
detailed.
I found in this presentation[1] (slide 20) what seems to be the exact status
displayed by the table while creating the index.
Maybe documentation table displaying all status could be extended to display
the following status:

The description is accurate. Since this step (building index) is AM-specific, it
shouldn't contain the additional information (after the semicolon).

- building index: initializing [2]
- building index: scanning table
- building index: sorting live tuples
- building index: sorting dead tuples
- building index: loading tuples in tree

This is the B-tree build phases. Although, the other access methods (such as
Hash, Gin, GiST, BRIN) do not provide a function to report the current building
phase, it might be added in the future. I'm not sure if it is worth adding such
information here. You can certainly obtain the build phases from all access
methods with a query like:

WITH amidx AS (
SELECT oid, amname FROM pg_am WHERE amtype = 'i')
SELECT a.amname, pg_indexam_progress_phasename(a.oid, i)
FROM amidx a, generate_series(0, 100) i
WHERE pg_indexam_progress_phasename(a.oid, i) IS NOT NULL
ORDER BY a.amname, i;

--
Euler Taveira
EDB https://www.enterprisedb.com/

#3Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Euler Taveira (#2)
Re: 28.4.4. Progress Reporting phase status

On 2024-Jun-03, Euler Taveira wrote:

On Thu, May 30, 2024, at 12:50 PM, PG Doc comments form wrote:

I noticed that in "28.4.4. Progress Reporting" chapter for
`pg_stat_progress_create_index`, the "Table 28.43. CREATE INDEX Phases" may
be misleading as phase displayed for "building index" is often more
detailed.
I found in this presentation[1] (slide 20) what seems to be the exact status
displayed by the table while creating the index.
Maybe documentation table displaying all status could be extended to display
the following status:

The description is accurate. Since this step (building index) is AM-specific, it
shouldn't contain the additional information (after the semicolon).

However, maybe Eve is right that we should have these steps:

- building index: initializing [2]
- building index: scanning table
- building index: sorting live tuples
- building index: sorting dead tuples
- building index: loading tuples in tree

somewhere in the AM-specific doc pages,
https://www.postgresql.org/docs/devel/btree.html
and perhaps we can link to that from the progress-report chapter.

(Not really related, but: I think the per-index-AM subsections in
https://www.postgresql.org/docs/devel/indexes-types.html
should have forward-links to the appendix sections on them.)

You can certainly obtain the build phases from all access
methods with a query like:

WITH amidx AS (
SELECT oid, amname FROM pg_am WHERE amtype = 'i')
SELECT a.amname, pg_indexam_progress_phasename(a.oid, i)
FROM amidx a, generate_series(0, 100) i
WHERE pg_indexam_progress_phasename(a.oid, i) IS NOT NULL
ORDER BY a.amname, i;

Heh, only btrees show up there. Sad. I wonder to what extent would it
be useful for the other index AMs to report sub-phases of index
creation. It should be pretty simple to implement ...

--
Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/
"La gente vulgar sólo piensa en pasar el tiempo;
el que tiene talento, en aprovecharlo"