2011-03-11 11 views
79

içinde bağlantılarının mevcut sayısını alınır? pg_stat_database sorgu size tüm kullanıcılar için mevcut veritabanına bağlantı sayısını verir gibi kaynak koduna bakarakSağ sorgu daha doğrudur aşağıdaki ikisinden hangisi bir PostgreSQL DB

select numbackends from pg_stat_database; 

select count(*) from pg_stat_activity; 
+3

Daha ne açısından/c bulmak? –

+1

doğruluk açısından daha iyi –

cevap

124

Bu iki gereksinim eşdeğer değil. İlki eşdeğer versiyonu olacaktır:

Bu durumda
SELECT sum(numbackends) FROM pg_stat_database; 

, bunu saymak az satır vardır çünkü bu versiyon ikincisine göre biraz daha hızlı olması beklenir. Fakat muhtemelen bir farkı ölçemeyeceksiniz.

Her iki sorgu da tam olarak aynı verilere dayanmaktadır, dolayısıyla eşit olarak doğru olacaktır.

-3

, öyle görünüyor. Öte yandan, pg_stat_activity sorgusu, yalnızca sorgulama kullanıcısı için geçerli veritabanına bağlantı sayısı verir.

+1

Bu yanlış. pg_stat_activity, kullanıcı ne olursa olsun tüm bağlantıları da verir. Ardından size hangi kullanıcının olduğunu söyleyen bir alan verir, isterseniz filtreleyebilirsiniz. Aynı kullanıcı veya bir süper kullanıcı değilseniz, * sorgunun * metnini size vermeyecektir, ancak yine de bağlantıyı gösterecektir. –

+3

Haklısınız. Görünüm tanımında yeterince yakından bakmadım. Userid'deki kısıtlama sadece pg_authid'e katılmak içindir. Benim hatam. –

2

tcp bağlantılarının yok size yardımcı olacaktır. belirli bir veritabanı için olmadığını unutmayın

netstat -a -n | "127.0.0.1:13306"