Hi,

On 2023-08-17 14:53, Drouvot, Bertrand wrote:
On 8/17/23 3:53 AM, Masahiro Ikeda wrote:
1)

The regular expression needs to be changed in generate-wait_event_types.pl.
I have compared the documentation with the output of the pg_wait_event
view and found the following differences.

* For parameter names, the substitution for underscore is missing.
-ArchiveCleanupCommand Waiting for archive_cleanup_command to complete
-ArchiveCommand Waiting for archive_command to complete
+ArchiveCleanupCommand Waiting for archive-cleanup-command to complete
+ArchiveCommand Waiting for archive-command to complete
-RecoveryEndCommand Waiting for recovery_end_command to complete
+RecoveryEndCommand Waiting for recovery-end-command to complete
-RestoreCommand Waiting for restore_command to complete
+RestoreCommand Waiting for restore-command to complete


Yeah, nice catch. v7 just shared up-thread replace "-" by "_"
for such a case. But I'm not sure the pg_wait_event description field needs to be 100% aligned with the documentation: wouldn't be better to replace
"-" by " " in such cases in pg_wait_event?

* The HTML tag match is not shortest match.
-frozenid Waiting to update pg_database.datfrozenxid and pg_database.datminmxid
+frozenid Waiting to update datminmxid


Nice catch, fixed in v7.

Thanks, I confirmed.

* There are two blanks before "about".

This is coming from wait_event_names.txt, thanks for pointing out.
I just submitted a patch [1] to fix that.

Thanks. I agree it's better to be treated as a separated patch.

Also " for heavy weight is
   removed (is it intended?)
-LockManager Waiting to read or update information about "heavyweight" locks +LockManager Waiting to read or update information  about heavyweight locks


Not intended, fixed in v7.

OK, I confirmed it's fixed.

* Do we need "worker_spi_main" in the description? The name column
   shows the same one, so it could be omitted.
pg_wait_event
worker_spi_main Custom wait event "worker_spi_main" defined by extension


Do you mean remove the wait event name from the description in case of custom extension wait events? I'd prefer to keep it, if not the descriptions would be
all the same for custom wait events.

OK, I thought it's redundant.

BTW, is it better to start with "Waiting" like any other lines?
For example, "Waiting for custom event \"worker_spi_main\" defined by an extension".

2)

Would it be better to add "extension" meaning unassigned?

Extensions can add Extension and LWLock types to the list shown in Table 28.8 and Table 28.12. In some cases, the name of LWLock assigned by an extension will not be available in all server processes; It might be reported as just “extension” rather than the extension-assigned name.


Yeah, could make sense but I think that should be a dedicated patch
for the documentation.

OK, make sense.

3)

Would index == els be better for the following Assert?
+    Assert(index <= els);


Agree, done in v7.

4)

There is a typo. alll -> all
+    /* Allocate enough space for alll entries */

Thanks, I confirmed it's fixed.


The followings are additional comments for v7.

1)

I am not sure that "pg_wait_event" is a good idea for the name if the
new view.  How about "pg_wait_events" instead, in plural form?  There
is more than one wait event listed.
I'd prefer the singular form. There is a lot of places where it's already used (pg_database, pg_user, pg_namespace...to name a few) and it looks like that using
the plural form are exceptions.

Since I got the same feeling as Michael-san that "pg_wait_events" would be better, I check the names of all system views. I think the singular form seems to be exceptions for views though the singular form is used usually for system catalogs.

https://www.postgresql.org/docs/devel/views.html
https://www.postgresql.org/docs/devel/catalogs.html

2)

$ctmp must be $wctmp?

+       rename($wctmp, "$output_path/wait_event_funcs_data.c")
+         || die "rename: $ctmp to $output_path/wait_event_funcs_data.c: $!";


3)

"List all the wait events type, name and descriptions" is enough?

+ * List all the wait events (type, name) and their descriptions.

4)

Why don't you add the usage of the view in the monitoring.sgml?

```
   <para>
     Here is an example of how wait events can be viewed:

<programlisting>
SELECT pid, wait_event_type, wait_event FROM pg_stat_activity WHERE wait_event is NOT NULL;
 pid  | wait_event_type | wait_event
------+-----------------+------------
 2540 | Lock            | relation
 6644 | LWLock          | ProcArray
(2 rows)
</programlisting>
   </para>
```

ex.
postgres(3789417)=# SELECT a.pid, a.wait_event_type, a.wait_event, w.description FROM pg_stat_activity a JOIN pg_wait_event w ON (a.wait_event_type = w.type AND a.wait_event = w.name) WHERE wait_event is NOT NULL; pid | wait_event_type | wait_event | description
---------+-----------------+-------------------+--------------------------------------------------------
3783759 | Activity | AutoVacuumMain | Waiting in main loop of autovacuum launcher process 3812866 | Extension | WorkerSpiMain | Custom wait event "WorkerSpiMain" defined by extension 3783756 | Activity | BgWriterHibernate | Waiting in background writer process, hibernating 3783760 | Activity | ArchiverMain | Waiting in main loop of archiver process 3783755 | Activity | CheckpointerMain | Waiting in main loop of checkpointer process 3783758 | Activity | WalWriterMain | Waiting in main loop of WAL writer process
(6 rows)

5)

Though I'm not familiar the value, do we need procost?

+{ oid => '8403', descr => 'describe wait events',
+  proname => 'pg_get_wait_events', procost => '10', prorows => '100',
+  proretset => 't', provolatile => 's', prorettype => 'record',
+  proargtypes => '', proallargtypes => '{text,text,text}',
+  proargmodes => '{o,o,o}', proargnames => '{type,name,description}',
+  prosrc => 'pg_get_wait_events' },


Regards,
--
Masahiro Ikeda
NTT DATA CORPORATION


Reply via email to