0

I get multiple connections to my Database, the query says "Rollback" and the connections increase instantaneously. and the duration of those connections are extremely high as compared to the other queries.

Multiple Connections

This is how quickly the connections get caught up. enter image description here

Tech Stack: NextJS, Prisma ORM

Hosted on Digital Ocean App Platform

I also have tens of users using a Desktop application written in Electron but that also doesn't connect to db directly. it only send API requests to server

1
  • And what is the problem? If there is a bug in your code, you could fix it or share it to get help Commented Feb 18 at 4:04

2 Answers 2

0

Those are mostly idle connections from previous requests, waiting for new requests. Having ROLLBACK as the last statement means that the transaction ended with a rollback, which is perfectly normal.

This indicates that your application uses a connection pooler. When no active connection is available to handle new requests, a new connection is created. After committing or rolling back a transaction, these connections remain idle, ready to be reused by other requests later on. This approach avoids the overhead of reconnecting and conserves resources.

So, there's nothing to worry about.

If you want to see all idle connections in PostgreSQL, you can use the following query:

SELECT pid, usename, application_name, state, query_start, query 
FROM pg_stat_activity 
WHERE state = 'idle';

This will display all connections currently in an idle state, along with details about the user, application, and the last query executed.

Sign up to request clarification or add additional context in comments.

Comments

0

You likely have some type of connection pooler running. A pooler will keep, say 20 active connections open and open more if you need them. Depending on the pooler configuration, it can simply run "rollback" when the connection ends, or some other initialization commands when a new connection starts. Typically your app will connect to this pooler, and the pooler will keep long running connections in the database. Without knowing what type of pooler you're running, it's hard to provide more information. Some examples are pgbouncer, pgpool-ii, odyssey and more. Additionally, a app server might have such capabilities built in, such as Java or node.

You'll have to look through your infrastructure to see what pooler you might be using. If you're certain that you're not using a pooler, you'll need to fix your code to end the connection when appropriate.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.