Re: WIP: new system catalog pg_wait_event

From: "Drouvot, Bertrand" <bertranddrouvot(dot)pg(at)gmail(dot)com>
To: Michael Paquier <michael(at)paquier(dot)xyz>
Cc: Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>, tgl(at)sss(dot)pgh(dot)pa(dot)us, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: WIP: new system catalog pg_wait_event
Date: 2023-08-10 18:09:34
Message-ID: b71d1977-1a8b-4129-8c03-533031dbd004@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 8/9/23 9:56 AM, Michael Paquier wrote:
> On Tue, Aug 08, 2023 at 10:16:37AM +0200, Drouvot, Bertrand wrote:
>> Please find attached v3 adding the wait event types.
>
> +-- There will surely be at least 9 wait event types, 240 wait events and at
> +-- least 27 related to WAL
> +select count(distinct(wait_event_type)) > 8 as ok_type,
> + count(*) > 239 as ok,
> + count(*) FILTER (WHERE description like '%WAL%') > 26 AS ok_wal_desc
> +from pg_wait_event;
> The point is to check the execution of this function, so this could be
> simpler, like that or a GROUP BY clause with the event type:
> SELECT count(*) > 0 FROM pg_wait_event;
> SELECT wait_event_type, count(*) > 0 AS has_data FROM pg_wait_event
> GROUP BY wait_event_type ORDER BY wait_event_type;
>

Thanks for looking at it!
Right, so v4 attached is just testing "SELECT count(*) > 0 FROM pg_wait_event;",
that does look enough to test.

> + printf $ic "\tmemset(values, 0, sizeof(values));\n";
> + printf $ic "\tmemset(nulls, 0, sizeof(nulls));\n\n";
> + printf $ic "\tvalues[0] = CStringGetTextDatum(\"%s\");\n", $last;
> + printf $ic "\tvalues[1] = CStringGetTextDatum(\"%s\");\n", $wev->[1];
> + printf $ic "\tvalues[2] = CStringGetTextDatum(\"%s\");\n\n", $new_desc;
>
> That's overcomplicated for some code generated. Wouldn't it be
> simpler to generate a list of elements, with the code inserting the
> tuples materialized looping over it?
>

Yeah, agree thanks!
In v4, the perl script now appends the wait events in a List that way:

"
printf $ic "\telement = (wait_event_element *) palloc(sizeof(wait_event_element));\n";

printf $ic "\telement->wait_event_type = \"%s\";\n", $last;
printf $ic "\telement->wait_event_name = \"%s\";\n", $wev->[1];
printf $ic "\telement->wait_event_description = \"%s\";\n\n", $new_desc;

printf $ic "\twait_event = lappend(wait_event, element);\n\n";
"

And the C function pg_get_wait_events() now iterates over this List.

> + my $new_desc = substr $wev->[2], 1, -2;
> + $new_desc =~ s/'/\\'/g;
> + $new_desc =~ s/<.*>(.*?)<.*>/$1/g;
> + $new_desc =~ s/<xref linkend="guc-(.*?)"\/>/$1/g;
> + $new_desc =~ s/; see.*$//;
> Better to document what this does,

good idea...

I had to turn them "on" one by one to recall why they are there...;-)
Done in v4.

> the contents produced look good.

yeap

>
> + rename($ictmp, "$output_path/pg_wait_event_insert.c")
> + || die "rename: $ictmp to $output_path/pg_wait_event_insert.c: $!";
>
> # seems nicer to not add that as an include path for the whole backend.
> waitevent_sources = files(
> 'wait_event.c',
> + 'pg_wait_event.c',
> )
>
> This could use a name referring to SQL functions, say
> wait_event_funcs.c, with a wait_event_data.c or a
> wait_event_funcs_data.c?

That sounds better indeed, thanks! v4 is using wait_event_funcs.c and
wait_event_funcs_data.c.

>
> + # Don't generate .c (except pg_wait_event_insert.c) and .h files for
> + # Extension, LWLock and Lock, these are handled independently.
> + my $is_exception = $waitclass eq 'WaitEventExtension' ||
> + $waitclass eq 'WaitEventLWLock' ||
> + $waitclass eq 'WaitEventLock';
> Perhaps it would be cleaner to use a separate loop?

Agree that's worth it given the fact that iterating one more time is not that
costly here.

Regards,

--
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com

Attachment Content-Type Size
v4-0001-pg_wait_event.patch text/plain 15.5 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Marcelo Juchem 2023-08-10 19:45:47 [PATCH] Support static linking against LLVM
Previous Message Nazir Bilal Yavuz 2023-08-10 16:55:15 Re: Add PG CI to older PG releases