Aşağıdaki ikisinden hangisi daha doğrudur?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Aşağıdaki ikisinden hangisi daha doğrudur?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Yanıtlar:
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.
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;
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
.
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"
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.