क्या Postgres सर्वर पर टाइमआउट को सीमित करना संभव है?


18

मैं अपने एप्लिकेशन (क्लाइंट साइड) में 10 मिनट के लिए कनेक्शन और कमांड टाइमआउट सेट करता हूं।

मेरे आवेदन की तुलना में एक सरल क्वेरी चलती है: SELECT pg_sleep(65)

कुछ सर्वर पर यह ठीक काम करता है, लेकिन अन्य सर्वर 60 सेकंड के बाद कनेक्शन बंद कर देते हैं।

क्या यह कुछ प्रकार के PostgreSQL सर्वर कॉन्फ़िगरेशन हो सकता है जो टाइमआउट को सीमित करता है और मेरी क्लाइंट सेटिंग्स को अनदेखा करता है?


वर्तमान टाइमआउट देखने के लिए:SHOW statement_timeout;
उपयोगकर्ता

जवाबों:


29

हाँ, यह मुमकिन है

डॉक्स में उल्लिखित दो सेटिंग्स हैं ( idle_in_transaction_session_timeout9.6x संस्करण में नया है)

  • statement_timeout (पूर्णांक)

    किसी भी कथन को निर्दिष्ट करें जो कि मिलीसेकंड की निर्दिष्ट संख्या से अधिक है, क्लाइंट से सर्वर पर आने के समय से शुरू होता है। यदि log_min_error_statement ERROR या उससे कम पर सेट है, तो समय समाप्त होने वाला विवरण भी लॉग किया जाएगा। शून्य का मान (डिफ़ॉल्ट) इसे बंद कर देता है।

    Postgresql.conf में statement_timeout सेट करना अनुशंसित नहीं है क्योंकि यह सभी सत्रों को प्रभावित करेगा।

  • idle_in_transaction_session_timeout (पूर्णांक)

    किसी भी सत्र को खुले लेनदेन के साथ समाप्त करें जो कि मिलीसेकंड में निर्दिष्ट अवधि से अधिक समय के लिए निष्क्रिय है। यह उस सत्र द्वारा आयोजित किसी भी ताले को जारी करने और कनेक्शन स्लॉट को पुन: उपयोग करने की अनुमति देता है; यह केवल इस लेन-देन को दिखाई देने वाले ट्यूपल्स को वैक्यूम करने की अनुमति देता है। इसके बारे में अधिक जानकारी के लिए खंड 24.1 देखें।

    0 का डिफ़ॉल्ट मान इस सुविधा को अक्षम करता है।

जब तक आप मनोरंजन नहीं चाहते तब तक postgresql.conf में सेट करना महत्वपूर्ण है statement_timeout

यहाँ इसका एक उदाहरण काम कर रहा है

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout

कॉन्फ़िगरेशन फ़ाइल में न तो सेटिंग मौजूद है, इसलिए मैं चूक का उपयोग कर रहा हूं। :( कोई अन्य विचार?
आंद्रेज गिस

@gisek यकीन है, यह नेटवर्क स्तर पर कुछ हो सकता है, या तो आपके स्थानीय आईपी स्टैक में या फ़ायरवॉल पर।
इवान कैरोल

4

बॉक्स से बाहर नहीं। हालांकि कस्टम सर्वर को संकलित करना बहुत आसान होगा, जिसने आपकी सेटिंग्स को अनदेखा कर दिया है।

लेकिन अधिक संभावना यह है कि आपके कनेक्शन एक फ़ायरवॉल या गेटवे द्वारा अलग किए जा रहे हैं जो निष्क्रिय कनेक्शन पसंद नहीं करते हैं।

यदि आपके पास सर्वर की लॉग फ़ाइल तक पहुंच है, तो उसे एक अच्छा सुराग देना चाहिए। यदि क्लाइंट का कहना है कि सर्वर ने अप्रत्याशित रूप से कनेक्शन बंद कर दिया है, और सर्वर का कहना है कि क्लाइंट ने अप्रत्याशित रूप से कनेक्शन बंद कर दिया है, तो संभवतः क्लाइंट और सर्वर के बीच कुछ ऐसा है जो वास्तव में कनेक्शन को विच्छेद कर रहा है।


यह निश्चित रूप से है नहीं apt-get से बस नियमित सामान - एक कस्टम संकलित सर्वर। क्या आप कृपया अधिक विस्तृत फ़ायरवॉल और गेटवे लीड को विस्तृत कर सकते हैं? मैं इसे कैसे सत्यापित और ठीक कर सकता हूं?
आंद्रेज गिस

-2

हाँ यह संभव है। कुछ कनेक्शन पैरामीटर हैं जिन्हें आपको सेट करने की आवश्यकता है।

कृपया नीचे दिए गए लिंक को देखें। https://jdbc.postgresql.org/documentation/head/connect.html

loginTimeout कनेक्टटाइमआउट सॉकेट टाइमआउट रद्द करेंSignalTimeout


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