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.92) (envelope-from ) id 1jELS6-0002Ck-Pj for pgsql-general@arkaria.postgresql.org; Tue, 17 Mar 2020 23:16:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1jELS5-0005Do-Ij for pgsql-general@arkaria.postgresql.org; Tue, 17 Mar 2020 23:16:49 +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 1jELS5-00058i-4U for pgsql-general@lists.postgresql.org; Tue, 17 Mar 2020 23:16:49 +0000 Received: from [64.147.123.21] (helo=wout5-smtp.messagingengine.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jELS0-0007gp-Sx for pgsql-general@lists.postgresql.org; Tue, 17 Mar 2020 23:16:47 +0000 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 62B68859; Tue, 17 Mar 2020 19:16:33 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Tue, 17 Mar 2020 19:16:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aklaver.com; h= subject:to:cc:references:from:message-id:date:mime-version :in-reply-to:content-type:content-transfer-encoding; s=fm2; bh=U ZF3+V9ne5jEhIWvu+gvCa4zyTHGki4uJrQ7WoDhmOE=; b=Ebjd534Ar0rreiMLK GfWG0dcyF9A8OSbkbl8bHNVdcpdwLtt+Yo3r9sizHmnpUi44FcYGtndOroNudkkL BCJbYNQq9m0YHr9Z+HD6kfN1rxJka5I1o5VJysMDQcPPyq3RhFcBgaabRNCkBy2l b/eoroAz3liXUqK1hL7N7unyxYAPjvMzb/HADNIkobdlILMItQ7fNN83e6ZcCNJE AuZ/8uH5UpI8JHgm4Oo9nQ0CjlrDPRSP4pN8NaJZF/nYRra1uKpRGrxtYfr6iKP9 VIFzMXdFKApox5juZ1cO3UamdpGeDdDkV/V264C4lNlD73uBw+BhZFavnzjnrmG1 ZRFVQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm2; bh=UZF3+V9ne5jEhIWvu+gvCa4zyTHGki4uJrQ7WoDhm OE=; b=Q6hv/HWzLjcx4c6eStM9AbVA36BaZZCWdX4DXnYOzOI1N4VVmLDkO17K0 SMW6Fc6BVDUvpREg4tLWssrS+kCELUR8kyZ6jj0bSXqsX/XgYAD0tZ+7u9sWRA2w KftpYg/MAo/NE0bZZEQOLxdzxCU9tIUgbjx1wbGgpA7O5mIsmvhLgI9BKsWoAQs3 tsimpfjwh4mOlmWFC9dQ1ALqyklOv4PnWfJsgNAuTw3fjNdPGhM/xO7HPWbMB+cE GWmz+OHGD6UQPaSbMmus8P7kxtdiTviNWUdLImDVGgKuDxjRA2GV6R3RYe3R2pqk hSw08zESGJkFQEd55vzfWmM6x082Q== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrudefiedgtdehucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepuffvfhfhkffffgggjggtgfesthejredttdefjeenucfhrhhomheptegurhhi rghnucfmlhgrvhgvrhcuoegrughrihgrnhdrkhhlrghvvghrsegrkhhlrghvvghrrdgtoh hmqeenucffohhmrghinhepphhoshhtghhrvghsqhhlrdhorhhgnecukfhppeejuddrvddu vddruddvledrudelfeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrih hlfhhrohhmpegrughrihgrnhdrkhhlrghvvghrsegrkhhlrghvvghrrdgtohhm X-ME-Proxy: Received: from [192.168.1.10] (unknown [71.212.129.193]) by mail.messagingengine.com (Postfix) with ESMTPA id 5A1073280064; Tue, 17 Mar 2020 19:16:32 -0400 (EDT) Subject: Re: Fwd: PG12 autovac issues To: Justin King Cc: pgsql-general@lists.postgresql.org References: From: Adrian Klaver Message-ID: <1887ede9-c40f-88a7-1823-07a5da7dc600@aklaver.com> Date: Tue, 17 Mar 2020 16:16:31 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 64.147.123.21 (deferred) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On 3/17/20 3:48 PM, Justin King wrote: > On Tue, Mar 17, 2020 at 5:39 PM Adrian Klaver wrote: >> >> On 3/17/20 3:22 PM, Justin King wrote: >>> Apologies, I accidentally sent this to the pgsql-admin list initially >>> but intended it go here: >>> >>> We have a database that isn't overly large (~20G), but gets incredibly >>> frequent updates. Here's an example table: >>> >>> feedi=# select * from pg_stat_all_tables where schemaname = >>> 'production' and relname = 'tita'; >>> relid = 16786 >>> schemaname = production >>> relname = tita >>> seq_scan = 23365 >>> seq_tup_read = 403862091 >>> idx_scan = 26612759248 >>> idx_tup_fetch = 19415752701 >>> n_tup_ins = 24608806 >>> n_tup_upd = 4207076934 >>> n_tup_del = 24566916 >>> n_tup_hot_upd = 4073821079 >>> n_live_tup = 79942 >>> n_dead_tup = 71969 >>> n_mod_since_analyze = 12020 >>> last_vacuum = 2020-03-17 15:35:19.588859+00 >>> last_autovacuum = 2020-03-17 21:31:08.248598+00 >>> last_analyze = 2020-03-17 15:35:20.372875+00 >>> last_autoanalyze = 2020-03-17 22:04:41.76743+00 >>> vacuum_count = 9 >>> autovacuum_count = 135693 >>> analyze_count = 9 >>> autoanalyze_count = 495877 >>> >>> As you can see in this table, there are only ~80K rows, but billions >>> of updates. What we have observed is that the frozenxid reaches the >>> 200M mark fairly quickly because of the amount of activity. What is >>> interesting is that this happens with the 'postgres' and 'template1' >>> databases as well and there is absolutely no activity in those >>> databases. >>> >>> When the 'postgres' and/or 'template1' databases hit the >>> freeze_max_age, there are cases where it kicks off an aggressive >>> autovac of those tables which seems to prevent autovacs from running >>> elsewhere. Oddly, this is not consistent, but that condition seems to >>> be required. We have observed this across multiple PG12 servers (dev, >>> test, staging, production) all with similar workloads. >> >> Is there anything in postgres and template1 besides what was created at >> init? > > There is nothing in there at all besides system tables created at init. > >> >> What are your settings for autovacuum?: >> >> https://www.postgresql.org/docs/12/runtime-config-autovacuum.html > > Here are the settings, these are the only ones that are not set to > default with the exception of a few tables that have been overridden > with a different value due to lots of updates and few rows: And those values are? More below. > > autovacuum = on > log_autovacuum_min_duration = 0 > autovacuum_max_workers = 8 > autovacuum_naptime = 15s > autovacuum_vacuum_threshold = 500 > autovacuum_analyze_threshold = 2500 > vacuum_cost_limit = 1000 Are either of the below set > 0?: vacuum_cost_delay autovacuum_vacuum_cost_delay > > We want fairly aggressive autovacs to keep table bloat limited -- the > application latency suffers if it has to wade through dead tuples and > staying near realtime is important in our environment. > > ** Also, it should be noted that the autovacuum_analyze_threshold is > probably an incorrect value, we likely intended that to be 250 and > just have now realized it after poking more at the configuration. > >> -- Adrian Klaver adrian.klaver@aklaver.com