Bir PostgreSQL DB'sindeki mevcut bağlantı sayısını almak için doğru sorgu


Yanıtlar:


226

Bu ikisi zorunlu değildir. Birincinin eşdeğer versiyonu şöyle olacaktır:

SELECT sum(numbackends) FROM pg_stat_database;

Bu durumda, bu sürümün ikincisinden biraz daha hızlı olmasını beklerim, çünkü saymak için daha az satır var. Ama muhtemelen bir farkı ölçemezsiniz.

Her iki sorgu da tamamen aynı verilere dayanmaktadır, bu nedenle eşit derecede doğru olacaktır.


1
Doğru değil, aynı derecede doğrudurlar. Cevabımı gör.
gargii

2
Postgres komut satırı aracı, bu sorguyu yürütmek için PSQL kullanıldığında, yapılan bağlantı sayısının toplamı bu sorgunun sonucudur - 1 çünkü yapılan psql bağlantısı da bağlantı olarak dahil edilmiştir
neonidian

25

Aşağıdaki sorgu çok yararlı

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;

2
'kullanılmış' ve 'res_for_super' sütunlarını açıklayabilir misiniz?
bahis

Merhaba, kullanılmış bağlantı kullanılıyor, res_for_super süper kullanıcı erişimi için ayrılmış bağlantılar
tbo

12

Kesinlikle farklı sonuçlar verebilirler. Daha iyisi

select count(*) from pg_stat_activity;

Bunun nedeni, düzenli bağlantılar olarak kabul edilen ve sayılan WAL gönderen süreçlerine bağlantılar içermesidir max_connections.

Max_wal_senders sayfasına bakın


2

Durumlarına göre tüm postgres oturumlarının toplanması (kaç kişi boşta, kaç kişi bir şey yapıyor ...)

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

0

TCP bağlantılarının sayısı size yardımcı olacaktır. Belirli bir veritabanı için olmadığını unutmayın

netstat -a -n | find /c "127.0.0.1:13306"

1
Bu yorum Windows tabanlı bir işletim sistemi içindir. Linux için aşağıdakiler olabilir: lsof -Pni: 5432 | fgrep ">" | fgrep -i kuruluş | wc -l
XXL

3
Bu bir SQL sorgusu değil, lütfen belirli sorulara gürültü eklemeyin.
bugmenot123

-3

Kaynak koduna baktığımızda, pg_stat_database sorgusu size tüm kullanıcılar için geçerli veritabanına bağlantı sayısını veriyor gibi görünüyor. Öte yandan pg_stat_activity sorgusu, yalnızca sorgulayan kullanıcı için geçerli veritabanına bağlantı sayısını verir.


1
Bu yanlış. pg_stat_activity, kullanıcıya bakılmaksızın tüm bağlantıları da verir. Daha sonra size hangi kullanıcının olduğunu, isterseniz filtreleyebileceğiniz bir alan verir. Aynı kullanıcı veya bir süper kullanıcı değilseniz size sorgunun metnini vermez , ancak yine de bağlantıyı gösterir.
Magnus Hagander

3
Haklısın. Görüş tanımına yeterince bakmadım. Kullanıcı kimliği üzerindeki kısıtlama sadece pg_authid'e katılmak içindir. Benim hatam.
Brian L
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.