Что из следующих двух более точно?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
sql
database
postgresql
dbconnection
Мурали В.П.
источник
источник
Ответы:
Эти два требования не эквивалентны. Эквивалентная версия первой:
SELECT sum(numbackends) FROM pg_stat_database;
В этом случае я ожидал бы, что эта версия будет немного быстрее, чем вторая, просто потому, что в ней меньше строк для подсчета. Но вы вряд ли сможете измерить разницу.
Оба запроса основаны на одних и тех же данных, поэтому они будут одинаково точными.
источник
Следующий запрос очень полезен
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;
источник
Они определенно могут дать разные результаты. Лучше
select count(*) from pg_stat_activity;
Это потому, что он включает соединения с процессами отправителя WAL, которые рассматриваются как обычные соединения и учитываются
max_connections
.См. Max_wal_senders
источник
Агрегация всех сеансов postgres по их статусу (сколько простаивает, сколько что-то делает ...)
select state, count(*) from pg_stat_activity where pid <> pg_backend_pid() group by 1 order by 1;
источник
Количество TCP-соединений вам поможет. Помните, что это не для конкретной базы данных
источник
Глядя на исходный код, кажется, что запрос pg_stat_database дает вам количество подключений к текущей базе данных для всех пользователей. С другой стороны, запрос pg_stat_activity дает количество подключений к текущей базе данных только для запрашивающего пользователя.
источник