Thread: User Interface for WAL usage data

User Interface for WAL usage data

From
Amit Kapila
Date:
Hi,

In thread [1], we are discussing to expose WAL usage data for each
statement in a way quite similar to how we expose BufferUsage data.
The way it exposes seems reasonable to me and no one else raises any
objection.  It could be that it appears fine to others who have
reviewed the patch but I thought it would be a good idea to write a
separate email just for its UI and see if anybody has objection.

It exposes three variables (a) wal_records (Number of WAL records
produced), (b)  wal_num_fpw (Number of WAL full page image records),
(c) wal_bytes (size of WAL records produced).

The patch has exposed these three variables via explain (analyze, wal)
<statement>, auto_explain and pg_stat_statements.

Exposed via Explain
------------------------------------
Note the usage via line displaying WAL.  This parameter may only be
used when ANALYZE is also enabled.

postgres=# explain (analyze, buffers, wal) update t1 set c2='cccc';
                                                QUERY PLAN
-----------------------------------------------------------------------------------------------------------
 Update on t1  (cost=0.00..53.99 rows=1199 width=414) (actual
time=6.030..6.030 rows=0 loops=1)
   Buffers: shared hit=2484 dirtied=44
   WAL: records=2359 full page records=42 bytes=447788
   ->  Seq Scan on t1  (cost=0.00..53.99 rows=1199 width=414) (actual
time=0.040..0.540 rows=1199 loops=1)
         Buffers: shared hit=42
 Planning Time: 0.179 ms
 Execution Time: 6.119 ms
(7 rows)

Exposed via auto_explain
------------------------------------------
Users need to set auto_explain.log_wal to print WAL usage statistics.
This parameter has no effect unless auto_explain.log_analyze is
enabled.  Note the usage via line displaying WAL.

LOG:  duration: 0.632 ms  plan:
Query Text: update t1 set c2='cccc';
Update on t1  (cost=0.00..16.10 rows=610 width=414) (actual
time=0.629..0.629 rows=0 loops=1)
  Buffers: shared hit=206 dirtied=5 written=2
  WAL: records=200 full page records=2 bytes=37387
  ->  Seq Scan on t1  (cost=0.00..16.10 rows=610 width=414) (actual
time=0.022..0.069 rows=100 loops=1)
        Buffers: shared hit=2 dirtied=1

Exposed via pg_stat_statements
------------------------------------------------
Three new parameters are added to pg_stat_statements function.

select query, wal_bytes, wal_records, wal_num_fpw from
pg_stat_statements where query like 'VACUUM%';
          query           | wal_bytes | wal_records | wal_num_fpw
--------------------------+-----------+-------------+-------------
 VACUUM test       |  72814331 |        8857    |        8855

Any objections/suggestions?

[1] - https://www.postgresql.org/message-id/CAB-hujrP8ZfUkvL5OYETipQwA%3De3n7oqHFU%3D4ZLxWS_Cza3kQQ%40mail.gmail.com

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



Re: User Interface for WAL usage data

From
Justin Pryzby
Date:
On Thu, Apr 02, 2020 at 10:13:18AM +0530, Amit Kapila wrote:
> In thread [1], we are discussing to expose WAL usage data for each
> statement in a way quite similar to how we expose BufferUsage data.
> The way it exposes seems reasonable to me and no one else raises any
> objection.  It could be that it appears fine to others who have
> reviewed the patch but I thought it would be a good idea to write a
> separate email just for its UI and see if anybody has objection.

+1

Regarding v10-0004-Add-option-to-report-WAL-usage-in-EXPLAIN-and-au.patch:
I think there should be additional spaces before "full" and before "bytes":

>    WAL: records=2359 full page records=42 bytes=447788

Compare with these:

     "Sort Method: %s  %s: %ldkB\n",
     "Buckets: %d (originally %d)  Batches: %d (originally %d)  Memory Usage: %ldkB\n",
     "Buckets: %d  Batches: %d  Memory Usage: %ldkB\n",

Otherwise "records=2359 full page records=42" is hard to parse.

> Exposed via auto_explain
>   WAL: records=200 full page records=2 bytes=37387

Same

