pg.ddx.io  pgsql-bugs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: mrdrivingduck@gmail.com
Subject: BUG #19021: Memory leak of SMgrRelation object during standby redo
Date: Sun, 17 Aug 2025 16:41:23 +0000
Message-ID: <19021-8748e174cf6859bc@postgresql.org> (raw)

The following bug has been logged on the website:

Bug reference:      19021
Logged by:          Jingtang Zhang
Email address:      mrdrivingduck@gmail.com
PostgreSQL version: 17.6
Operating system:   Linux
Description:        

Hi~ hackers

Back to v17, commit 21d9c3ee gave SMgrRelation a well-defined lifetime, and
smgrclose nolonger removes SMgrRelation object from the hashtable, leaving
the work to smgrdestroyall. But I find a place that relies on the removing
behavior previously, but is still calling smgrclose.

Startup process of standby will redo table dropping with DropRelationFiles,
using smgrdounlinkall to drop buffers and unlink physical files, and then
uses smgrclose to destroy the SMgrRelation object. I think it should use
smgrdestroy here, or the object memory will be leaked.

With concurrent clients, the following pgbench script will produce the
memory leak of a standby startup process easily. Entries will be entered
into the hashtable but never removed.

pgbench -f bench.sql -n -c 32 -j 32 -T 600

```sql
DROP TABLE IF EXISTS tbl:client_id;
CREATE TABLE tbl:client_id (id int);
```

The attached patch export smgrdestroy as a public function, and use it in
DropRelationFiles:

(Sorry I have sent an e-mail to pgsql-development, with a patch)
https://www.postgresql.org/message-id/flat/28C687D4-F335-417E-B06C-6612A0BD5A10%40gmail.com

I think it affects v17, v18 and master.



Message-ID: <19021-8748e174cf6859bc@postgresql.org>
Permalink:  ../19021-8748e174cf6859bc@postgresql.org/
Also on:    postgresql.org/message-id/19021-8748e174cf6859bc@postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-bugs@postgresql.org
  Cc: noreply@postgresql.org, pgsql-bugs@lists.postgresql.org, mrdrivingduck@gmail.com
  Subject: Re: BUG #19021: Memory leak of SMgrRelation object during standby redo
  In-Reply-To: <19021-8748e174cf6859bc@postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox