Обсуждение: [MASSMAIL]Postgresql - Pgbouncer Connection and Query Performance Problem
pool_mode
parameter in pgbouncer was set to session
, I changed it to transaction
, and the connection issue was resolved. However, I am now experiencing significant slowdowns in my queries. I attribute this to two parameters in my PostgreSQL clusters and three parameters in pgbouncer. Firstly, on my server, I have 15 PostgreSQL clusters, and the values of these two parameters in the postgresql.conf
file of each cluster seem very high;max_connection = 4096
max_prepared_transaction = 4096
These two parameters are set to 4096 in all 15 clusters.
Do these values seem too high, and could they be causing my queries to run slowly?
On the other hand, the values I find high in pgbouncer are;
max_db_connections = 8192
default_pool_size = 4096
max_client_conn = 2048
Could these high values be causing excessive load on pgbouncer?
I have actively 15,000 customers on my server, and there is an average data flow of 5 million daily (including updates). What should be the value of these parameters? Especially, what should I pay attention to when setting pgbouncer parameters?
I changed the specified three parameters in pgbouncer to the following values;
max_db_connections = 500
default_pool_size = 300
max_client_conn = 500
Currently, it seems like my query performance has improved, but what should I do to permanently solve this? What other parameters should I pay attention to besides these?On Tue, 2024-04-02 at 15:39 +0300, Abdullah Ergin wrote: > We are using prepared transactions in PostgreSQL. We use pgbouncer as our pooling software. > [...] I am now experiencing significant slowdowns in my queries. > I attribute this to two parameters in my PostgreSQL clusters and three parameters in pgbouncer. > Firstly, on my server, I have 15 PostgreSQL clusters, and the values of these two > parameters in the postgresql.conf file of each cluster seem very high; > > max_connection = 4096 > max_prepared_transaction = 4096 Yes, they are very high, but they are just limits. As long as you don't actually establish hundreds of connections, that is not a problem. > On the other hand, the values I find high in pgbouncer are; > max_db_connections = 8192 > default_pool_size = 4096 > max_client_conn = 2048 > Could these high values be causing excessive load on pgbouncer? > I have actively 15,000 customers on my server, and there is an average data flow > of 5 million daily (including updates). What should be the value of these parameters? > I changed the specified three parameters in pgbouncer to the following values; > max_db_connections = 500 > default_pool_size = 300 > max_client_conn = 500 > > Currently, it seems like my query performance has improved, but what should I do to > permanently solve this? What other parameters should I pay attention to besides these? "max_client_conn" is not the problem. The problem is the excessively high pool size of 300. The size should be so that when all those connections are busy running statements, your database should not be overloaded. Yours, Laurenz Albe
Thank you for the information. What would you recommend as the value for this parameter? Would 100 be too large of a number? Or maybe 50?
Additionally, before lowering these parameters, I had a lot of "LWLocks" in my database. Normally, I know that these lightweight locks don't cause significant issues, but during the slowdown, I was consistently seeing 70-80 LWLocks. After lowering the parameters and restarting pooling, these locks disappeared. Is there any correlation?
Best regards.
On Tue, 2024-04-02 at 15:39 +0300, Abdullah Ergin wrote:
> We are using prepared transactions in PostgreSQL. We use pgbouncer as our pooling software.
> [...] I am now experiencing significant slowdowns in my queries.
> I attribute this to two parameters in my PostgreSQL clusters and three parameters in pgbouncer.
> Firstly, on my server, I have 15 PostgreSQL clusters, and the values of these two
> parameters in the postgresql.conf file of each cluster seem very high;
>
> max_connection = 4096
> max_prepared_transaction = 4096
Yes, they are very high, but they are just limits. As long as you don't actually
establish hundreds of connections, that is not a problem.
> On the other hand, the values I find high in pgbouncer are;
> max_db_connections = 8192
> default_pool_size = 4096
> max_client_conn = 2048
> Could these high values be causing excessive load on pgbouncer?
> I have actively 15,000 customers on my server, and there is an average data flow
> of 5 million daily (including updates). What should be the value of these parameters?
> I changed the specified three parameters in pgbouncer to the following values;
> max_db_connections = 500
> default_pool_size = 300
> max_client_conn = 500
>
> Currently, it seems like my query performance has improved, but what should I do to
> permanently solve this? What other parameters should I pay attention to besides these?
"max_client_conn" is not the problem. The problem is the excessively high pool
size of 300. The size should be so that when all those connections are busy running
statements, your database should not be overloaded.
Yours,
Laurenz Albe
On Tue, 2024-04-02 at 17:04 +0300, Abdullah Ergin wrote: > [large connection pool size] > Thank you for the information. What would you recommend as the value > for this parameter? Would 100 be too large of a number? Or maybe 50? That depends entirely on your hardware and the database workload. Perhaps reading this article can help you: https://www.cybertec-postgresql.com/en/estimating-connection-pool-size-with-postgresql-database-statistics/ > Additionally, before lowering these parameters, I had a lot of "LWLocks" > in my database. Normally, I know that these lightweight locks don't cause > significant issues, but during the slowdown, I was consistently seeing > 70-80 LWLocks. After lowering the parameters and restarting pooling, > these locks disappeared. Is there any correlation? Very likely yes. If you see many LWLocks, that will cause a significant performance issue. Essentially, it is contention inside the database. Yours, Laurenz Albe
On Tue, 2024-04-02 at 17:04 +0300, Abdullah Ergin wrote:
> [large connection pool size]
> Thank you for the information. What would you recommend as the value
> for this parameter? Would 100 be too large of a number? Or maybe 50?
That depends entirely on your hardware and the database workload.
Perhaps reading this article can help you:
https://www.cybertec-postgresql.com/en/estimating-connection-pool-size-with-postgresql-database-statistics/
> Additionally, before lowering these parameters, I had a lot of "LWLocks"
> in my database. Normally, I know that these lightweight locks don't cause
> significant issues, but during the slowdown, I was consistently seeing
> 70-80 LWLocks. After lowering the parameters and restarting pooling,
> these locks disappeared. Is there any correlation?
Very likely yes.
If you see many LWLocks, that will cause a significant performance issue.
Essentially, it is contention inside the database.
Yours,
Laurenz Albe
Thank you for the information you provided about LWLocks. When I look at the type of these locks I see "BufferIO" and "BufferMapping" it really slows down the system. However, I have not yet fully understood what action I should take in this situation, especially why this situation is happening? and what should i do?
Best Regards.
Hello Samed,
Thank you for the information you provided about LWLocks. When I look at the type of these locks I see "BufferIO" and "BufferMapping" it really slows down the system. However, I have not yet fully understood what action I should take in this situation, especially why this situation is happening? and what should i do?
Best Regards.