In v10-0002:
+     * BufferUsage and WalUsage during executing maintenance command can be
should say "during execution of a maintenance command".
I'm afraid that'll cause merge conflicts for you :(

In 0003:
+    /* Provide WAL update data to the instrumentation */
Remove "data" ??

-- 
Justin



Re: User Interface for WAL usage data

From
Kyotaro Horiguchi
Date:
At Thu, 2 Apr 2020 00:41:20 -0500, Justin Pryzby <pryzby@telsasoft.com> wrote in 
> On Thu, Apr 02, 2020 at 10:13:18AM +0530, Amit Kapila wrote:
> > In thread [1], we are discussing to expose WAL usage data for each
> > statement in a way quite similar to how we expose BufferUsage data.
> > The way it exposes seems reasonable to me and no one else raises any
> > objection.  It could be that it appears fine to others who have
> > reviewed the patch but I thought it would be a good idea to write a
> > separate email just for its UI and see if anybody has objection.
> 
> +1
> 
> Regarding v10-0004-Add-option-to-report-WAL-usage-in-EXPLAIN-and-au.patch:
> I think there should be additional spaces before "full" and before "bytes":
> 
> >    WAL: records=2359 full page records=42 bytes=447788
> 
> Compare with these:
> 
>      "Sort Method: %s  %s: %ldkB\n",
>      "Buckets: %d (originally %d)  Batches: %d (originally %d)  Memory Usage: %ldkB\n",
>      "Buckets: %d  Batches: %d  Memory Usage: %ldkB\n",
> 
> Otherwise "records=2359 full page records=42" is hard to parse.

I got the same feeling seeing the line.

"full page records" seems to be showing the number of full page
images, not the record having full page images.

> > Exposed via auto_explain
> >   WAL: records=200 full page records=2 bytes=37387
> 
> Same
> 
> In v10-0002:
> +     * BufferUsage and WalUsage during executing maintenance command can be
> should say "during execution of a maintenance command".
> I'm afraid that'll cause merge conflicts for you :(
> 
> In 0003:
> +    /* Provide WAL update data to the instrumentation */
> Remove "data" ??

-- 
Kyotaro Horiguchi
NTT Open Source Software Center



Re: User Interface for WAL usage data

From
Amit Kapila
Date:
On Thu, Apr 2, 2020 at 11:28 AM Kyotaro Horiguchi
<horikyota.ntt@gmail.com> wrote:
>
> At Thu, 2 Apr 2020 00:41:20 -0500, Justin Pryzby <pryzby@telsasoft.com> wrote in
> > On Thu, Apr 02, 2020 at 10:13:18AM +0530, Amit Kapila wrote:
> > > In thread [1], we are discussing to expose WAL usage data for each
> > > statement in a way quite similar to how we expose BufferUsage data.
> > > The way it exposes seems reasonable to me and no one else raises any
> > > objection.  It could be that it appears fine to others who have
> > > reviewed the patch but I thought it would be a good idea to write a
> > > separate email just for its UI and see if anybody has objection.
> >
> > +1
> >
> > Regarding v10-0004-Add-option-to-report-WAL-usage-in-EXPLAIN-and-au.patch:
> > I think there should be additional spaces before "full" and before "bytes":
> >
> > >    WAL: records=2359 full page records=42 bytes=447788
> >
> > Compare with these:
> >
> >        "Sort Method: %s  %s: %ldkB\n",
> >        "Buckets: %d (originally %d)  Batches: %d (originally %d)  Memory Usage: %ldkB\n",
> >        "Buckets: %d  Batches: %d  Memory Usage: %ldkB\n",
> >
> > Otherwise "records=2359 full page records=42" is hard to parse.
>
> I got the same feeling seeing the line.
>

But isn't this same as we have BufferUsage data?  We can probably
display it as full_page_writes or something like that.

> "full page records" seems to be showing the number of full page
> images, not the record having full page images.
>

I am not sure what exactly is a difference but it is the records
having full page images.  Julien correct me if I am wrong.

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



Re: User Interface for WAL usage data

From
Julien Rouhaud
Date:
Thanks all for the feedback.

On Thu, Apr 2, 2020 at 8:02 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
>
> On Thu, Apr 2, 2020 at 11:28 AM Kyotaro Horiguchi
> <horikyota.ntt@gmail.com> wrote:
> >
> > At Thu, 2 Apr 2020 00:41:20 -0500, Justin Pryzby <pryzby@telsasoft.com> wrote in
> > > On Thu, Apr 02, 2020 at 10:13:18AM +0530, Amit Kapila wrote:
> > > > In thread [1], we are discussing to expose WAL usage data for each
> > > > statement in a way quite similar to how we expose BufferUsage data.
> > > > The way it exposes seems reasonable to me and no one else raises any
> > > > objection.  It could be that it appears fine to others who have
> > > > reviewed the patch but I thought it would be a good idea to write a
> > > > separate email just for its UI and see if anybody has objection.
> > >
> > > +1
> > >
> > > Regarding v10-0004-Add-option-to-report-WAL-usage-in-EXPLAIN-and-au.patch:
> > > I think there should be additional spaces before "full" and before "bytes":
> > >
> > > >    WAL: records=2359 full page records=42 bytes=447788
> > >
> > > Compare with these:
> > >
> > >        "Sort Method: %s  %s: %ldkB\n",
> > >        "Buckets: %d (originally %d)  Batches: %d (originally %d)  Memory Usage: %ldkB\n",
> > >        "Buckets: %d  Batches: %d  Memory Usage: %ldkB\n",
> > >
> > > Otherwise "records=2359 full page records=42" is hard to parse.
> >
> > I got the same feeling seeing the line.
> >
>
> But isn't this same as we have BufferUsage data?  We can probably
> display it as full_page_writes or something like that.
>
> > "full page records" seems to be showing the number of full page
> > images, not the record having full page images.
> >
>
> I am not sure what exactly is a difference but it is the records
> having full page images.  Julien correct me if I am wrong.

This counter should be showing the number of full page image included
in the WAL record(s).  The goal is to try to estimate how much FPI are
amplifying WAL records for a given cumulated size of WAL data.  I had
seen some pretty high amplification recently due to an autovacuum
freeze.  Using pg_waldump to analyze a sample of ~ 100GB of WALs
showed that a 1.5% increase in the number of freeze records lead to
more than 15% increase on  the total amount of WAL, due to a high
amount of those records being FPW.

Also note that the patchset Amit is referencing adds the same
instrumentation for vacuum (verbose) and autovacuum, although this
part is showing the intended "full page write" label rather than the
bogus "full page records".  Example output:

LOG:  automatic vacuum of table "rjuju.public.t1": index scans: 0
        pages: 0 removed, 2213 remain, 0 skipped due to pins, 0 skipped frozen
        tuples: 250000 removed, 250000 remain, 0 are dead but not yet
removable, oldest xmin: 502
        buffer usage: 4448 hits, 4 misses, 4 dirtied
        avg read rate: 0.160 MB/s, avg write rate: 0.160 MB/s
        system usage: CPU: user: 0.13 s, system: 0.00 s, elapsed: 0.19 s
        WAL usage: 6643 records, 4 full page writes, 1402679 bytes

VACUUM log sample:

# vacuum VERBOSE t1;
INFO:  vacuuming "public.t1"
INFO:  "t1": removed 50000 row versions in 443 pages
INFO:  "t1": found 50000 removable, 0 nonremovable row versions in 443
out of 443 pages
DETAIL:  0 dead row versions cannot be removed yet, oldest xmin: 512
There were 50000 unused item identifiers.
Skipped 0 pages due to buffer pins, 0 frozen pages.
0 pages are entirely empty.
1332 WAL records, 4 WAL full page writes, 306901 WAL bytes
CPU: user: 0.01 s, system: 0.00 s, elapsed: 0.01 s.
INFO:  "t1": truncated 443 to 0 pages
DETAIL:  CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s
INFO:  vacuuming "pg_toast.pg_toast_16385"
INFO:  index "pg_toast_16385_index" now contains 0 row versions in 1 pages
DETAIL:  0 index row versions were removed.
0 index pages have been deleted, 0 are currently reusable.
CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s.
INFO:  "pg_toast_16385": found 0 removable, 0 nonremovable row
versions in 0 out of 0 pages
DETAIL:  0 dead row versions cannot be removed yet, oldest xmin: 513
There were 0 unused item identifiers.
Skipped 0 pages due to buffer pins, 0 frozen pages.
0 pages are entirely empty.
0 WAL records, 0 WAL full page writes, 0 WAL bytes
CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s.
VACUUM

Obviously previous complaints about the meaning and parsability of
"full page writes" should be addressed here for consistency.



Re: User Interface for WAL usage data

From
Justin Pryzby
Date:
On Thu, Apr 02, 2020 at 11:32:16AM +0530, Amit Kapila wrote:
> On Thu, Apr 2, 2020 at 11:28 AM Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote:
> >
> > At Thu, 2 Apr 2020 00:41:20 -0500, Justin Pryzby <pryzby@telsasoft.com> wrote in
> > > Regarding v10-0004-Add-option-to-report-WAL-usage-in-EXPLAIN-and-au.patch:
> > > I think there should be additional spaces before "full" and before "bytes":
> > >
> > > >    WAL: records=2359 full page records=42 bytes=447788
> > >
> > > Compare with these:
> > >
> > >        "Sort Method: %s  %s: %ldkB\n",
> > >        "Buckets: %d (originally %d)  Batches: %d (originally %d)  Memory Usage: %ldkB\n",
> > >        "Buckets: %d  Batches: %d  Memory Usage: %ldkB\n",
> > >
> > > Otherwise "records=2359 full page records=42" is hard to parse.
> >
> > I got the same feeling seeing the line.
> 
> But isn't this same as we have BufferUsage data?  We can probably
> display it as full_page_writes or something like that.

I guess you mean this:
         Buffers: shared hit=994 read=11426 dirtied=466

Which can show shared/local/temp.  Actually I would probably make the same
suggestion for "Buffers" (if it were a new patch).  I would find this to be
pretty unfriendly output:

         Buffers: shared hit=12345 read=12345 dirtied=12345 local hit=12345 read=12345 dirtied=12345 temp hit=12345
read=12345dirtied=12345
 

Adding two extra spaces "  local" and "  temp" would have helped there, so
would commas, or parenthesis, dashes or almost anything - other than a
backslash.

So I think you're right that WAL is very similar to the Buffers case, but I
suggest that's not a good example to follow, especially since you're adding a
"field" with spaces in it.

I thought maybe the "two spaces" convention predated "Buffers".  But sort has
had two spaces since it was added 2009-08-10 (9bd27b7c9).  Buffers since it was
added 2009-12-15 (cddca5ec).  And buckets since it was added 2010-02-01
(42a8ab0a).  

-- 
Justin



Re: User Interface for WAL usage data

From
Amit Kapila
Date:
On Thu, Apr 2, 2020 at 12:05 PM Justin Pryzby <pryzby@telsasoft.com> wrote:
>
> On Thu, Apr 02, 2020 at 11:32:16AM +0530, Amit Kapila wrote:
> > On Thu, Apr 2, 2020 at 11:28 AM Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote:
> > >
> > > At Thu, 2 Apr 2020 00:41:20 -0500, Justin Pryzby <pryzby@telsasoft.com> wrote in
> > > > Regarding v10-0004-Add-option-to-report-WAL-usage-in-EXPLAIN-and-au.patch:
> > > > I think there should be additional spaces before "full" and before "bytes":
> > > >
> > > > >    WAL: records=2359 full page records=42 bytes=447788
> > > >
> > > > Compare with these:
> > > >
> > > >        "Sort Method: %s  %s: %ldkB\n",
> > > >        "Buckets: %d (originally %d)  Batches: %d (originally %d)  Memory Usage: %ldkB\n",
> > > >        "Buckets: %d  Batches: %d  Memory Usage: %ldkB\n",
> > > >
> > > > Otherwise "records=2359 full page records=42" is hard to parse.
> > >
> > > I got the same feeling seeing the line.
> >
> > But isn't this same as we have BufferUsage data?  We can probably
> > display it as full_page_writes or something like that.
>
> I guess you mean this:
>          Buffers: shared hit=994 read=11426 dirtied=466
>
> Which can show shared/local/temp.  Actually I would probably make the same
> suggestion for "Buffers" (if it were a new patch).  I would find this to be
> pretty unfriendly output:
>
>          Buffers: shared hit=12345 read=12345 dirtied=12345 local hit=12345 read=12345 dirtied=12345 temp hit=12345
read=12345dirtied=12345
 
>
> Adding two extra spaces "  local" and "  temp" would have helped there, so
> would commas, or parenthesis, dashes or almost anything - other than a
> backslash.
>
> So I think you're right that WAL is very similar to the Buffers case, but I
> suggest that's not a good example to follow, especially since you're adding a
> "field" with spaces in it.
>

Agreed, this is a good reason to keep two spaces as we have in cases
of Buckets.  We can display the variable as "full page writes".

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



Re: User Interface for WAL usage data

From
Justin Pryzby
Date:
> > > > > Regarding v10-0004-Add-option-to-report-WAL-usage-in-EXPLAIN-and-au.patch:
> > > > > I think there should be additional spaces before "full" and before "bytes":
> > > > >
> > > > > >    WAL: records=2359 full page records=42 bytes=447788
> > > > >
> > > > > Compare with these:
> > > > >
> > > > >        "Sort Method: %s  %s: %ldkB\n",
> > > > >        "Buckets: %d (originally %d)  Batches: %d (originally %d)  Memory Usage: %ldkB\n",
> > > > >        "Buckets: %d  Batches: %d  Memory Usage: %ldkB\n",
> > > > >
> > > > > Otherwise "records=2359 full page records=42" is hard to parse.
> > > >
> > > > I got the same feeling seeing the line.
> > >
> > > But isn't this same as we have BufferUsage data?  We can probably
> > > display it as full_page_writes or something like that.
> >
> > I guess you mean this:
> >          Buffers: shared hit=994 read=11426 dirtied=466
> >
> > Which can show shared/local/temp.  Actually I would probably make the same
> > suggestion for "Buffers" (if it were a new patch).  I would find this to be
> > pretty unfriendly output:
> >
> >          Buffers: shared hit=12345 read=12345 dirtied=12345 local hit=12345 read=12345 dirtied=12345 temp hit=12345
read=12345dirtied=12345
 
> >
> > Adding two extra spaces "  local" and "  temp" would have helped there, so
> > would commas, or parenthesis, dashes or almost anything - other than a
> > backslash.
> >
> > So I think you're right that WAL is very similar to the Buffers case[...]

Actually, I take that back.  If I understand correctly, there should be two
spaces not only to make the 2nd field more clear, but because the three values
have different units:

> > > > > >    WAL: records=2359 full page records=42 bytes=447788

1) records; 2) pages ("full page images"); 3) bytes

