मैं एक निष्क्रिय क्वेरी को कैसे डिबग करूं?


13

मेरे पास एक बैच क्वेरी है जो मैं अपने डेटाबेस पर दैनिक चला रहा हूं। हालाँकि, यह बेकार की स्थिति में फंस गया है, और मुझे इस बात पर बहुत कठिनाई हो रही है कि क्या चल रहा है।

क्वेरी एक तालिका पर एक एकत्रीकरण है जो एक साथ सम्मिलित हो रही है, जिसे मैं अनुमान लगा रहा हूं कि किसी तरह मुद्दे से संबंधित है। (एकत्रीकरण पिछले दिनों के डेटा पर है, इसलिए सम्मिलन परिणामों को प्रभावित नहीं करना चाहिए।)

सुराग

  1. मैं sqlalchemy का उपयोग करके एक अजगर स्क्रिप्ट के अंदर इसे चला रहा हूं। हालाँकि, मैंने ऑटोकॉमिट में लेन-देन का स्तर निर्धारित किया है, इसलिए मुझे नहीं लगता कि लेन-देन के अंदर चीजें लपेटी जा रही हैं। दूसरी ओर, जब मैं इसे sql टर्मिनल में मैन्युअल रूप से चलाता हूं तो मुझे क्वेरी हैंग नहीं होती है।

  2. क्वेरी करने से pg_stat_activity, क्वेरी प्रारंभ में डेटाबेस में आती है state='active'। शायद 15 सेकंड के बाद, राज्य 'निष्क्रिय' में बदल जाता है और इसके अलावा, इसके xact_startलिए सेट किया जाता है NULL। प्रतीक्षा ध्वज कभी भी सत्य पर सेट नहीं होता है।

  3. इससे पहले कि मैं sqlalchemy के लिए लेन-देन के स्तर के स्वरुप का पता लगाता, वह इसके बजाय राज्य में लटका 'idle in transaction'होता 'idle'। और यह संभवतः उस परिवर्तन को करने के बाद से थोड़ा कम लटका रहता है?

मुझे ऐसा लगता है कि मैं इस पर जितना भी गहराई से खुदाई करने के लिए सुसज्जित नहीं हूं। किसी भी प्रतिक्रिया, यहां तक ​​कि अलग-अलग राज्यों के बारे में और अधिक व्याख्या करने और संबंधित उत्तर देने वाले इंटर्नल को एक निश्चित जवाब दिए बिना, बहुत सराहना की जाएगी।


2
यदि राज्य निष्क्रिय है और यह प्रतीक्षा नहीं कर रहा है, तो क्वेरी पूरी हो गई है लेकिन db से कनेक्शन बंद नहीं है। लेन-देन में निष्क्रिय, का अर्थ यह भी है कि क्वेरी पूरी हो गई है, लेकिन COMMITलेनदेन को समाप्त करने के लिए जारी नहीं किया गया है। ऐसा लगता है कि आपका मुद्दा db से कहीं अधिक हो सकता है ..
Joishi Bodio

हां, मुझे लगता है कि तुम सही हो। मुद्दा यह है कि पायथन क्वेरी को कैसे संभाल रहा है, डेटाबेस के साथ कोई समस्या नहीं।
कर्ट स्पिंडलर

जवाबों:


6

पहली बात जो आपको यहाँ अलग करनी है वह है शब्द क्वेरी , लेन-देन और कनेक्शन

  1. सुराग: आपकी क्वेरी निष्पादित हो जाती है - यह सक्रिय स्थिति में है। उसके बाद क्वेरी समाप्त हो जाती है लेकिन कनेक्शन चालू रहता है - निष्क्रिय अवस्था। कोई लेनदेन नहीं है (यह प्रतिबद्ध है) तो xact_startअशक्त है। इसलिए आपको क्वेरी सक्सेस होने के बाद कनेक्शन बंद करना होगा।

  2. सुराग: इससे पहले कि ऑटोोकॉमिट क्वेरी पर था लेन-देन के बीच में छोड़ दिया गया था इसलिए पहले आपको commitऔर फिर करना होगा close connection

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.