Re: LWLock SerializableFinishedList

From: Justin <zzzzz(dot)graf(at)gmail(dot)com>
To: Alec Cozens <acozens(at)pixelpower(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: LWLock SerializableFinishedList
Date: 2025-09-05 18:00:09
Message-ID: CALL-XeMUhHnqZx083rWx14xX2XjqBeq7h94TOfXBtoaSGzhxWg@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Fri, Sep 5, 2025 at 1:02 PM Alec Cozens <acozens(at)pixelpower(dot)com> wrote:

> Hi
>
>
>
> I’m having trouble with PostgreSQL 16.8 on Windows where for maybe days it
> all works perfectly until the number of active connections start
> increasing, until over say 10 minutes all 97 connections are active but
> seemingly waiting on LWLock on SerializableFinishedList. They will remain
> in this locked state for some arbitrary period, up to 1 hour 40 minutes,
> after which the connections will all clear apparently simultaneously and
> the application continues.
>
>
>
> The connections are opened, a few command executed and then closed and
> returned to the connection pool.
>
>
>
> The application runs on the same server as the postgresql service.
>
>
>
> Changing statement_timeout to 1 minute doesn’t seem to cancel these
> “active” connections.
>
>
>
> Most of the application runs in READ COMMITTED isolation level, but the
> particular stored procedure that seems to cause the issue runs in
> SERIALIZED. We end up with “active” but hanging connections running this
> stored procedure or the associated commands generated by npgqql associated
> with opening, closing and returning connections to the pool.
>
>
>
> I can’t find any information about SerializeableFinishedList or why all
> the standard timeout parameters seem to have no effect on the cancellation
> of these hung connections. The npgsql client configuration talks about
> clearing idle connections, but these are not idle, they are active but hung.
>
>
>
> Any thoughts on the matter, or what might cause a lock on
> SerializableFinishedList would be much appreciated.
>
>
>
> Regards,
>
> Alec
>
>
I am betting all the waiting sessions are waiting on a COMMIT from another
session. This means all the other sessions are dependent on row(s)
locked/updated by the first session. The other sessions have to wait to
know if they have a SERIALIZATION conflict.

The reason statement_timeout is not working is because all the queries
executed and completed.

Without reviewing the code and logic based on the description of events I
am betting all the sessions got to the COMMIT stage and are waiting on
another Session.

Would be nice to know what pg_locks showed. Do you have lock_timeout set?
Sharing the code of the function and what the other sessions are doing,
this way we can attempt to duplicate this behavior .

Keep in mind Serializing transactions have quirky behavior like this ,
the transaction has to validate that no other update or insert is going to
cause a problem with the result.

Thanks
Justin

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message PALAYRET Jacques 2025-09-08 09:37:13 Re: PostgreSQL include directive in plpgsql language PL/pgSQL
Previous Message Alec Cozens 2025-09-05 17:02:27 LWLock SerializableFinishedList