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.
Re: [PROPOSAL] VACUUM Progress Checker. |
| 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: