जवाबों:
आप pg_stat_activity
सिस्टम तालिका का उपयोग करके एक विशिष्ट पोस्टग्रैड बैकएंड आईडी को सिस्टम प्रोसेस आईडी से मिला सकते हैं ।
SELECT pid, datname, usename, query FROM pg_stat_activity;
एक अच्छा प्रारंभिक बिंदु हो सकता है।
एक बार जब आपको पता चल जाता है कि आप कौन-सी क्वेरी चला रहे हैं, तो आप आगे की जांच कर सकते हैं ( EXPLAIN
/ EXPLAIN ANALYZE
, लॉक की जाँच करें, आदि)
WHERE
खंड के साथ अलग कर सकते हैं , लेकिन यदि आपके पास PID की एक बड़ी संख्या नहीं है तो यह वैसा ही है पूर्ण आउटपुट के माध्यम से खोजना आसान है। पोस्टग्रेज मैनुअल में आपके द्वारा बाहर निकलने केpg_stat_activity
साथ-साथ अन्य आंकड़े-कलेक्टर टेबल (जो आपकी समस्या उपयोगकर्ता क्वेरी नहीं है, तो आपकी मदद कर सकते हैं ) पर अतिरिक्त विवरण है।
मैं एक ही मुद्दा रहा था। Postgresql AWS RDS पर सेटअप है और यह उदाहरण बढ़ाने के बाद भी 100% cpu उपयोग कर रहा था। मैंने यहां दिखाई गई विधि के साथ डिबग किया और एक विधि ने मेरे लिए काम किया।
मैंने सबसे लंबे समय तक चलने वाली क्वेरी के लिए जाँच की और पता चला कि कुछ प्रश्न अटके हुए थे और 3-4 घंटे से अधिक समय से चल रहे थे। यह जानने के लिए कि क्वेरी कितने समय से चल रही है, निम्न कमांड चलाएँ:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
यदि यह एक घंटे से अधिक है, तो यह मुद्दा है। लंबे समय तक चलने वाले कनेक्शन को मारें और आवेदन पक्ष से कनेक्शन की अधिकतम आयु को सीमित करें।
यदि यह वास्तव में उस सभी सीपीयू का उपयोग करने वाला पोस्टमास्टर है, तो संभवतः आपके पास लॉक विवाद मुद्दे हैं, शायद बहुत अधिक होने के कारण max_connections
। max_connections
यदि यह मामला है तो कनेक्शन पूलर को कम करने और उपयोग करने पर विचार करें ।
अन्यथा: विवरण, कृपया। top -b -n 1
एक शुरुआत के लिए पूर्ण उत्पादन ।
postgress
हैpostgres
कि आपने इसे सिर्फ हाथ से कॉपी किया है।