Re: error context for vacuum to include block number
Masahiko Sawada <masahiko.sawada@2ndquadrant.com>
From: Masahiko Sawada <masahiko.sawada@2ndquadrant.com>
To: Justin Pryzby <pryzby@telsasoft.com>
Cc: Andres Freund <andres@anarazel.de>, Michael Paquier <michael@paquier.xyz>, Alvaro Herrera <alvherre@2ndquadrant.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2020-01-27T06:59:58Z
Lists: pgsql-hackers
On Mon, 27 Jan 2020 at 14:38, Justin Pryzby <pryzby@telsasoft.com> wrote: > > On Sun, Jan 26, 2020 at 12:29:38PM -0800, Andres Freund wrote: > > > postgres=# SET client_min_messages=debug;SET statement_timeout=99; VACUUM (VERBOSE, PARALLEL 0) t; > > > INFO: vacuuming "public.t" > > > DEBUG: "t_a_idx": vacuuming index > > > 2020-01-20 15:47:36.338 CST [20139] ERROR: canceling statement due to statement timeout > > > 2020-01-20 15:47:36.338 CST [20139] CONTEXT: while vacuuming relation "public.t_a_idx" > > > 2020-01-20 15:47:36.338 CST [20139] STATEMENT: VACUUM (VERBOSE, PARALLEL 0) t; > > > ERROR: canceling statement due to statement timeout > > > CONTEXT: while vacuuming relation "public.t_a_idx" > > > > It'd be a bit nicer if it said index "public.t_a_idx" for relation "public.t". > > I think that tips the scale in favour of making vacrelstats a global. > I added that as a 1st patch, and squished the callback patches into one. Hmm I don't think it's a good idea to make vacrelstats global. If we want to display the relation name and its index name in error context we might want to define a new struct dedicated for error context reporting. That is it has blkno, stage and relation name and schema name for both table and index and then we set these variables of callback argument before performing a vacuum phase. We don't change LVRelStats at all. Although the patch replaces get_namespace_name and RelationGetRelationName but we use namespace name of relation at only two places and almost ereport/elog messages use only relation name gotten by RelationGetRelationName which is a macro to access the relation name in Relation struct. So I think adding relname to LVRelStats would not be a big benefit. Similarly, adding table namespace to LVRelStats would be good to avoid calling get_namespace_name whereas I'm not sure it's worth to have it because it's expected not to be really many times. Regards, -- Masahiko Sawada http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Avoid calls to RelationGetRelationName() and RelationGetNamespace() in
- ef75140fe756 13.0 landed
-
Introduce vacuum errcontext to display additional information.
- b61d161c1463 13.0 landed
-
Fix mesurement of elapsed time during truncating heap in VACUUM.
- 007491979461 13.0 cited
-
Allow vacuum command to process indexes in parallel.
- 40d964ec997f 13.0 cited
-
Refactor code dedicated to index vacuuming in vacuumlazy.c
- 1ab41a3c8edc 13.0 landed
-
Remove duplicated progress reporting during heap scan of VACUUM
- e5a02e0fc68b 13.0 landed