That is exactly like sort (method/type/size) and hash (buckets/batches/size),
and *not* like buffers, which shows various values all in units of "pages".

-- 
Justin



Re: User Interface for WAL usage data

From
Amit Kapila
Date:
On Fri, Apr 3, 2020 at 10:41 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
>
> > > > > > >    WAL: records=2359 full page records=42 bytes=447788
>
> 1) records; 2) pages ("full page images"); 3) bytes
>
> That is exactly like sort (method/type/size) and hash (buckets/batches/size),
> and *not* like buffers, which shows various values all in units of "pages".
>

The way you have written (2) appears to bit awkward. I would prefer
"full page writes" or "full page images".

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



Re: User Interface for WAL usage data

From
Justin Pryzby
Date:
On Fri, Apr 03, 2020 at 10:52:02AM +0530, Amit Kapila wrote:
> On Fri, Apr 3, 2020 at 10:41 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> >
> > > > > > > >    WAL: records=2359 full page records=42 bytes=447788
> >
> > 1) records; 2) pages ("full page images"); 3) bytes
> >
> > That is exactly like sort (method/type/size) and hash (buckets/batches/size),
> > and *not* like buffers, which shows various values all in units of "pages".
> >
> 
> The way you have written (2) appears to bit awkward. I would prefer
> "full page writes" or "full page images".

