WAL usage calculation patch

Started by Kirill Bychikabout 6 years ago173 messageshackers
Jump to latest
#1Kirill Bychik
kirill.bychik@gmail.com

Hello pgsql-hackers,

Submitting a patch that would enable gathering of per-statement WAL
generation statistics, similar to how it is done for buffer usage.
Collected is the number of records added to WAL and number of WAL
bytes written.

The data collected was found valuable to analyze update-heavy load,
with WAL generation being the bottleneck.

The usage data is collected at low level, after compression is done on
WAL record. Data is then exposed via pg_stat_statements, could also be
used in EXPLAIN ANALYZE if needed. Instrumentation is alike to the one
used for buffer stats. I didn't dare to unify both usage metric sets
into single struct, nor rework the way both are passed to parallel
workers.

Performance impact is (supposed to be) very low, essentially adding
two int operations and memory access on WAL record insert. Additional
efforts to allocate shmem chunk for parallel workers. Parallel workers
shmem usage is increased to fir in a struct of two longs.

Patch is separated in two parts: core changes and pg_stat_statements
additions. Essentially the extension has its schema updated to allow
two more fields, docs updated to reflect the change. Patch is prepared
against master branch.

Please provide your comments and/or code findings.

Attachments:

wal_stats.ext.patchapplication/octet-stream; name=wal_stats.ext.patchDownload+324-67
wal_stats.core.patchapplication/octet-stream; name=wal_stats.core.patchDownload+86-10
#2Craig Ringer
craig@2ndquadrant.com
In reply to: Kirill Bychik (#1)
Re: WAL usage calculation patch

On Wed, 5 Feb 2020 at 21:36, Kirill Bychik <kirill.bychik@gmail.com> wrote:

Hello pgsql-hackers,

Submitting a patch that would enable gathering of per-statement WAL
generation statistics, similar to how it is done for buffer usage.
Collected is the number of records added to WAL and number of WAL
bytes written.

The data collected was found valuable to analyze update-heavy load,
with WAL generation being the bottleneck.

The usage data is collected at low level, after compression is done on
WAL record. Data is then exposed via pg_stat_statements, could also be
used in EXPLAIN ANALYZE if needed. Instrumentation is alike to the one
used for buffer stats. I didn't dare to unify both usage metric sets
into single struct, nor rework the way both are passed to parallel
workers.

Performance impact is (supposed to be) very low, essentially adding
two int operations and memory access on WAL record insert. Additional
efforts to allocate shmem chunk for parallel workers. Parallel workers
shmem usage is increased to fir in a struct of two longs.

Patch is separated in two parts: core changes and pg_stat_statements
additions. Essentially the extension has its schema updated to allow
two more fields, docs updated to reflect the change. Patch is prepared
against master branch.

Please provide your comments and/or code findings.

I like the concept, I'm a big fan of anything that affordably improves
visibility into Pg's I/O and activity.

To date I've been relying on tools like systemtap to do this sort of
thing. But that's a bit specialised, and Pg currently lacks useful
instrumentation for it so it can be a pain to match up activity by
parallel workers and that sort of thing. (I aim to find time to submit
a patch for that.)

I haven't yet reviewed the patch.

--
Craig Ringer http://www.2ndQuadrant.com/
2ndQuadrant - PostgreSQL Solutions for the Enterprise

#3Thomas Munro
thomas.munro@gmail.com
In reply to: Craig Ringer (#2)
Re: WAL usage calculation patch

On Mon, Feb 10, 2020 at 8:20 PM Craig Ringer <craig@2ndquadrant.com> wrote:

On Wed, 5 Feb 2020 at 21:36, Kirill Bychik <kirill.bychik@gmail.com> wrote:

Patch is separated in two parts: core changes and pg_stat_statements
additions. Essentially the extension has its schema updated to allow
two more fields, docs updated to reflect the change. Patch is prepared
against master branch.

Please provide your comments and/or code findings.

I like the concept, I'm a big fan of anything that affordably improves
visibility into Pg's I/O and activity.

+1

To date I've been relying on tools like systemtap to do this sort of
thing. But that's a bit specialised, and Pg currently lacks useful
instrumentation for it so it can be a pain to match up activity by
parallel workers and that sort of thing. (I aim to find time to submit
a patch for that.)

(I'm interested in seeing your conference talk about that! I did a
bunch of stuff with static probes to measure PHJ behaviour around
barrier waits and so on but it was hard to figure out what stuff like
that to put in the actual tree, it was all a bit
use-once-to-test-a-theory-and-then-throw-away.)

Kirill, I noticed that you included a regression test that is failing. Can
this possibly be stable across machines or even on the same machine?
Does it still pass for you or did something change on the master
branch to add a new WAL record since you posted the patch?

query | calls | rows | wal_write_bytes | wal_write_records
 -------------------------------------------+-------+------+-----------------+-------------------
- CREATE INDEX test_b ON test(b)            |     1 |    0 | 1673 |
            16
- DROP FUNCTION IF EXISTS PLUS_ONE(INTEGER) |     1 |    0 |   56 |
             1
+ CREATE INDEX test_b ON test(b)            |     1 |    0 | 1755 |
            17
+ DROP FUNCTION IF EXISTS PLUS_ONE(INTEGER) |     1 |    0 |    0 |
             0
#4Kirill Bychik
kirill.bychik@gmail.com
In reply to: Thomas Munro (#3)
Re: WAL usage calculation patch

вт, 18 февр. 2020 г. в 06:23, Thomas Munro <thomas.munro@gmail.com>:

On Mon, Feb 10, 2020 at 8:20 PM Craig Ringer <craig@2ndquadrant.com> wrote:

On Wed, 5 Feb 2020 at 21:36, Kirill Bychik <kirill.bychik@gmail.com> wrote:

Patch is separated in two parts: core changes and pg_stat_statements
additions. Essentially the extension has its schema updated to allow
two more fields, docs updated to reflect the change. Patch is prepared
against master branch.

Please provide your comments and/or code findings.

I like the concept, I'm a big fan of anything that affordably improves
visibility into Pg's I/O and activity.

+1

To date I've been relying on tools like systemtap to do this sort of
thing. But that's a bit specialised, and Pg currently lacks useful
instrumentation for it so it can be a pain to match up activity by
parallel workers and that sort of thing. (I aim to find time to submit
a patch for that.)

(I'm interested in seeing your conference talk about that! I did a
bunch of stuff with static probes to measure PHJ behaviour around
barrier waits and so on but it was hard to figure out what stuff like
that to put in the actual tree, it was all a bit
use-once-to-test-a-theory-and-then-throw-away.)

Kirill, I noticed that you included a regression test that is failing. Can
this possibly be stable across machines or even on the same machine?
Does it still pass for you or did something change on the master
branch to add a new WAL record since you posted the patch?

Thank you for testing the patch and running extension checks. I assume
the patch applies without problems.

As for the regr test, it apparently requires some rework. I didn't pay
attention enough to make sure the data I check is actually meaningful
and isolated enough to be repeatable.

Please consider the extension part of the patch as WIP, I'll resubmit
the patch once I get a stable and meanngful test up. Thanks for
finding it!

Show quoted text
query | calls | rows | wal_write_bytes | wal_write_records
-------------------------------------------+-------+------+-----------------+-------------------
- CREATE INDEX test_b ON test(b)            |     1 |    0 | 1673 |
16
- DROP FUNCTION IF EXISTS PLUS_ONE(INTEGER) |     1 |    0 |   56 |
1
+ CREATE INDEX test_b ON test(b)            |     1 |    0 | 1755 |
17
+ DROP FUNCTION IF EXISTS PLUS_ONE(INTEGER) |     1 |    0 |    0 |
0
#5Kirill Bychik
kirill.bychik@gmail.com
In reply to: Kirill Bychik (#4)
Re: WAL usage calculation patch

вт, 18 февр. 2020 г. в 06:23, Thomas Munro <thomas.munro@gmail.com>:

On Mon, Feb 10, 2020 at 8:20 PM Craig Ringer <craig@2ndquadrant.com> wrote:

On Wed, 5 Feb 2020 at 21:36, Kirill Bychik <kirill.bychik@gmail.com> wrote:

Patch is separated in two parts: core changes and pg_stat_statements
additions. Essentially the extension has its schema updated to allow
two more fields, docs updated to reflect the change. Patch is prepared
against master branch.

Please provide your comments and/or code findings.

I like the concept, I'm a big fan of anything that affordably improves
visibility into Pg's I/O and activity.

+1

To date I've been relying on tools like systemtap to do this sort of
thing. But that's a bit specialised, and Pg currently lacks useful
instrumentation for it so it can be a pain to match up activity by
parallel workers and that sort of thing. (I aim to find time to submit
a patch for that.)

(I'm interested in seeing your conference talk about that! I did a
bunch of stuff with static probes to measure PHJ behaviour around
barrier waits and so on but it was hard to figure out what stuff like
that to put in the actual tree, it was all a bit
use-once-to-test-a-theory-and-then-throw-away.)

Kirill, I noticed that you included a regression test that is failing. Can
this possibly be stable across machines or even on the same machine?
Does it still pass for you or did something change on the master
branch to add a new WAL record since you posted the patch?

Thank you for testing the patch and running extension checks. I assume
the patch applies without problems.

As for the regr test, it apparently requires some rework. I didn't pay
attention enough to make sure the data I check is actually meaningful
and isolated enough to be repeatable.

Please consider the extension part of the patch as WIP, I'll resubmit
the patch once I get a stable and meanngful test up. Thanks for
finding it!

I have reworked the extension regression test to be more isolated.
Apparently, something merged into master branch shifted my numbers.

PFA the new patch. Core part didn't change a bit, the extension part
has regression test SQL and expected log changed.

Looking forward for new comments.

Attachments:

wal_stats.core.patchapplication/octet-stream; name=wal_stats.core.patchDownload+86-10
wal_stats.ext.patchapplication/octet-stream; name=wal_stats.ext.patchDownload+287-29
#6Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#5)
Re: WAL usage calculation patch

On Thu, Feb 20, 2020 at 06:56:27PM +0300, Kirill Bychik wrote:

вт, 18 февр. 2020 г. в 06:23, Thomas Munro <thomas.munro@gmail.com>:

On Mon, Feb 10, 2020 at 8:20 PM Craig Ringer <craig@2ndquadrant.com> wrote:

On Wed, 5 Feb 2020 at 21:36, Kirill Bychik <kirill.bychik@gmail.com> wrote:

Patch is separated in two parts: core changes and pg_stat_statements
additions. Essentially the extension has its schema updated to allow
two more fields, docs updated to reflect the change. Patch is prepared
against master branch.

Please provide your comments and/or code findings.

I like the concept, I'm a big fan of anything that affordably improves
visibility into Pg's I/O and activity.

+1

Huge +1 too.

Thank you for testing the patch and running extension checks. I assume
the patch applies without problems.

As for the regr test, it apparently requires some rework. I didn't pay
attention enough to make sure the data I check is actually meaningful
and isolated enough to be repeatable.

Please consider the extension part of the patch as WIP, I'll resubmit
the patch once I get a stable and meanngful test up. Thanks for
finding it!

I have reworked the extension regression test to be more isolated.
Apparently, something merged into master branch shifted my numbers.

PFA the new patch. Core part didn't change a bit, the extension part
has regression test SQL and expected log changed.

I'm quite worried about the stability of those counters for regression tests.
Wouldn't a checkpoint happening during the test change them?

While at it, did you consider adding a full-page image counter in the WalUsage?
That's something I'd really like to have and it doesn't seem hard to integrate.

Another point is that this patch won't help to see autovacuum activity.
As an example, I did a quick test to store the informations in pgstat, sending
the data in the PG_FINALLY part of vacuum():

rjuju=# create table t1(id integer, val text);
CREATE TABLE
rjuju=# insert into t1 select i, 'val ' || i from generate_series(1, 100000) i;
INSERT 0 100000
rjuju=# vacuum t1;
VACUUM
rjuju=# select datname, vac_wal_records, vac_wal_bytes, autovac_wal_records, autovac_wal_bytes
from pg_stat_database where datname = 'rjuju';
datname | vac_wal_records | vac_wal_bytes | autovac_wal_records | autovac_wal_bytes
---------+-----------------+---------------+---------------------+-------------------
rjuju | 547 | 65201 | 0 | 0
(1 row)

rjuju=# delete from t1 where id % 2 = 0;
DELETE 50000
rjuju=# select pg_sleep(60);
pg_sleep
----------

(1 row)

rjuju=# select datname, vac_wal_records, vac_wal_bytes, autovac_wal_records, autovac_wal_bytes
from pg_stat_database where datname = 'rjuju';
datname | vac_wal_records | vac_wal_bytes | autovac_wal_records | autovac_wal_bytes
---------+-----------------+---------------+---------------------+-------------------
rjuju | 547 | 65201 | 1631 | 323193
(1 row)

That's seems like useful data (especially since I recently had to dig into a
problematic WAL consumption issue that was due to some autovacuum activity),
but that may seem strange to only account for (auto)vacuum activity, rather
than globally, grouping per RmgrId or CommandTag for instance. We could then
see the complete WAL usage per-database. What do you think?

Some minor points I noticed:

- the extension patch doesn't apply anymore, I guess since 70a7732007bc4689

#define PARALLEL_KEY_JIT_INSTRUMENTATION UINT64CONST(0xE000000000000009)
+#define PARALLEL_KEY_WAL_USAGE UINT64CONST(0xE000000000000010)

Shouldn't it be 0xA rather than 0x10?

- it would be better to add a version number to the patches, so we're sure
which one we're talking about.

#7Michael Paquier
michael@paquier.xyz
In reply to: Julien Rouhaud (#6)
Re: WAL usage calculation patch

On Wed, Mar 04, 2020 at 05:02:25PM +0100, Julien Rouhaud wrote:

I'm quite worried about the stability of those counters for regression tests.
Wouldn't a checkpoint happening during the test change them?

Yep. One way to go through that would be to test if this output is
non-zero still I suspect at quick glance that this won't be entirely
reliable either.

While at it, did you consider adding a full-page image counter in the WalUsage?
That's something I'd really like to have and it doesn't seem hard to integrate.

FWIW, one reason here is that we had recently some benchmark work done
internally where this would have been helpful in studying some spiky
WAL load patterns.
--
Michael

#8Kirill Bychik
kirill.bychik@gmail.com
In reply to: Kirill Bychik (#1)
Fwd: WAL usage calculation patch

I'm quite worried about the stability of those counters for regression tests.
Wouldn't a checkpoint happening during the test change them?

Agree, stability of test could be an issue, even shifting of write
format or compression method or adding compatible changes could break
such test. Frankly speaking, the numbers expected are not actually
calculated, my logic was rather well described by "these numbers
should be non-zero for real tables". I believe the test can be
modified to check that numbers are above zero, both for bytes written
and for records stored.

Having a checkpoint in the moddle of the test can be almost 100%
countered by triggering one before the test. I'll add a checkpoint
call to the test scenario, if no objections here.

While at it, did you consider adding a full-page image counter in the WalUsage?
That's something I'd really like to have and it doesn't seem hard to integrate.

Well, not sure I understand you 100%, being new to Postgres dev. Do
you want a separate counter for pages written whenever doPageWrites is
true? I can do that, if needed. Please confirm.

Another point is that this patch won't help to see autovacuum activity.
As an example, I did a quick te.....
...LONG QUOTE...
but that may seem strange to only account for (auto)vacuum activity, rather
than globally, grouping per RmgrId or CommandTag for instance. We could then
see the complete WAL usage per-database. What do you think?

I wanted to keep the patch small and simple, and fit to practical
needs. This patch is supposed to provide tuning assistance, catching
an io heavy query in commit-bound situation.
Total WAL usage per DB can be assessed rather easily using other means.
Let's get this change into the codebase and then work on connecting
WAL usage to (auto)vacuum stats.

Some minor points I noticed:

- the extension patch doesn't apply anymore, I guess since 70a7732007bc4689

Will fix, thank you.

#define PARALLEL_KEY_JIT_INSTRUMENTATION UINT64CONST(0xE000000000000009)
+#define PARALLEL_KEY_WAL_USAGE UINT64CONST(0xE000000000000010)

Shouldn't it be 0xA rather than 0x10?

Oww, my bad, this is embaracing! Will fix, thank you.

- it would be better to add a version number to the patches, so we're sure
which one we're talking about.

Noted, thank you.

Please comment on the proposed changes, I will cook up a new version
once all are agreed upon.

#9Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#8)
Re: WAL usage calculation patch

On Thu, Mar 5, 2020 at 8:55 PM Kirill Bychik <kirill.bychik@gmail.com> wrote:

While at it, did you consider adding a full-page image counter in the WalUsage?
That's something I'd really like to have and it doesn't seem hard to integrate.

Well, not sure I understand you 100%, being new to Postgres dev. Do
you want a separate counter for pages written whenever doPageWrites is
true? I can do that, if needed. Please confirm.

Yes, I meant a separate 3rd counter for the number of full page images
written. However after a quick look I think that a FPI should be
detected with (doPageWrites && fpw_lsn != InvalidXLogRecPtr && fpw_lsn
<= RedoRecPtr).

Another point is that this patch won't help to see autovacuum activity.
As an example, I did a quick te.....
...LONG QUOTE...
but that may seem strange to only account for (auto)vacuum activity, rather
than globally, grouping per RmgrId or CommandTag for instance. We could then
see the complete WAL usage per-database. What do you think?

I wanted to keep the patch small and simple, and fit to practical
needs. This patch is supposed to provide tuning assistance, catching
an io heavy query in commit-bound situation.
Total WAL usage per DB can be assessed rather easily using other means.
Let's get this change into the codebase and then work on connecting
WAL usage to (auto)vacuum stats.

I agree that having a view of the full activity is a way bigger scope,
so it could be done later (and at this point in pg14), but I'm still
hoping that we can get insight of other backend WAL activity, such as
autovacuum, in pg13.

#10Kirill Bychik
kirill.bychik@gmail.com
In reply to: Julien Rouhaud (#9)
Re: WAL usage calculation patch

пт, 6 мар. 2020 г. в 20:14, Julien Rouhaud <rjuju123@gmail.com>:

On Thu, Mar 5, 2020 at 8:55 PM Kirill Bychik <kirill.bychik@gmail.com> wrote:

While at it, did you consider adding a full-page image counter in the WalUsage?
That's something I'd really like to have and it doesn't seem hard to integrate.

Well, not sure I understand you 100%, being new to Postgres dev. Do
you want a separate counter for pages written whenever doPageWrites is
true? I can do that, if needed. Please confirm.

Yes, I meant a separate 3rd counter for the number of full page images
written. However after a quick look I think that a FPI should be
detected with (doPageWrites && fpw_lsn != InvalidXLogRecPtr && fpw_lsn
<= RedoRecPtr).

This seems easy, will implement once I get some spare time.

Another point is that this patch won't help to see autovacuum activity.
As an example, I did a quick te.....
...LONG QUOTE...
but that may seem strange to only account for (auto)vacuum activity, rather
than globally, grouping per RmgrId or CommandTag for instance. We could then
see the complete WAL usage per-database. What do you think?

I wanted to keep the patch small and simple, and fit to practical
needs. This patch is supposed to provide tuning assistance, catching
an io heavy query in commit-bound situation.
Total WAL usage per DB can be assessed rather easily using other means.
Let's get this change into the codebase and then work on connecting
WAL usage to (auto)vacuum stats.

I agree that having a view of the full activity is a way bigger scope,
so it could be done later (and at this point in pg14), but I'm still
hoping that we can get insight of other backend WAL activity, such as
autovacuum, in pg13.

How do you think this information should be exposed? Via the pg_stat_statement?

Anyways, I believe this change could be bigger than FPI. I propose to
plan a separate patch for it, or even add it to the TODO after the
core patch of wal usage is merged.

Please expect a new patch version next week, with FPI counters added.

#11Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#10)
Re: WAL usage calculation patch

On Fri, Mar 6, 2020 at 6:59 PM Kirill Bychik <kirill.bychik@gmail.com> wrote:

пт, 6 мар. 2020 г. в 20:14, Julien Rouhaud <rjuju123@gmail.com>:

On Thu, Mar 5, 2020 at 8:55 PM Kirill Bychik <kirill.bychik@gmail.com> wrote:

I wanted to keep the patch small and simple, and fit to practical
needs. This patch is supposed to provide tuning assistance, catching
an io heavy query in commit-bound situation.
Total WAL usage per DB can be assessed rather easily using other means.
Let's get this change into the codebase and then work on connecting
WAL usage to (auto)vacuum stats.

I agree that having a view of the full activity is a way bigger scope,
so it could be done later (and at this point in pg14), but I'm still
hoping that we can get insight of other backend WAL activity, such as
autovacuum, in pg13.

How do you think this information should be exposed? Via the pg_stat_statement?

That's unlikely, since autovacuum won't trigger any hook. I was
thinking on some new view for pgstats, similarly to the example I
showed previously. The implementation is straightforward, although
pg_stat_database is maybe not the best choice here.

Anyways, I believe this change could be bigger than FPI. I propose to
plan a separate patch for it, or even add it to the TODO after the
core patch of wal usage is merged.

Just in case, if the problem is a lack of time, I'd be happy to help
on that if needed. Otherwise, I'll definitely not try to block any
progress for the feature as proposed.

Please expect a new patch version next week, with FPI counters added.

Thanks!

#12Kirill Bychik
kirill.bychik@gmail.com
In reply to: Julien Rouhaud (#11)
Re: WAL usage calculation patch

On Thu, Mar 5, 2020 at 8:55 PM Kirill Bychik <kirill.bychik@gmail.com> wrote:

I wanted to keep the patch small and simple, and fit to practical
needs. This patch is supposed to provide tuning assistance, catching
an io heavy query in commit-bound situation.
Total WAL usage per DB can be assessed rather easily using other means.
Let's get this change into the codebase and then work on connecting
WAL usage to (auto)vacuum stats.

I agree that having a view of the full activity is a way bigger scope,
so it could be done later (and at this point in pg14), but I'm still
hoping that we can get insight of other backend WAL activity, such as
autovacuum, in pg13.

How do you think this information should be exposed? Via the pg_stat_statement?

That's unlikely, since autovacuum won't trigger any hook. I was
thinking on some new view for pgstats, similarly to the example I
showed previously. The implementation is straightforward, although
pg_stat_database is maybe not the best choice here.

After extensive thinking and some code diving, I did not manage to
come up with a sane idea on how to expose data about autovacuum WAL
usage. Must be the flu.

Anyways, I believe this change could be bigger than FPI. I propose to
plan a separate patch for it, or even add it to the TODO after the
core patch of wal usage is merged.

Just in case, if the problem is a lack of time, I'd be happy to help
on that if needed. Otherwise, I'll definitely not try to block any
progress for the feature as proposed.

Please feel free to work on any extension of this patch idea. I lack
both time and knowledge to do it all by myself.

Please expect a new patch version next week, with FPI counters added.

Please find attached patch version 003, with FP writes and minor
corrections. Hope i use attachment versioning as expected in this
group :)

Test had been reworked, and I believe it should be stable now, the
part which checks WAL is written and there is a correlation between
affected rows and WAL records. I still have no idea how to test
full-page writes against regular updates, it seems very unstable.
Please share ideas if any.

Thanks!

Attachments:

003.wal_stats.core.patchtext/x-patch; charset=US-ASCII; name=003.wal_stats.core.patchDownload+95-10
003.wal_stats.ext.patchtext/x-patch; charset=US-ASCII; name=003.wal_stats.ext.patchDownload+319-24
#13Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#12)
Re: WAL usage calculation patch

On Sun, Mar 15, 2020 at 09:52:18PM +0300, Kirill Bychik wrote:

On Thu, Mar 5, 2020 at 8:55 PM Kirill Bychik <kirill.bychik@gmail.com> wrote:

After extensive thinking and some code diving, I did not manage to
come up with a sane idea on how to expose data about autovacuum WAL
usage. Must be the flu.

Anyways, I believe this change could be bigger than FPI. I propose to
plan a separate patch for it, or even add it to the TODO after the
core patch of wal usage is merged.

Just in case, if the problem is a lack of time, I'd be happy to help
on that if needed. Otherwise, I'll definitely not try to block any
progress for the feature as proposed.

Please feel free to work on any extension of this patch idea. I lack
both time and knowledge to do it all by myself.

I'm adding a 3rd patch on top of yours to expose the new WAL counters in
pg_stat_database, for vacuum and autovacuum. I'm not really enthiusiastic with
this approach but I didn't find better, and maybe this will raise some better
ideas. The only sure thing is that we're not going to add a bunch of new
fields in pg_stat_all_tables anyway.

We can also drop this 3rd patch entirely if no one's happy about it without
impacting the first two.

Please expect a new patch version next week, with FPI counters added.

Please find attached patch version 003, with FP writes and minor
corrections. Hope i use attachment versioning as expected in this
group :)

Thanks!

Test had been reworked, and I believe it should be stable now, the
part which checks WAL is written and there is a correlation between
affected rows and WAL records. I still have no idea how to test
full-page writes against regular updates, it seems very unstable.
Please share ideas if any.

I just reviewed the patches, and it globally looks good to me. The way to
detect full page images looks sensible, but I'm really not familiar with that
code so additional review would be useful.

I noticed that the new wal_write_fp_records field in pg_stat_statements wasn't
used in the test. Since I have to add all the patches to make the cfbot happy,
I slightly adapted the tests to reference the fp column too. There was also a
minor issue in the documentation, as wal_records and wal_bytes were copy/pasted
twice while wal_write_fp_records wasn't documented, so I also changed it.

Let me know if you're ok with those changes.

Attachments:

v4-0001-Track-WAL-usage.patchtext/plain; charset=us-asciiDownload+95-11
v4-0002-Keep-track-of-WAL-usage-in-pg_stat_statements.patchtext/plain; charset=us-asciiDownload+324-25
v4-0003-Keep-track-of-auto-vacuum-WAL-usage-in-pg_stat_da.patchtext/plain; charset=us-asciiDownload+225-2
#14Kirill Bychik
kirill.bychik@gmail.com
In reply to: Julien Rouhaud (#13)
Re: WAL usage calculation patch

Please feel free to work on any extension of this patch idea. I lack
both time and knowledge to do it all by myself.

I'm adding a 3rd patch on top of yours to expose the new WAL counters in
pg_stat_database, for vacuum and autovacuum. I'm not really enthiusiastic with
this approach but I didn't find better, and maybe this will raise some better
ideas. The only sure thing is that we're not going to add a bunch of new
fields in pg_stat_all_tables anyway.

We can also drop this 3rd patch entirely if no one's happy about it without
impacting the first two.

No objections about 3rd on my side, unless we miss the CF completely.

As for the code, I believe:
+ walusage.wal_records = pgWalUsage.wal_records -
+ walusage_start.wal_records;
+ walusage.wal_fp_records = pgWalUsage.wal_fp_records -
+ walusage_start.wal_fp_records;
+ walusage.wal_bytes = pgWalUsage.wal_bytes - walusage_start.wal_bytes;

Could be done much simpler via the utility:
WalUsageAccumDiff(walusage, pgWalUsage, walusage_start);

On a side note, I agree API to the buf/wal usage is far from perfect.

Test had been reworked, and I believe it should be stable now, the
part which checks WAL is written and there is a correlation between
affected rows and WAL records. I still have no idea how to test
full-page writes against regular updates, it seems very unstable.
Please share ideas if any.

I just reviewed the patches, and it globally looks good to me. The way to
detect full page images looks sensible, but I'm really not familiar with that
code so additional review would be useful.

I noticed that the new wal_write_fp_records field in pg_stat_statements wasn't
used in the test. Since I have to add all the patches to make the cfbot happy,
I slightly adapted the tests to reference the fp column too. There was also a
minor issue in the documentation, as wal_records and wal_bytes were copy/pasted
twice while wal_write_fp_records wasn't documented, so I also changed it.

Let me know if you're ok with those changes.

Sorry for not getting wal_fp_usage into the docs, my fault.

As for the tests, please get somebody else to review this. I strongly
believe checking full page writes here could be a source of
instability.

#15Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#14)
Re: WAL usage calculation patch

On Tue, Mar 17, 2020 at 10:27:05PM +0300, Kirill Bychik wrote:

Please feel free to work on any extension of this patch idea. I lack
both time and knowledge to do it all by myself.

I'm adding a 3rd patch on top of yours to expose the new WAL counters in
pg_stat_database, for vacuum and autovacuum. I'm not really enthiusiastic with
this approach but I didn't find better, and maybe this will raise some better
ideas. The only sure thing is that we're not going to add a bunch of new
fields in pg_stat_all_tables anyway.

We can also drop this 3rd patch entirely if no one's happy about it without
impacting the first two.

No objections about 3rd on my side, unless we miss the CF completely.

As for the code, I believe:
+ walusage.wal_records = pgWalUsage.wal_records -
+ walusage_start.wal_records;
+ walusage.wal_fp_records = pgWalUsage.wal_fp_records -
+ walusage_start.wal_fp_records;
+ walusage.wal_bytes = pgWalUsage.wal_bytes - walusage_start.wal_bytes;

Could be done much simpler via the utility:
WalUsageAccumDiff(walusage, pgWalUsage, walusage_start);

Indeed, but this function is private to instrument.c. AFAICT
pg_stat_statements is already duplicating similar code for buffers rather than
having BufferUsageAccumDiff being exported, so I chose the same approach.

I'd be in favor of exporting both functions though.

On a side note, I agree API to the buf/wal usage is far from perfect.

Yes clearly.

Test had been reworked, and I believe it should be stable now, the
part which checks WAL is written and there is a correlation between
affected rows and WAL records. I still have no idea how to test
full-page writes against regular updates, it seems very unstable.
Please share ideas if any.

I just reviewed the patches, and it globally looks good to me. The way to
detect full page images looks sensible, but I'm really not familiar with that
code so additional review would be useful.

I noticed that the new wal_write_fp_records field in pg_stat_statements wasn't
used in the test. Since I have to add all the patches to make the cfbot happy,
I slightly adapted the tests to reference the fp column too. There was also a
minor issue in the documentation, as wal_records and wal_bytes were copy/pasted
twice while wal_write_fp_records wasn't documented, so I also changed it.

Let me know if you're ok with those changes.

Sorry for not getting wal_fp_usage into the docs, my fault.

As for the tests, please get somebody else to review this. I strongly
believe checking full page writes here could be a source of
instability.

I'm also a little bit dubious about it. The initial checkpoint should make
things stable (of course unless full_page_writes is disabled), and Cfbot also
seems happy about it. At least keeping it for the temporary tables test
shouldn't be a problem.

#16Kirill Bychik
kirill.bychik@gmail.com
In reply to: Julien Rouhaud (#15)
Re: WAL usage calculation patch

Please feel free to work on any extension of this patch idea. I lack
both time and knowledge to do it all by myself.

I'm adding a 3rd patch on top of yours to expose the new WAL counters in
pg_stat_database, for vacuum and autovacuum. I'm not really enthiusiastic with
this approach but I didn't find better, and maybe this will raise some better
ideas. The only sure thing is that we're not going to add a bunch of new
fields in pg_stat_all_tables anyway.

We can also drop this 3rd patch entirely if no one's happy about it without
impacting the first two.

No objections about 3rd on my side, unless we miss the CF completely.

As for the code, I believe:
+ walusage.wal_records = pgWalUsage.wal_records -
+ walusage_start.wal_records;
+ walusage.wal_fp_records = pgWalUsage.wal_fp_records -
+ walusage_start.wal_fp_records;
+ walusage.wal_bytes = pgWalUsage.wal_bytes - walusage_start.wal_bytes;

Could be done much simpler via the utility:
WalUsageAccumDiff(walusage, pgWalUsage, walusage_start);

Indeed, but this function is private to instrument.c. AFAICT
pg_stat_statements is already duplicating similar code for buffers rather than
having BufferUsageAccumDiff being exported, so I chose the same approach.

I'd be in favor of exporting both functions though.

On a side note, I agree API to the buf/wal usage is far from perfect.

Yes clearly.

There is a higher-level Instrumentation API that can be used with
INSTRUMENT_WAL flag to collect the wal usage information. I believe
the instrumentation is widely used in the executor code, so it should
not be a problem to colelct instrumentation information on autovacuum
worker level.

Just a recommendation/chat, though. I am happy with the way the data
is collected now. If you commit this variant, please add a TODO to
rework wal usage to common instr API.

Test had been reworked, and I believe it should be stable now, the
part which checks WAL is written and there is a correlation between
affected rows and WAL records. I still have no idea how to test
full-page writes against regular updates, it seems very unstable.
Please share ideas if any.

I just reviewed the patches, and it globally looks good to me. The way to
detect full page images looks sensible, but I'm really not familiar with that
code so additional review would be useful.

I noticed that the new wal_write_fp_records field in pg_stat_statements wasn't
used in the test. Since I have to add all the patches to make the cfbot happy,
I slightly adapted the tests to reference the fp column too. There was also a
minor issue in the documentation, as wal_records and wal_bytes were copy/pasted
twice while wal_write_fp_records wasn't documented, so I also changed it.

Let me know if you're ok with those changes.

Sorry for not getting wal_fp_usage into the docs, my fault.

As for the tests, please get somebody else to review this. I strongly
believe checking full page writes here could be a source of
instability.

I'm also a little bit dubious about it. The initial checkpoint should make
things stable (of course unless full_page_writes is disabled), and Cfbot also
seems happy about it. At least keeping it for the temporary tables test
shouldn't be a problem.

Temp tables should show zero FPI WAL records, true :)

I have no objections to the patch.

#17Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#16)
Re: WAL usage calculation patch

On Wed, Mar 18, 2020 at 09:02:58AM +0300, Kirill Bychik wrote:

There is a higher-level Instrumentation API that can be used with
INSTRUMENT_WAL flag to collect the wal usage information. I believe
the instrumentation is widely used in the executor code, so it should
not be a problem to colelct instrumentation information on autovacuum
worker level.

Just a recommendation/chat, though. I am happy with the way the data
is collected now. If you commit this variant, please add a TODO to
rework wal usage to common instr API.

The instrumentation is somewhat intended to be used with executor nodes, not
backend commands. I don't see real technical reason that would prevent that,
but I prefer to keep things as-is for now, as it sound less controversial.
This is for the 3rd patch, which may not even be considered for this CF anyway.

As for the tests, please get somebody else to review this. I strongly
believe checking full page writes here could be a source of
instability.

I'm also a little bit dubious about it. The initial checkpoint should make
things stable (of course unless full_page_writes is disabled), and Cfbot also
seems happy about it. At least keeping it for the temporary tables test
shouldn't be a problem.

Temp tables should show zero FPI WAL records, true :)

I have no objections to the patch.

I'm attaching a v5 with fp records only for temp tables, so there's no risk of
instability. As I previously said I'm fine with your two patches, so unless
you have objections on the fpi test for temp tables or the documentation
changes, I believe those should be ready for committer.

Attachments:

v5-0001-Track-WAL-usage.patchtext/plain; charset=us-asciiDownload+95-11
v5-0002-Keep-track-of-WAL-usage-in-pg_stat_statements.patchtext/plain; charset=us-asciiDownload+322-25
v5-0003-Keep-track-of-auto-vacuum-WAL-usage-in-pg_stat_da.patchtext/plain; charset=us-asciiDownload+225-2
#18Kirill Bychik
kirill.bychik@gmail.com
In reply to: Julien Rouhaud (#17)
Re: WAL usage calculation patch

There is a higher-level Instrumentation API that can be used with
INSTRUMENT_WAL flag to collect the wal usage information. I believe
the instrumentation is widely used in the executor code, so it should
not be a problem to colelct instrumentation information on autovacuum
worker level.

Just a recommendation/chat, though. I am happy with the way the data
is collected now. If you commit this variant, please add a TODO to
rework wal usage to common instr API.

The instrumentation is somewhat intended to be used with executor nodes, not
backend commands. I don't see real technical reason that would prevent that,
but I prefer to keep things as-is for now, as it sound less controversial.
This is for the 3rd patch, which may not even be considered for this CF anyway.

As for the tests, please get somebody else to review this. I strongly
believe checking full page writes here could be a source of
instability.

I'm also a little bit dubious about it. The initial checkpoint should make
things stable (of course unless full_page_writes is disabled), and Cfbot also
seems happy about it. At least keeping it for the temporary tables test
shouldn't be a problem.

Temp tables should show zero FPI WAL records, true :)

I have no objections to the patch.

I'm attaching a v5 with fp records only for temp tables, so there's no risk of
instability. As I previously said I'm fine with your two patches, so unless
you have objections on the fpi test for temp tables or the documentation
changes, I believe those should be ready for committer.

No objections on my side either. Thank you for your review, time and efforts!

#19Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#18)
Re: WAL usage calculation patch

On Wed, Mar 18, 2020 at 08:48:17PM +0300, Kirill Bychik wrote:

I'm attaching a v5 with fp records only for temp tables, so there's no risk of
instability. As I previously said I'm fine with your two patches, so unless
you have objections on the fpi test for temp tables or the documentation
changes, I believe those should be ready for committer.

No objections on my side either. Thank you for your review, time and efforts!

Great, thanks also for the patches and efforts! I'll mark the entry as RFC.

#20Fujii Masao
masao.fujii@gmail.com
In reply to: Julien Rouhaud (#17)
Re: WAL usage calculation patch

On 2020/03/19 2:19, Julien Rouhaud wrote:

On Wed, Mar 18, 2020 at 09:02:58AM +0300, Kirill Bychik wrote:

There is a higher-level Instrumentation API that can be used with
INSTRUMENT_WAL flag to collect the wal usage information. I believe
the instrumentation is widely used in the executor code, so it should
not be a problem to colelct instrumentation information on autovacuum
worker level.

Just a recommendation/chat, though. I am happy with the way the data
is collected now. If you commit this variant, please add a TODO to
rework wal usage to common instr API.

The instrumentation is somewhat intended to be used with executor nodes, not
backend commands. I don't see real technical reason that would prevent that,
but I prefer to keep things as-is for now, as it sound less controversial.
This is for the 3rd patch, which may not even be considered for this CF anyway.

As for the tests, please get somebody else to review this. I strongly
believe checking full page writes here could be a source of
instability.

I'm also a little bit dubious about it. The initial checkpoint should make
things stable (of course unless full_page_writes is disabled), and Cfbot also
seems happy about it. At least keeping it for the temporary tables test
shouldn't be a problem.

Temp tables should show zero FPI WAL records, true :)

I have no objections to the patch.

I'm attaching a v5 with fp records only for temp tables, so there's no risk of
instability. As I previously said I'm fine with your two patches, so unless
you have objections on the fpi test for temp tables or the documentation
changes, I believe those should be ready for committer.

You added the columns into pg_stat_database, but seem to forget to
update the document for pg_stat_database.

Is it really reasonable to add the columns for vacuum's WAL usage into
pg_stat_database? I'm not sure how much the information about
the amount of WAL generated by vacuum per database is useful.
Isn't it better to make VACUUM VERBOSE and autovacuum log include
that information, instead, to see how much each vacuum activity
generates the WAL? Sorry if this discussion has already been done
upthread.

Regards,

--
Fujii Masao
NTT DATA CORPORATION
Advanced Platform Technology Group
Research and Development Headquarters

#21Julien Rouhaud
rjuju123@gmail.com
In reply to: Fujii Masao (#20)
#22Kirill Bychik
kirill.bychik@gmail.com
In reply to: Julien Rouhaud (#21)
#23Fujii Masao
masao.fujii@gmail.com
In reply to: Kirill Bychik (#22)
#24Fujii Masao
masao.fujii@gmail.com
In reply to: Fujii Masao (#23)
#25Julien Rouhaud
rjuju123@gmail.com
In reply to: Fujii Masao (#24)
#26Kirill Bychik
kirill.bychik@gmail.com
In reply to: Julien Rouhaud (#25)
#27Julien Rouhaud
rjuju123@gmail.com
In reply to: Kirill Bychik (#26)
#28Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#27)
#29Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#28)
#30Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#29)
#31Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#30)
#32Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#29)
#33Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#31)
#34Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#33)
#35Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#32)
#36Julien Rouhaud
rjuju123@gmail.com
In reply to: Masahiko Sawada (#34)
#37Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#36)
#38Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#35)
#39Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#37)
#40Julien Rouhaud
rjuju123@gmail.com
In reply to: Fujii Masao (#24)
#41Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#38)
#42Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#39)
#43Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#42)
#44Julien Rouhaud
rjuju123@gmail.com
In reply to: Masahiko Sawada (#43)
#45Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#40)
#46Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#45)
#47Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#43)
#48Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#47)
#49Dilip Kumar
dilipbalaut@gmail.com
In reply to: Masahiko Sawada (#48)
#50Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#46)
#51Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#50)
#52Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#50)
#53Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#52)
#54Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#51)
#55Kuntal Ghosh
kuntalghosh.2007@gmail.com
In reply to: Julien Rouhaud (#46)
#56Julien Rouhaud
rjuju123@gmail.com
In reply to: Dilip Kumar (#52)
#57Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#54)
#58Dilip Kumar
dilipbalaut@gmail.com
In reply to: Dilip Kumar (#49)
#59Julien Rouhaud
rjuju123@gmail.com
In reply to: Kuntal Ghosh (#55)
#60Kuntal Ghosh
kuntalghosh.2007@gmail.com
In reply to: Julien Rouhaud (#59)
#61Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#58)
#62Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#61)
#63Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#61)
#64Dilip Kumar
dilipbalaut@gmail.com
In reply to: Masahiko Sawada (#63)
#65Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#64)
#66Dilip Kumar
dilipbalaut@gmail.com
In reply to: Dilip Kumar (#64)
#67Julien Rouhaud
rjuju123@gmail.com
In reply to: Kuntal Ghosh (#60)
#68Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#67)
#69Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#68)
#70Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#65)
#71Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#69)
#72Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#68)
#73Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#66)
In reply to: Amit Kapila (#73)
#75Dilip Kumar
dilipbalaut@gmail.com
In reply to: Peter Geoghegan (#74)
#76Dilip Kumar
dilipbalaut@gmail.com
In reply to: Dilip Kumar (#75)
#77Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#72)
#78Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#77)
#79Dilip Kumar
dilipbalaut@gmail.com
In reply to: Julien Rouhaud (#72)
#80Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#77)
#81Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#80)
#82Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#81)
#83Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#82)
#84Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#83)
#85Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#83)
#86Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#83)
#87Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#84)
#88Kyotaro Horiguchi
horikyota.ntt@gmail.com
In reply to: Amit Kapila (#87)
#89Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#87)
#90Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#89)
#91Amit Kapila
amit.kapila16@gmail.com
In reply to: Kyotaro Horiguchi (#88)
#92Dilip Kumar
dilipbalaut@gmail.com
In reply to: Dilip Kumar (#86)
#93Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#92)
#94Dilip Kumar
dilipbalaut@gmail.com
In reply to: Amit Kapila (#93)
#95Dilip Kumar
dilipbalaut@gmail.com
In reply to: Dilip Kumar (#94)
#96Amit Kapila
amit.kapila16@gmail.com
In reply to: Dilip Kumar (#95)
#97Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#96)
#98Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#97)
#99Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#98)
#100Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#99)
#101Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#100)
#102Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#101)
#103Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#102)
#104Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#103)
#105Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#48)
#106Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#105)
#107Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#106)
#108Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#104)
#109Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#108)
#110Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#107)
#111Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#109)
#112Euler Taveira
euler.taveira@2ndquadrant.com
In reply to: Amit Kapila (#104)
#113Julien Rouhaud
rjuju123@gmail.com
In reply to: Euler Taveira (#112)
#114Euler Taveira
euler.taveira@2ndquadrant.com
In reply to: Julien Rouhaud (#113)
#115Peter Eisentraut
peter_e@gmx.net
In reply to: Amit Kapila (#97)
#116Justin Pryzby
pryzby@telsasoft.com
In reply to: Peter Eisentraut (#115)
In reply to: Amit Kapila (#110)
#118Amit Kapila
amit.kapila16@gmail.com
In reply to: Justin Pryzby (#116)
#119Amit Kapila
amit.kapila16@gmail.com
In reply to: Euler Taveira (#114)
#120Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Peter Geoghegan (#117)
#121Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#120)
#122Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#119)
#123Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#121)
#124Peter Eisentraut
peter_e@gmx.net
In reply to: Amit Kapila (#118)
#125Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Masahiko Sawada (#123)
#126Julien Rouhaud
rjuju123@gmail.com
In reply to: Peter Eisentraut (#124)
#127Justin Pryzby
pryzby@telsasoft.com
In reply to: Peter Eisentraut (#124)
#128Amit Kapila
amit.kapila16@gmail.com
In reply to: Peter Eisentraut (#124)
#129Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#125)
#130Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#129)
#131Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#130)
#132Julien Rouhaud
rjuju123@gmail.com
In reply to: Masahiko Sawada (#130)
#133Masahiko Sawada
sawada.mshk@gmail.com
In reply to: Amit Kapila (#131)
#134Amit Kapila
amit.kapila16@gmail.com
In reply to: Masahiko Sawada (#133)
#135Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#122)
#136Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#135)
#137Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#136)
#138Justin Pryzby
pryzby@telsasoft.com
In reply to: Julien Rouhaud (#30)
#139Julien Rouhaud
rjuju123@gmail.com
In reply to: Justin Pryzby (#138)
#140Amit Kapila
amit.kapila16@gmail.com
In reply to: Justin Pryzby (#138)
#141Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#137)
#142Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#141)
#143Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#142)
#144Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#143)
#145Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#128)
#146Peter Eisentraut
peter_e@gmx.net
In reply to: Amit Kapila (#145)
#147Amit Kapila
amit.kapila16@gmail.com
In reply to: Peter Eisentraut (#146)
#148Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#147)
#149Justin Pryzby
pryzby@telsasoft.com
In reply to: Julien Rouhaud (#148)
#150Julien Rouhaud
rjuju123@gmail.com
In reply to: Justin Pryzby (#149)
#151Kyotaro Horiguchi
horikyota.ntt@gmail.com
In reply to: Julien Rouhaud (#150)
#152Amit Kapila
amit.kapila16@gmail.com
In reply to: Kyotaro Horiguchi (#151)
#153Justin Pryzby
pryzby@telsasoft.com
In reply to: Amit Kapila (#152)
#154Amit Kapila
amit.kapila16@gmail.com
In reply to: Justin Pryzby (#153)
#155Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#152)
#156Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#154)
#157Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#155)
#158Kyotaro Horiguchi
horikyota.ntt@gmail.com
In reply to: Julien Rouhaud (#157)
#159Peter Eisentraut
peter_e@gmx.net
In reply to: Julien Rouhaud (#156)
#160Amit Kapila
amit.kapila16@gmail.com
In reply to: Peter Eisentraut (#159)
#161Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#160)
#162Michael Paquier
michael@paquier.xyz
In reply to: Amit Kapila (#161)
#163Julien Rouhaud
rjuju123@gmail.com
In reply to: Michael Paquier (#162)
#164Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#163)
#165Amit Kapila
amit.kapila16@gmail.com
In reply to: Amit Kapila (#164)
#166Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#165)
#167Julien Rouhaud
rjuju123@gmail.com
In reply to: Julien Rouhaud (#166)
#168Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#167)
#169Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#167)
#170Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#169)
#171Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#170)
#172Julien Rouhaud
rjuju123@gmail.com
In reply to: Amit Kapila (#171)
#173Amit Kapila
amit.kapila16@gmail.com
In reply to: Julien Rouhaud (#172)