Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1UQ7tt-0004lD-KC for pgsql-docs@arkaria.postgresql.org; Thu, 11 Apr 2013 03:10:13 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.72) (envelope-from ) id 1UQ7tt-00027y-0N for pgsql-docs@arkaria.postgresql.org; Thu, 11 Apr 2013 03:10:13 +0000 Received: from makus.postgresql.org ([2001:4800:7903:4::125]) by malur.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1UQ7ts-00027B-55; Thu, 11 Apr 2013 03:10:12 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by makus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1UQ7tl-0006oL-Pm; Thu, 11 Apr 2013 03:10:11 +0000 Received: from sss2.sss.pgh.pa.us (tgl@localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.5/8.14.5) with ESMTP id r3B3A5jr018281; Wed, 10 Apr 2013 23:10:05 -0400 (EDT) From: Tom Lane To: Gurjeet Singh cc: PostgreSQL Docs , PGSQL Hackers Subject: Re: synchronize_seqscans' description is a bit misleading In-reply-to: References: Comments: In-reply-to Gurjeet Singh message dated "Wed, 10 Apr 2013 21:57:06 -0400" Date: Wed, 10 Apr 2013 23:10:05 -0400 Message-ID: <18280.1365649805@sss.pgh.pa.us> X-Pg-Spam-Score: -4.3 (----) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-docs Precedence: bulk Sender: pgsql-docs-owner@postgresql.org Gurjeet Singh 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 -- Sent via pgsql-docs mailing list (pgsql-docs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-docs