I didn't mean it to be the description used in the patch or anywhere else, just
the list of units.

I wonder if it should use colons instead of equals ?  As in:
|    WAL: Records: 2359  Full Page Images: 42  Size: 437kB

Note, that has: 1) two spaces; 2) capitalized "fields"; 3) size rather than
"bytes".  That's similar to Buckets:
|    Buckets: 1024  Batches: 1  Memory Usage: 44kB

I'm not sure if it should say "WAL: " or "WAL ", or perhaps "WAL:  "  If
there's no colon, then it looks like the first field is "WAL Records", but then
"size" isn't as tightly associated with WAL.  It could say:
|    WAL Records: n  Full Page Images: n  WAL Size: nkB

For comparison, buffers uses "equals" for the case showing multiple "fields",
which are all in units of pages:
|    Buffers: shared hit=15 read=2006

Also, for now, the output can be in kB, but I think in the future we should
take a recent suggestion from Andres to make an ExplainPropertyBytes() which
handles conversion to and display of a reasonable unit.  

-- 
Justin



Re: User Interface for WAL usage data

From
Amit Kapila
Date:
On Fri, Apr 3, 2020 at 11:14 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
>
> On Fri, Apr 03, 2020 at 10:52:02AM +0530, Amit Kapila wrote:
> > On Fri, Apr 3, 2020 at 10:41 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> > >
> > > > > > > > >    WAL: records=2359 full page records=42 bytes=447788
> > >
> > > 1) records; 2) pages ("full page images"); 3) bytes
> > >
> > > That is exactly like sort (method/type/size) and hash (buckets/batches/size),
> > > and *not* like buffers, which shows various values all in units of "pages".
> > >
> >
> > The way you have written (2) appears to bit awkward. I would prefer
> > "full page writes" or "full page images".
>
> I didn't mean it to be the description used in the patch or anywhere else, just
> the list of units.
>
> I wonder if it should use colons instead of equals ?  As in:
> |    WAL: Records: 2359  Full Page Images: 42  Size: 437kB
>
> Note, that has: 1) two spaces; 2) capitalized "fields"; 3) size rather than
> "bytes".  That's similar to Buckets:
> |    Buckets: 1024  Batches: 1  Memory Usage: 44kB
>
> I'm not sure if it should say "WAL: " or "WAL ", or perhaps "WAL:  "  If
> there's no colon, then it looks like the first field is "WAL Records", but then
> "size" isn't as tightly associated with WAL.  It could say:
> |    WAL Records: n  Full Page Images: n  WAL Size: nkB
>
> For comparison, buffers uses "equals" for the case showing multiple "fields",
> which are all in units of pages:
> |    Buffers: shared hit=15 read=2006
>

