क्या एक PL / PGSQL फ़ंक्शन के अंदर से PostgreSQL सर्वर के प्रदर्शन की निगरानी करना संभव है?
यह विदेशी लग सकता है, मैं प्रोग्रामेटिक रूप से जानना चाहूंगा कि क्या सर्वर में भारी-भरकम PL / PGSQL फ़ंक्शन निष्पादित करने के लिए यह एक 'अच्छा क्षण' है। 'अच्छे पल' से मेरा मतलब है कि लोड लेवल, कॉन्सिक्वेंसी लेवल या पोस्टग्रेक्यूएल सर्वर के किसी भी परिमाण के कुछ प्रत्यक्ष या परिकलित संकेतक को इंगित करना।
मुझे पता है कि वहाँ प्रदर्शन ट्रैकिंग में विशेष उन्नत अनुप्रयोगों की एक संख्या है, जैसे https://www.datadoghq.com। लेकिन मैं सिर्फ एक साधारण आंतरिक KPI चाहता हूं जो कि 'बेहतर पल' आने तक इन भारी-भरकम प्रक्रियाओं के निष्पादन में बदलाव या देरी करता है।
इनमें से कुछ प्रक्रियाएं टेबल को शुद्ध करती हैं, कुछ लाखों पंक्तियों पर औसत / सम गणना करती हैं, कुछ रिमोट टेबल की जांच करती हैं, वे समवर्ती उपयोगकर्ता दबाव कम होने पर 'बेहतर क्षण' के लिए मिनटों या घंटों तक प्रतीक्षा कर सकते हैं।
कोई उपाय?
जवाब
आप देख सकते हैं कि कुछ अन्य सत्र कितने सक्रिय हैं:
select count(*) from pg_stat_activity where state='active';
लेकिन आपको एक सुपरयुसर होना चाहिए, या pg_monitor की भूमिका निभानी होगी, या फिर अन्य उपयोगकर्ताओं के सत्र के लिए राज्य NULL होगा। यदि वह आपको परेशान करता है, तो आप इस जानकारी तक पहुँच की अनुमति देने के लिए सुरक्षा DEFINER के साथ एक फ़ंक्शन लिख सकते हैं। (आप इसे वैसे भी अपने कार्य में लगा रहे होंगे, जिसका अर्थ यह नहीं है कि इसे plpgsql में लागू करने की आवश्यकता है जब तक कि यह एकमात्र भाषा आपके लिए उपलब्ध न हो।)
आप उपयुक्त रूप से विशेषाधिकार प्राप्त pl भाषा का उपयोग करके किसी भी मनमाने ढंग से OS संचालन को लागू कर सकते हैं। यही कारण है कि plpgsql से शामिल हैं , कोस द्वारा COPY...FROM PROGRAM
।