Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h2SOg-0006H1-2o for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Mar 2019 03:11:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1h2SOe-0005Ht-5O for pgsql-hackers@arkaria.postgresql.org; Sat, 09 Mar 2019 03:11:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h2SOd-0005Hm-H7 for pgsql-hackers@lists.postgresql.org; Sat, 09 Mar 2019 03:11:35 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1h2SOa-0004kA-4b for pgsql-hackers@lists.postgresql.org; Sat, 09 Mar 2019 03:11:34 +0000 Received: from sss1.sss.pgh.pa.us (localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.4/8.14.4) with ESMTP id x293BQtS028721; Fri, 8 Mar 2019 22:11:26 -0500 From: Tom Lane To: Andrew Dunstan cc: David Rowley , Jeff Janes , Jeremy Schneider , Joe Conway , Peter Geoghegan , PostgreSQL Hackers Subject: Re: Should we increase the default vacuum_cost_limit? In-reply-to: <26656.1552096451@sss.pgh.pa.us> References: <241b80ab-7af0-c606-7b2c-b0a5d6be696a@joeconway.com> <4a068b09-5a6f-e975-07c9-2333fcef0a8a@amazon.com> <30411a5b-ef11-71ef-e9ee-4d26ef3fd0c0@2ndQuadrant.com> <21034.1552068630@sss.pgh.pa.us> <13d143dd-0a44-0c16-218c-bc924b5922f0@2ndQuadrant.com> <26656.1552096451@sss.pgh.pa.us> Comments: In-reply-to Tom Lane message dated "Fri, 08 Mar 2019 20:54:11 -0500" MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <28719.1552101086.1@sss.pgh.pa.us> Date: Fri, 08 Mar 2019 22:11:26 -0500 Message-ID: <28720.1552101086@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk I wrote: > [ worries about overflow with VacuumCostLimit approaching INT_MAX ] Actually, now that I think a bit harder, that disquisition was silly. In fact, I'm inclined to argue that the already-committed patch is taking the wrong approach, and we should revert it in favor of a different idea. The reason is this: what we want to do is throttle VACUUM's I/O demand, and by "throttle" I mean "gradually reduce". There is nothing gradual about issuing a few million I/Os and then sleeping for many milliseconds; that'll just produce spikes and valleys in the I/O demand. Ideally, what we'd have it do is sleep for a very short interval after each I/O. But that's not too practical, both for code-structure reasons and because most platforms don't give us a way to so finely control the length of a sleep. Hence the design of sleeping for awhile after every so many I/Os. However, the current settings are predicated on the assumption that you can't get the kernel to give you a sleep of less than circa 10ms. That assumption is way outdated, I believe; poking around on systems I have here, the minimum delay time using pg_usleep(1) seems to be generally less than 100us, and frequently less than 10us, on anything released in the last decade. I propose therefore that instead of increasing vacuum_cost_limit, what we ought to be doing is reducing vacuum_cost_delay by a similar factor. And, to provide some daylight for people to reduce it even more, we ought to arrange for it to be specifiable in microseconds not milliseconds. There's no GUC_UNIT_US right now, but it's time. (Perhaps we should also look into using other delay APIs, such as nanosleep(2), where available.) I don't have any particular objection to kicking up the maximum value of vacuum_cost_limit by 10X or so, if anyone's hot to do that. But that's not where we ought to be focusing our concern. And there really is a good reason, not just nannyism, not to make that setting huge --- it's just the wrong thing to do, as compared to reducing vacuum_cost_delay. regards, tom lane