I think this is more close to the case of Buffers where all fields are
directly related to buffers/blocks.  Here all the fields we want to
display are related to WAL, so we should try to make it display
similar to Buffers.

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



Re: User Interface for WAL usage data

From
Amit Kapila
Date:
On Fri, Apr 3, 2020 at 11:29 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
>
> On Fri, Apr 3, 2020 at 11:14 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> >
> > On Fri, Apr 03, 2020 at 10:52:02AM +0530, Amit Kapila wrote:
> > > On Fri, Apr 3, 2020 at 10:41 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> > > >
> > > > > > > > > >    WAL: records=2359 full page records=42 bytes=447788
> > > >
> > > > 1) records; 2) pages ("full page images"); 3) bytes
> > > >
> > > > That is exactly like sort (method/type/size) and hash (buckets/batches/size),
> > > > and *not* like buffers, which shows various values all in units of "pages".
> > > >
> > >
> > > The way you have written (2) appears to bit awkward. I would prefer
> > > "full page writes" or "full page images".
> >
> > I didn't mean it to be the description used in the patch or anywhere else, just
> > the list of units.
> >
> > I wonder if it should use colons instead of equals ?  As in:
> > |    WAL: Records: 2359  Full Page Images: 42  Size: 437kB
> >
> > Note, that has: 1) two spaces; 2) capitalized "fields"; 3) size rather than
> > "bytes".  That's similar to Buckets:
> > |    Buckets: 1024  Batches: 1  Memory Usage: 44kB
> >
> > I'm not sure if it should say "WAL: " or "WAL ", or perhaps "WAL:  "  If
> > there's no colon, then it looks like the first field is "WAL Records", but then
> > "size" isn't as tightly associated with WAL.  It could say:
> > |    WAL Records: n  Full Page Images: n  WAL Size: nkB
> >
> > For comparison, buffers uses "equals" for the case showing multiple "fields",
> > which are all in units of pages:
> > |    Buffers: shared hit=15 read=2006
> >
>
> I think this is more close to the case of Buffers where all fields are
> directly related to buffers/blocks.  Here all the fields we want to
> display are related to WAL, so we should try to make it display
> similar to Buffers.
>

