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.
This is how quickly the connections get caught up.
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
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.
This is how quickly the connections get caught up.
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
Share Improve this question asked Feb 18 at 3:49 Osama EhsanOsama Ehsan 332 silver badges4 bronze badges 1- And what is the problem? If there is a bug in your code, you could fix it or share it to get help – Frank Heikens Commented Feb 18 at 4:04
2 Answers
Reset to default 0Those 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.
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.