RE: Postgresql JDBC process consumes more memory than psql client

2022-09-05 Thread James Pang (chaolpan)
We make 2 comparisions between partitioned(256 HASH) and no-partitioned(same 
data volume,same table attributes) , do same  "UPDATE,DELETE " .
 1. with partitioned tables , the "RES" from top command memory increased 
quickly to 160MB and keep stable there. 
  From auto_explain trace, we did saw  partition pruning to specific 
partition when execution the prepared sql statement by Postgresql JDBC .
2. with no-partitioned tables, the "RES" from top command memory only keep 24MB 
stable there. 
   Same auto_explain , and only table and index scan there by prepared sql 
statement by Postgresql JDBC. 
3. with psql client , run the UPDATE/DELETE sql locally,  partition pruning 
works and the "RES" memory" is much less, it's about 9MB . 

Yesterday, when workload test, a lot of Postgresql JDBC connections use 
150-160MB memory , so we got ERROR: out of memory
  Detail: Failed on request of size 240 in memory context "MessageContext".  
And other non-postgresql process like top command even failed into no-memory 
error. 

So, looks like something with Postgresql JDBC driver lead to the high memory 
consumption when table is partitioned , even when table is no partitioned , 
compared with psql client, it consumes more memory.   Any suggestions to tune 
that ?  PG V13 , OS RHEL8 , Virtua machine on VMWARE. We make 
shared_buffers=36% physical memory ,  effective_cache_size=70%physical memory , 
total physical memory is about 128GB.

Thanks,

James


-Original Message-
From: James Pang (chaolpan)  
Sent: Monday, September 5, 2022 8:52 PM
To: Justin Pryzby 
Cc: pgsql-performance@lists.postgresql.org
Subject: RE: Postgresql JDBC process consumes more memory than psql client

PG V13, yes JDBC use prepared statements ,  from psql use pruned ,but even all 
partitions it NOT consumes too much memory.  Any idea how to print SQL plan 
from JDBC driver ? 

-Original Message-
From: Justin Pryzby  
Sent: Monday, September 5, 2022 8:47 PM
To: James Pang (chaolpan) 
Cc: pgsql-performance@lists.postgresql.org
Subject: Re: Postgresql JDBC process consumes more memory than psql client

On Mon, Sep 05, 2022 at 12:40:46PM +, James Pang (chaolpan) wrote:
>   We run same update or delete SQL statement " DELETE FROM ... WHERE ... "  
> the table is a hash partition table (256 hash partitions). When run the sql 
> from Postgresql JDBC driver, it soon increased to 150MB memory (RES filed 
> from top command),   but when run the same SQL from psql , it only 
> consumes about 10MB memory.  UPDATE statements is similar , need 100MB 
> memory, even it delete or update 0 rows.  Any specific control about 
> Postgresql JDBC driver ?

It sounds like JDBC is using prepared statements, and partitions maybe weren't 
pruned by the server.  What is the query plan from psql vs from jdbc ?

https://wiki.postgresql.org/wiki/Slow_Query_Questions

What version is the postgres server ?
That affects pruning as well as memory use.

https://www.postgresql.org/docs/14/release-14.html
Improve the performance of updates and deletes on partitioned tables with many 
partitions (Amit Langote, Tom Lane)

This change greatly reduces the planner's overhead for such cases, and also 
allows updates/deletes on partitioned tables to use execution-time partition 
pruning.

Actually, this is about the same response as when you asked in June, except 
that was about UPDATE.
https://www.postgresql.org/message-id/ph0pr11mb519134d4171a126776e3e063d6...@ph0pr11mb5191.namprd11.prod.outlook.com

--
Justin






Re: Postgresql JDBC process consumes more memory than psql client

2022-09-05 Thread Justin Pryzby
On Mon, Sep 05, 2022 at 12:52:14PM +, James Pang (chaolpan) wrote:
> Any idea how to print SQL plan from JDBC driver ? 

You could use "explain execute" on the client, or autoexplain on the
server-side.

-- 
Justin