Dilip, Julien, others, do you have any suggestions here? I think we
need to decide something now.  We can change a few things like from
'two spaces' to 'one space' between fields later as well.

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



Re: User Interface for WAL usage data

From
Dilip Kumar
Date:
On Fri, Apr 3, 2020 at 1:57 PM Amit Kapila <amit.kapila16@gmail.com> wrote:
>
> On Fri, Apr 3, 2020 at 11:29 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
> >
> > On Fri, Apr 3, 2020 at 11:14 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> > >
> > > On Fri, Apr 03, 2020 at 10:52:02AM +0530, Amit Kapila wrote:
> > > > On Fri, Apr 3, 2020 at 10:41 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> > > > >
> > > > > > > > > > >    WAL: records=2359 full page records=42 bytes=447788
> > > > >
> > > > > 1) records; 2) pages ("full page images"); 3) bytes
> > > > >
> > > > > That is exactly like sort (method/type/size) and hash (buckets/batches/size),
> > > > > and *not* like buffers, which shows various values all in units of "pages".
> > > > >
> > > >
> > > > The way you have written (2) appears to bit awkward. I would prefer
> > > > "full page writes" or "full page images".
> > >
> > > I didn't mean it to be the description used in the patch or anywhere else, just
> > > the list of units.
> > >
> > > I wonder if it should use colons instead of equals ?  As in:
> > > |    WAL: Records: 2359  Full Page Images: 42  Size: 437kB
> > >
> > > Note, that has: 1) two spaces; 2) capitalized "fields"; 3) size rather than
> > > "bytes".  That's similar to Buckets:
> > > |    Buckets: 1024  Batches: 1  Memory Usage: 44kB
> > >
> > > I'm not sure if it should say "WAL: " or "WAL ", or perhaps "WAL:  "  If
> > > there's no colon, then it looks like the first field is "WAL Records", but then
> > > "size" isn't as tightly associated with WAL.  It could say:
> > > |    WAL Records: n  Full Page Images: n  WAL Size: nkB
> > >
> > > For comparison, buffers uses "equals" for the case showing multiple "fields",
> > > which are all in units of pages:
> > > |    Buffers: shared hit=15 read=2006
> > >
> >
> > I think this is more close to the case of Buffers where all fields are
> > directly related to buffers/blocks.  Here all the fields we want to
> > display are related to WAL, so we should try to make it display
> > similar to Buffers.
> >
>
> Dilip, Julien, others, do you have any suggestions here? I think we
> need to decide something now.  We can change a few things like from
> 'two spaces' to 'one space' between fields later as well.

