2017-05-24 12 views
5

में प्रश्नों अगर मैं क्वेरी:लांग तक चलने वाले 'COMMIT' 'निष्क्रिय' स्थिति से pg_stat_activity

select * from pg_stat_activity where application_name ~ 'example-application'; 

मैं कई पंक्तियों जो राज्य idle है मिलता है और क्वेरी COMMIT है। वे लंबे समय तक चल रहे हैं और गायब नहीं होते हैं। कुछ समय के बाद, अपने आवेदन hibernate.c3p0.max_size सीमा (पूल में JDBC कनेक्शन की अधिकतम संख्या) तक पहुँचने और डेटाबेस के साथ कार्य करना बंद कर।

कुछ आवेदन कार्यान्वयन विवरण अन्य अतः सूत्र में वर्णित हैं: Guice DAO Provider in thread pool - queries become 'idle in transation'

यह क्यों होता है? इस समस्या को हल कैसे करें?

+1

मेरा मानना ​​है कि पूल में कनेक्शन किसी कारण से पुन: उपयोग नहीं कर रहे हैं –

उत्तर

7

यदि सत्र "निष्क्रिय" है, तो क्वेरी कॉलम अंतिम कथन दिखाता है कि कनेक्शन निष्पादित किया गया है। यह नहीं "वर्तमान" क्वेरी है, इसलिए कनेक्शन नहीं खत्म करने के लिए प्रतिबद्ध के लिए इंतज़ार कर रहा है।

अगर statusactive से पता चलता query स्तंभ केवल वर्तमान बयान दर्शाता है।

एक "निष्क्रिय" कनेक्शन एक समस्या नहीं और अनिवार्य रूप से कारण है कि एक कनेक्शन पूल, प्रयोग किया जाता है, ताकि वह फिर से इस्तेमाल किया जा सकता है। हालांकि, सत्र कि "लेन-देन में निष्क्रिय" में बहुत लंबे समय रहने एक समस्या है। लेकिन आपने कहा है कि आपके कनेक्शन "निष्क्रिय" स्थिति में हैं।

अपने कनेक्शन पूल सीमा तक पहुँच जाता है, तो यह सबसे शायद अपने अनुप्रयोग पूल करने के लिए ठीक से कनेक्शन नहीं लौटा रहा है का मतलब है। यह कुछ ऐसा है जो आपको अपने आवेदन में ठीक करने की ज़रूरत है।

संबंधित मुद्दे