Re: [PROPOSAL] VACUUM Progress Checker. - Mailing list pgsql-hackers

From Amit Langote
Subject Re: [PROPOSAL] VACUUM Progress Checker.
Date
Msg-id 5641A484.2030008@lab.ntt.co.jp
Whole thread Raw
In response to Re: [PROPOSAL] VACUUM Progress Checker.  ("Syed, Rahila" <Rahila.Syed@nttdata.com>)
Responses Re: [PROPOSAL] VACUUM Progress Checker.  (Amit Langote <amitlangote09@gmail.com>)
Re: [PROPOSAL] VACUUM Progress Checker.  (Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>)
List pgsql-hackers
On 2015/10/29 23:22, Syed, Rahila wrote:
> Please find attached an updated patch.

A few more comments on v6:

>      relname = RelationGetRelationName(onerel);
> +    schemaname = get_namespace_name(RelationGetNamespace(onerel));
>      ereport(elevel,
>              (errmsg("vacuuming \"%s.%s\"",
>                      get_namespace_name(RelationGetNamespace(onerel)),
>                      relname)));
> +    snprintf(progress_message[0], PROGRESS_MESSAGE_LENGTH, "%s", schemaname);
> +    strcat(progress_message[0],".");
> +    strcat(progress_message[0],relname);

How about the following instead -

+ snprintf(progress_message[0], PROGRESS_MESSAGE_LENGTH, "%s",
+                     generate_relation_name(onerel));

>      if (next_not_all_visible_block >= SKIP_PAGES_THRESHOLD)
> +    {
>          skipping_all_visible_blocks = true;
> +        if(!scan_all)
> +            total_heap_pages = total_heap_pages - next_not_all_visible_block;
> +    }
>      else
>          skipping_all_visible_blocks = false;

...

>               */
>              if (next_not_all_visible_block - blkno > SKIP_PAGES_THRESHOLD)
> +            {
>                  skipping_all_visible_blocks = true;
> +                if(!scan_all)
> +                    total_heap_pages = total_heap_pages - (next_not_all_visible_block - blkno);
> +            }

Fujii-san's review comment about these code blocks does not seem to be
addressed. He suggested to keep total_heap_pages fixed while adding number
of skipped pages to that of scanned pages. For that, why not add a
scanned_heap_pages variable instead of using vacrelstats->scanned_pages.

> +        if (has_privs_of_role(GetUserId(), beentry->st_userid))
> +        {
> +            values[2] = UInt32GetDatum(beentry->st_progress_param[0]);
> +            values[3] = UInt32GetDatum(beentry->st_progress_param[1]);
> +            values[4] = UInt32GetDatum(beentry->st_progress_param[2]);
> +            values[5] = UInt32GetDatum(beentry->st_progress_param[3]);
> +            values[6] = UInt32GetDatum(total_pages);
> +            values[7] = UInt32GetDatum(scanned_pages);
> +
> +            if (total_pages != 0)
> +                values[8] = Float8GetDatum(scanned_pages * 100 / total_pages);
> +            else
> +                nulls[8] = true;
> +        }
> +        else
> +        {
> +            values[2] = CStringGetTextDatum("<insufficient privilege>");
> +            nulls[3] = true;
> +            nulls[4] = true;
> +            nulls[5] = true;
> +            nulls[6] = true;
> +            nulls[7] = true;
> +            nulls[8] = true;
> +        }

This is most likely not correct, that is, putting a text datum into
supposedly int4 column. I see this when I switch to a unprivileged user:

pgbench=# \x
pgbench=# \c - other
pgbench=> SELECT * FROM pg_stat_vacuum_progress;
-[ RECORD 1 ]-------+------------------------
pid                 | 20395
table_name          | public.pgbench_accounts
total_heap_pages    | 44895488
scanned_heap_pages  |
total_index_pages   |
scanned_index_pages |
total_pages         |
scanned_pages       |
percent_complete    |

I'm not sure if applying the privilege check for columns of
pg_stat_vacuum_progress is necessary, but I may be wrong.

Thanks,
Amit




pgsql-hackers by date:

Previous
From: Kyotaro HORIGUCHI
Date:
Subject: Re: [PROPOSAL] VACUUM Progress Checker.
Next
From: Kouhei Kaigai
Date:
Subject: Re: bootstrap pg_shseclabel in relcache initialization