I also think it is more close to the BufferUsage so better to keep
similar to that.  If we think the parsing is the problem we can keep
'_'  in the multi-word name as shown below.
WAL: records=n full_page_writes=n bytes=n

And, all three fields are related to WAL so we can use WAL: followed
by other fields as we are doing now in the current patch.

-- 
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com



Re: User Interface for WAL usage data

From
Julien Rouhaud
Date:
On Fri, Apr 3, 2020 at 11:58 AM Dilip Kumar <dilipbalaut@gmail.com> wrote:
>
> On Fri, Apr 3, 2020 at 1:57 PM Amit Kapila <amit.kapila16@gmail.com> wrote:
> >
> > On Fri, Apr 3, 2020 at 11:29 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
> > >
> > > On Fri, Apr 3, 2020 at 11:14 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> > > >
> > > > On Fri, Apr 03, 2020 at 10:52:02AM +0530, Amit Kapila wrote:
> > > > > On Fri, Apr 3, 2020 at 10:41 AM Justin Pryzby <pryzby@telsasoft.com> wrote:
> > > > > >
> > > > > > > > > > > >    WAL: records=2359 full page records=42 bytes=447788
> > > > > >
> > > > > > 1) records; 2) pages ("full page images"); 3) bytes
> > > > > >
> > > > > > That is exactly like sort (method/type/size) and hash (buckets/batches/size),
> > > > > > and *not* like buffers, which shows various values all in units of "pages".
> > > > > >
> > > > >
> > > > > The way you have written (2) appears to bit awkward. I would prefer
> > > > > "full page writes" or "full page images".
> > > >
> > > > I didn't mean it to be the description used in the patch or anywhere else, just
> > > > the list of units.
> > > >
> > > > I wonder if it should use colons instead of equals ?  As in:
> > > > |    WAL: Records: 2359  Full Page Images: 42  Size: 437kB
> > > >
> > > > Note, that has: 1) two spaces; 2) capitalized "fields"; 3) size rather than
> > > > "bytes".  That's similar to Buckets:
> > > > |    Buckets: 1024  Batches: 1  Memory Usage: 44kB
> > > >
> > > > I'm not sure if it should say "WAL: " or "WAL ", or perhaps "WAL:  "  If
> > > > there's no colon, then it looks like the first field is "WAL Records", but then
> > > > "size" isn't as tightly associated with WAL.  It could say:
> > > > |    WAL Records: n  Full Page Images: n  WAL Size: nkB
> > > >
> > > > For comparison, buffers uses "equals" for the case showing multiple "fields",
> > > > which are all in units of pages:
> > > > |    Buffers: shared hit=15 read=2006
> > > >
> > >
> > > I think this is more close to the case of Buffers where all fields are
> > > directly related to buffers/blocks.  Here all the fields we want to
> > > display are related to WAL, so we should try to make it display
> > > similar to Buffers.
> > >
> >
> > Dilip, Julien, others, do you have any suggestions here? I think we
> > need to decide something now.  We can change a few things like from
> > 'two spaces' to 'one space' between fields later as well.
>
> I also think it is more close to the BufferUsage so better to keep
> similar to that.

