From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Gurjeet Singh <gurjeet(at)singh(dot)im> |
Cc: | PostgreSQL Docs <pgsql-docs(at)postgresql(dot)org>, PGSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: synchronize_seqscans' description is a bit misleading |
Date: | 2013-04-11 03:10:05 |
Message-ID: | 18280.1365649805@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-docs pgsql-hackers |
Gurjeet Singh <gurjeet(at)singh(dot)im> writes:
> If I'm reading the code right [1], this GUC does not actually *synchronize*
> the scans, but instead just makes sure that a new scan starts from a block
> that was reported by some other backend performing a scan on the same
> relation.
Well, that's the only *direct* effect, but ...
> Since the backends scanning the relation may be processing the relation at
> different speeds, even though each one took the hint when starting the
> scan, they may end up being out of sync with each other.
The point you're missing is that the synchronization is self-enforcing:
whichever backend gets ahead of the others will be the one forced to
request (and wait for) the next physical I/O. This will naturally slow
down the lower-CPU-cost-per-page scans. The other ones tend to catch up
during the I/O operation.
The feature is not terribly useful unless I/O costs are high compared to
the CPU cost-per-page. But when that is true, it's actually rather
robust. Backends don't have to have exactly the same per-page
processing cost, because pages stay in shared buffers for a while after
the current scan leader reads them.
> Imagining that all scans on a table are always synchronized, may make some
> wrongly believe that adding more backends scanning the same table will not
> incur any extra I/O; that is, only one stream of blocks will be read from
> disk no matter how many backends you add to the mix. I noticed this when I
> was creating partition tables, and each of those was a CREATE TABLE AS
> SELECT FROM original_table (to avoid WAL generation), and running more than
> 3 such transactions caused the disk read throughput to behave unpredictably,
> sometimes even dipping below 1 MB/s for a few seconds at a stretch.
It's not really the scans that's causing that to be unpredictable, it's
the write I/O from the output side, which is forcing highly
nonsequential behavior (or at least I suspect so ... how many disk units
were involved in this test?)
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Gurjeet Singh | 2013-04-11 03:39:38 | Re: synchronize_seqscans' description is a bit misleading |
Previous Message | Gurjeet Singh | 2013-04-11 01:57:06 | synchronize_seqscans' description is a bit misleading |
From | Date | Subject | |
---|---|---|---|
Next Message | Jeff Davis | 2013-04-11 03:27:16 | Re: Enabling Checksums |
Previous Message | Gurjeet Singh | 2013-04-11 01:57:06 | synchronize_seqscans' description is a bit misleading |