Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vzWhk-0015Mk-1F for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 09:15:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vzWhh-00FCDq-2E for pgsql-hackers@arkaria.postgresql.org; Mon, 09 Mar 2026 09:15:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vzWhh-00FCDh-15 for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 09:15:09 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vzWhf-00000001lwV-0E7w for pgsql-hackers@lists.postgresql.org; Mon, 09 Mar 2026 09:15:09 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4853fd7b59aso1292735e9.2 for ; Mon, 09 Mar 2026 02:15:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773047706; x=1773652506; darn=lists.postgresql.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=S+h9SnN9BwMzF6kChg57pSXVAdMEM4tge2EAbcZeZwE=; b=ah65D41h82Onk2zofvh3SKh313NTdRWOWe5AvAFmGqH32DVBBJRHzWe4SKNcK52/fo ipdo5MwGWpeLUKP1QUBhVVDDfFW5h3coBQy4CgmMPV++HkypP8X0zVpFo/26cCkY1L8Y cdO43e2EOynGEgL4tm0dgxDRChqXzbKBxWqBJ8Pgf8JpyT7p0DqzNrGubXrh+naNIC0q OvE3tYGtD5O3UwMJ75ZQ6IwbEb4GIEK294Lr2Jm0ax53vY5h0/OB8g6sF2KwaWsWlruf dQ880xR2Vkz5LMAIymOye0kK7rwsaKhIE0uGXrD3EUsqk0UFXz9ODUvugPbqiMIfJzeo O/7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773047706; x=1773652506; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=S+h9SnN9BwMzF6kChg57pSXVAdMEM4tge2EAbcZeZwE=; b=b9/eJFsHfYTSO4o5ZShgGKssDGlBmhDbJMm0+EM8aF43TufNs4iLXykKNyp72KdmiS Ca9NCUKu8bSTN4K8OHsZsaxoGaf0TLGgjrg0C7qV4Su6N5G0kPqp8nU5pwou5bLDVjcq /17T1ei8puT1Nra1w2SzVpO9FHSdqAdqRP9nS87LeXWsPzuznQvz3eybZIm4rtcaGDX7 cwsNVdd+ULT4JcznLiZfEFLrSABntgH7x+Su0zNv8rt3d73j2SU81Xkl3gqlUYq3/Bfb JFM3rPzCHADZQKyzDg9vN6gMmdfXW19hvjJGi4DCR9ZpUf9GjSS1Tc8sTO9ntSj8dUeG 3WTQ== X-Gm-Message-State: AOJu0YyMbVHJF2YTyR56ywvBe6A7OaQnWJmiDeqaSCwRjElF6i3z+LSb r+4vcZTSTDP1fy+EX6rJxXg6L68g/Zs9oXayBd6RaJxkTJuLkfhZ6+teMYXw7g== X-Gm-Gg: ATEYQzwgjn5I8oIU1zbCVtkmL7OGYqT/+9CXoGx46mu/mIW/XKQ+WQS1DyLHVmanNYq Lg13Gqpz5L97lutZtlgdsjtJxtUXYi0iWaWU9H4/90I6Lud8xeYBYh0HKi1lVFIKweUZ82e7M+c i1KUlHM8TDM9ntsmHoHFP8Gos1MmVG7FTHm+w/uNk/loWI8+oulcTdHH8X0l07I1vtEheLakEj7 FeeLlBuQUWvXFwRfbP4SPveQOagJnX2vwqyhRjxdqvn7YY1L4KtHTVi21fp0KOntaeuM1hVm6qM oZtLo5mHtj6v935R1DVVLyIx+z6qbssIfSzV8FHa9ml/jUMa/sN58YxYLomQEE4ymAWgG4wz3Iw 8mca12jGGzEmpd95MruO1ikrZSlec4BG1jKr2OuoSdbCEXYVZ81yal9BqNABcZb9UENFNo6Maab WdhQKRwlnijTh7yy64ZbnXreGjIamIVxHQ0Gg8aspH7LfqfGnpe9vi8FAx7A7mX4WU6jU1oYNbO IlHqQphmSB7GRKRXQNS5MUU0FFiEwVdeA/kjnV/xS6+05ObMlJr56P9Gw== X-Received: by 2002:a05:600c:1911:b0:485:3949:e5c6 with SMTP id 5b1f17b1804b1-4853949e773mr63012615e9.3.1773047705256; Mon, 09 Mar 2026 02:15:05 -0700 (PDT) Received: from ip-10-97-1-34.eu-west-3.compute.internal (ec2-15-237-197-144.eu-west-3.compute.amazonaws.com. [15.237.197.144]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4851fa87e56sm322182925e9.0.2026.03.09.02.15.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 02:15:04 -0700 (PDT) Date: Mon, 9 Mar 2026 09:15:03 +0000 From: Bertrand Drouvot To: Lukas Fittl Cc: PostgreSQL Hackers Subject: Re: pg_buffercache: Add per-relation summary stats Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi, On Sat, Feb 28, 2026 at 03:58:34PM -0800, Lukas Fittl wrote: > Hi, > > See attached a patch that implements a new function, > pg_buffercache_relation_stats(), which returns per-relfilenode > statistics on the number of buffers, how many are dirtied/pinned, and > their avg usage count. > > This can be used in monitoring scripts to know which relations are > kept in shared buffers, to understand performance issues better that > occur due to relations getting evicted from the cache. In our own > monitoring tool (pganalyze) we've offered a functionality like this > based on the existing pg_buffercache() function for a bit over a year > now [0], and people have found this very valuable - but it doesn't > work for larger database servers. > > Specifically, performing a query that gets this information can be > prohibitively expensive when using large shared_buffers, and even on > the default 128MB shared buffers there is a measurable difference: Thanks for the patch! A few comments: === 1 +typedef struct +{ + RelFileNumber relfilenumber; + Oid reltablespace; + Oid reldatabase; + ForkNumber forknum; +} BufferRelStatsKey; What about making use of RelFileLocator (instead of 3 members relfilenumber, reltablespace and reldatabase)? === 2 + + The pg_buffercache_relation_stats() function returns a + set of rows summarizing the state of all shared buffers, aggregated by + relation and fork number. Similar and more detailed information is + provided by the pg_buffercache view, but + pg_buffercache_relation_stats() is significantly + cheaper. + I'm not 100% sure about the name of the function since the stats are "reset" after a rewrite. What about pg_buffercache_relfilenode or pg_buffercache_aggregated? Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com