+1 too for keeping consistency with BufferUsage, and adding extra
spaces if needed.

>  If we think the parsing is the problem we can keep
> '_'  in the multi-word name as shown below.
> WAL: records=n full_page_writes=n bytes=n

I'm fine with it too.

To answer Justin too:

> Also, for now, the output can be in kB, but I think in the future we should
> take a recent suggestion from Andres to make an ExplainPropertyBytes() which
> handles conversion to and display of a reasonable unit.

This could be nice, but I think that it raises some extra concerns.
There are multiple tools that parse those outputs, and having to deal
with a new and non-fixed units may cause some issues.  And probably
the non text output would also need to be displayed differently.



Re: User Interface for WAL usage data

From
Justin Pryzby
Date:
On Thu, Apr 02, 2020 at 08:29:31AM +0200, Julien Rouhaud wrote:
> > > "full page records" seems to be showing the number of full page
> > > images, not the record having full page images.
> >
> > I am not sure what exactly is a difference but it is the records
> > having full page images.  Julien correct me if I am wrong.

> Obviously previous complaints about the meaning and parsability of
> "full page writes" should be addressed here for consistency.

There's a couple places that say "full page image records" which I think is
language you were trying to avoid.  It's the number of pages, not the number of
records, no ?  I see explain and autovacuum say what I think is wanted, but
these say the wrong thing?  Find attached slightly larger patch.

$ git grep 'image record'
contrib/pg_stat_statements/pg_stat_statements.c:        int64           wal_num_fpw;    /* # of WAL full page image
recordsgenerated */
 
doc/src/sgml/ref/explain.sgml:      number of records, number of full page image records and amount of WAL

-- 
Justin

Attachment

Re: User Interface for WAL usage data

From
Amit Kapila
Date:
On Mon, Apr 6, 2020 at 10:04 PM Justin Pryzby <pryzby@telsasoft.com> wrote:
>
> On Thu, Apr 02, 2020 at 08:29:31AM +0200, Julien Rouhaud wrote:
> > > > "full page records" seems to be showing the number of full page
> > > > images, not the record having full page images.
> > >
> > > I am not sure what exactly is a difference but it is the records
> > > having full page images.  Julien correct me if I am wrong.
>
> > Obviously previous complaints about the meaning and parsability of
> > "full page writes" should be addressed here for consistency.
>
> There's a couple places that say "full page image records" which I think is
> language you were trying to avoid.  It's the number of pages, not the number of
> records, no ?  I see explain and autovacuum say what I think is wanted, but
> these say the wrong thing?  Find attached slightly larger patch.
>
> $ git grep 'image record'
> contrib/pg_stat_statements/pg_stat_statements.c:        int64           wal_num_fpw;    /* # of WAL full page image
recordsgenerated */
 
> doc/src/sgml/ref/explain.sgml:      number of records, number of full page image records and amount of WAL
>

Few comments:
1.
- int64 wal_num_fpw; /* # of WAL full page image records generated */
+ int64 wal_num_fpw; /* # of WAL full page images generated */

Let's change comment as " /* # of WAL full page writes generated */"
to be consistent with other places like instrument.h.  Also, make a
similar change at other places if required.

2.
       <entry>
-        Total amount of WAL bytes generated by the statement
+        Total number of WAL bytes generated by the statement
       </entry>

I feel the previous text was better as this field can give us the size
of WAL with which we can answer "how much WAL data is generated by a
particular statement?".  Julien, do you have any thoughts on this?

Can we please post/discuss patches on the main thread [1]?

[1] - https://www.postgresql.org/message-id/CAB-hujrP8ZfUkvL5OYETipQwA%3De3n7oqHFU%3D4ZLxWS_Cza3kQQ%40mail.gmail.com

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com