Jawaban:
Keduanya membutuhkan tidak setara. Versi yang setara dari yang pertama adalah:
SELECT sum(numbackends) FROM pg_stat_database;
Dalam hal ini, saya berharap versi itu sedikit lebih cepat daripada yang kedua, hanya karena memiliki lebih sedikit baris untuk dihitung. Tetapi Anda tidak akan mungkin bisa mengukur perbedaan.
Kedua pertanyaan didasarkan pada data yang persis sama, sehingga mereka akan sama akuratnya.
Permintaan berikut ini sangat membantu
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;
Mereka pasti dapat memberikan hasil yang berbeda. Yang lebih baik adalah
select count(*) from pg_stat_activity;
Itu karena itu termasuk koneksi ke proses pengirim WAL yang diperlakukan sebagai koneksi biasa dan diperhitungkan max_connections
.
Lihat max_wal_senders
Jumlah koneksi TCP akan membantu Anda. Ingat bahwa ini bukan untuk database tertentu
netstat -a -n | find /c "127.0.0.1:13306"
Dari melihat kode sumber, sepertinya permintaan pg_stat_database memberi Anda jumlah koneksi ke database saat ini untuk semua pengguna. Di sisi lain, permintaan pg_stat_activity memberikan jumlah koneksi ke database saat ini hanya untuk pengguna yang meminta.