Хто з наступних двох є більш точним?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Хто з наступних двох є більш точним?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Відповіді:
Ці дві потреби не є рівнозначними. Еквівалентною версією першої буде:
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
Кількість підключень TCP допоможе вам. Пам'ятайте, що це не для конкретної бази даних
netstat -a -n | find /c "127.0.0.1:13306"
З огляду на вихідний код, схоже, що запит pg_stat_database дає вам кількість підключень до поточної бази даних для всіх користувачів. З іншого боку, запит pg_stat_activity дає кількість підключень до поточної бази даних лише для користувача запиту.