RE: Postgresql JDBC process consumes more memory than psql client

2022-09-05 Thread James Pang (chaolpan)
PG V13, yes JDBC use prepared statements ,  from psql use pruned ,but even all 
partitions it NOT consumes too much memory.  Any idea how to print SQL plan 
from JDBC driver ? 

-Original Message-
From: Justin Pryzby  
Sent: Monday, September 5, 2022 8:47 PM
To: James Pang (chaolpan) 
Cc: pgsql-performance@lists.postgresql.org
Subject: Re: Postgresql JDBC process consumes more memory than psql client

On Mon, Sep 05, 2022 at 12:40:46PM +, James Pang (chaolpan) wrote:
>   We run same update or delete SQL statement " DELETE FROM ... WHERE ... "  
> the table is a hash partition table (256 hash partitions). When run the sql 
> from Postgresql JDBC driver, it soon increased to 150MB memory (RES filed 
> from top command),   but when run the same SQL from psql , it only 
> consumes about 10MB memory.  UPDATE statements is similar , need 100MB 
> memory, even it delete or update 0 rows.  Any specific control about 
> Postgresql JDBC driver ?

It sounds like JDBC is using prepared statements, and partitions maybe weren't 
pruned by the server.  What is the query plan from psql vs from jdbc ?

https://wiki.postgresql.org/wiki/Slow_Query_Questions

What version is the postgres server ?
That affects pruning as well as memory use.

https://www.postgresql.org/docs/14/release-14.html
Improve the performance of updates and deletes on partitioned tables with many 
partitions (Amit Langote, Tom Lane)

This change greatly reduces the planner's overhead for such cases, and also 
allows updates/deletes on partitioned tables to use execution-time partition 
pruning.

Actually, this is about the same response as when you asked in June, except 
that was about UPDATE.
https://www.postgresql.org/message-id/ph0pr11mb519134d4171a126776e3e063d6...@ph0pr11mb5191.namprd11.prod.outlook.com

--
Justin




Re: Postgresql JDBC process consumes more memory than psql client

2022-09-05 Thread Justin Pryzby
On Mon, Sep 05, 2022 at 12:40:46PM +, James Pang (chaolpan) wrote:
>   We run same update or delete SQL statement " DELETE FROM ... WHERE ... "  
> the table is a hash partition table (256 hash partitions). When run the sql 
> from Postgresql JDBC driver, it soon increased to 150MB memory (RES filed 
> from top command),   but when run the same SQL from psql , it only 
> consumes about 10MB memory.  UPDATE statements is similar , need 100MB 
> memory, even it delete or update 0 rows.  Any specific control about 
> Postgresql JDBC driver ?

It sounds like JDBC is using prepared statements, and partitions maybe
weren't pruned by the server.  What is the query plan from psql vs from
jdbc ?

https://wiki.postgresql.org/wiki/Slow_Query_Questions

What version is the postgres server ?
That affects pruning as well as memory use.

https://www.postgresql.org/docs/14/release-14.html
Improve the performance of updates and deletes on partitioned tables
with many partitions (Amit Langote, Tom Lane)

This change greatly reduces the planner's overhead for such cases, and
also allows updates/deletes on partitioned tables to use execution-time
partition pruning.

Actually, this is about the same response as when you asked in June,
except that was about UPDATE.
https://www.postgresql.org/message-id/ph0pr11mb519134d4171a126776e3e063d6...@ph0pr11mb5191.namprd11.prod.outlook.com

-- 
Justin




Postgresql JDBC process consumes more memory than psql client

2022-09-05 Thread James Pang (chaolpan)
  We run same update or delete SQL statement " DELETE FROM ... WHERE ... "  the 
table is a hash partition table (256 hash partitions). When run the sql from 
Postgresql JDBC driver, it soon increased to 150MB memory (RES filed from top 
command),   but when run the same SQL from psql , it only consumes about 
10MB memory.  UPDATE statements is similar , need 100MB memory, even it delete 
or update 0 rows.  Any specific control about Postgresql JDBC driver ?

Thanks,

James