निम्नलिखित दो में से कौन अधिक सटीक है?
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;
ऐसा इसलिए है क्योंकि इसमें वाल प्रेषक प्रक्रियाओं के कनेक्शन शामिल हैं जिन्हें नियमित कनेक्शन के रूप में माना जाता है और उनकी ओर ध्यान जाता है max_connections
।
देखें max_wal_senders
टीसीपी कनेक्शन की संख्या आपकी मदद करेगी। याद रखें कि यह किसी विशेष डेटाबेस के लिए नहीं है
netstat -a -n | find /c "127.0.0.1:13306"
स्रोत कोड को देखने से ऐसा लगता है कि pg_stat_database क्वेरी आपको सभी उपयोगकर्ताओं के लिए वर्तमान डेटाबेस से कनेक्शन की संख्या प्रदान करती है। दूसरी ओर, pg_stat_activity क्वेरी केवल क्वेरी करने वाले उपयोगकर्ता के लिए वर्तमान डेटाबेस के लिए कई कनेक्शन देता है।