Subject: The performance issues caused by upgrading PostgreSQL to version 16.3.

From: 馬 騰飛 <[email-masked]>
Date: Mon, 17 Feb 2025 07:55:01 +0000

Dear PostgreSQL Community,

I hope this message finds you well. I am reaching out to seek your technical assistance regarding a performance issue we encountered after upgrading our PostgreSQL version from 12.19 to 16.3.
We have noticed a significant performance problem with a specific SQL query on one of our application screens. 
Interestingly, when we isolate the problematic SQL statement and replace its parameters with actual values, it executes in just a few seconds in pgAdmin. 
However, when we run the same SQL query through our application using Npgsql, it takes over ten minutes to complete.
We are using NpgsqlCommand.ExecuteReader to execute the SQL query, and the parameters are set using NpgsqlCommand.Parameters.Add. 
The main table involved in this query contains approximately 800,000 records.
We believe that the SQL statement itself does not have performance issues, but there may be problems related to how the SQL is executed in the application or how the parameters are set. 
However, we are unable to pinpoint the exact cause of the performance degradation.
Could you please provide us with some possible reasons or suggestions for improvement? Your insights would be greatly appreciated.
Thank you for your assistance, and I look forward to your response.

Best regards,
Ma

---

From: Ron Johnson <[email-masked]>
Date: Mon, 17 Feb 2025 09:17:32 -0500

On Mon, Feb 17, 2025 at 2:55 AM 馬 騰飛 <[email-masked]> wrote:

> I hope this message finds you well. I am reaching out to seek your
> technical assistance regarding a performance issue we encountered after
> upgrading our PostgreSQL version from 12.19 to 16.3.
> Interestingly, when we isolate the problematic SQL statement and replace
> its parameters with actual values, it executes in just a few seconds in
> pgAdmin.
> However, when we run the same SQL query through our application using
> Npgsql, it takes over ten minutes to complete.

We are using NpgsqlCommand.ExecuteReader to execute the SQL query, and the
> parameters are set using NpgsqlCommand.Parameters.Add.
> We believe that the SQL statement itself does not have performance issues,
> but there may be problems related to how the SQL is executed in the
> application or how the parameters are set.

Your situation sounds like something we encountered a few years ago in
PG12.  The solution was to add:
set plan_cache_mode = force_custom_plan

This is only for when the first five or six executions of a prepared
statement run fast, and performance drops after that.
Test the query using PREPARE (
https://www.postgresql.org/docs/16/sql-prepare.html) and ten different
parameter sets, with and without "set plan_cache_mode = force_custom_plan".

-- 
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!

---

From: Greg Sabino Mullane <[email-masked]>
Date: Mon, 17 Feb 2025 09:22:50 -0500

> Npgsql, it takes over ten minutes to complete.

Another reason could be a poor type casting by your driver/middleware. Can
you share the query that is problematic? (also, since you mentioned a
version upgrade, also make sure you run ANALYZE; post-upgrade.)

Cheers,
Greg

--
Crunchy Data - https://www.crunchydata.com
Enterprise Postgres Software Products & Tech Support

---

From: Doron Tsur <[email-masked]>
Date: Mon, 17 Feb 2025 18:04:57 +0200

post installing, did you run analyze verbose?

-Doron

-- 
---
Sent with Gmail for Sidekick Browser <https://join.meetsidekick.com/_qi4a5>

---

From: Adrian Klaver <[email-masked]>
Date: Mon, 17 Feb 2025 08:10:17 -0800

> Could you please provide us with some possible reasons or suggestions for improvement? Your insights would be greatly appreciated.

This is going to need more information:

1) Was the upgrade done on the same machine or across machines?
If across machines how are they different?

2) The table definition.

3) The query text.

4) The Npgsql code.

-- 
Adrian Klaver
[email-masked]