Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Right query to get the current number of connections in a PostgreSQL DB

People also ask

How do I see active connections in PostgreSQL?

SELECT * FROM pg_stat_activity WHERE datname = 'dbname' and state = 'active'; Since pg_stat_activity contains connection statistics of all databases having any state, either idle or active , database name and connection state should be included in the query to get the desired output.

How many connections can I have Postgres?

PostgreSQL Connection Limits 15 connections are reserved for the superuser to maintain the state and integrity of your database, and 100 connections are available for you and your applications. If the number of connections to the database exceeds the 100-connection limit, new connections fail and return an error.

What is Numbackends in Postgres?

max_connections is the upper limit for the number of database connections to all databases in the PostgreSQL cluster. numbackends is the number of backends connected to a certain database. The only connection between these numbers is that the former must be greater or equal than the latter.

What is the default max connections in Postgres?

The default is typically 100 connections, but might be less if your kernel settings will not support it (as determined during initdb).


Those two requires aren't equivalent. The equivalent version of the first one would be:

SELECT sum(numbackends) FROM pg_stat_database;

In that case, I would expect that version to be slightly faster than the second one, simply because it has fewer rows to count. But you are not likely going to be able to measure a difference.

Both queries are based on exactly the same data, so they will be equally accurate.


The following query is very helpful

select  * from
(select count(*) used from pg_stat_activity) q1,
(select setting::int res_for_super from pg_settings where name=$$superuser_reserved_connections$$) q2,
(select setting::int max_conn from pg_settings where name=$$max_connections$$) q3;

They definitely may give different results. The better one is

select count(*) from pg_stat_activity;

It's because it includes connections to WAL sender processes which are treated as regular connections and count towards max_connections.

See max_wal_senders


Aggregation of all postgres sessions per their status (how many are idle, how many doing something...)

select state, count(*) from pg_stat_activity  where pid <> pg_backend_pid() group by 1 order by 1;