2010-01-30 5 views
9

Postgresql गिरा कनेक्शन प्रबंधित (postgresql.conf में) के लिए 3 keepalive सेटिंग है पोस्टग्रेस्क्ल समय के बाद ग्राहक कनेक्शन ड्रॉप करने के लिए, क्या ग्राहक को अपना नेटवर्क कनेक्शन खोना चाहिए या सोना चाहिए।Postgresql में tcp_keepalives सेटिंग्स का उपयोग कैसे करें?</p> <p>tcp_keepalives_count <br> tcp_keepalives_idle <br> tcp_keepalives_interval</p> <p>डिफ़ॉल्ट रूप से इन कर रहे हैं 0.</p> <p>व्यवहार मैं चाहते हैं के लिए है:

मैं वर्तमान में इन मूल्यों का उपयोग कर रहा:

tcp_keepalives_count = 1
tcp_keepalives_idle = 60
tcp_keepalives_interval = 60

मैं मैक ओएस एक्स पर PostgreSQL 8.4 चला रहा हूँ, लेकिन यह है प्रतीत नहीं होता है कोई प्रभाव मेरा परीक्षण यह है कि मैं एक तालिका में एक पंक्ति (अद्यतन के लिए चयन का उपयोग कर) को लॉक करता हूं और वर्कस्टेशन को नेटवर्क से डिस्कनेक्ट करता हूं। लेकिन पोस्टग्रेस्क्ल में मैं अभी भी लॉक रखने वाले वर्कस्टेशन को देखता हूं।

मुझे उम्मीद है कि समय बीतने के बाद (इस मामले में 60 सेकंड) कनेक्शन समाप्त हो जाएगा और लॉक जारी किया जाएगा।

या तो मैं कुछ गलत कर रहा हूं या मैं पूरी तरह से गलतफहमी कर रहा हूं कि यह कैसे काम करना है।

कोई सलाह?

+0

कोई नहीं। मैंने सोचा कि मेरे पास कुछ था ... तो कुछ भी नहीं। – pestilence669

+0

मैंने सर्वर को रातोंरात छोड़ दिया और जब मैंने एएम में चेक किया, तो लॉक जारी किया गया। मुझे नहीं पता कि कनेक्ट को समाप्त करने में कितना समय लगेगा, लेकिन जाहिर है कि यह मेरी नई सेटिंग्स को नहीं देख रहा है (और, हाँ, मैंने सर्वर को पुनरारंभ किया है)। –

उत्तर

1

क्या ओएस? यदि विंडोज़, यह प्रासंगिक हो सकता है?

http://archives.postgresql.org/pgsql-hackers-win32/2005-09/msg00005.php

+0

मै मैक ओएस एक्स का उपयोग कर रहा हूं। मैं यह देखने के लिए लिनक्स का प्रयास करने जा रहा हूं कि मुझे अलग व्यवहार मिलता है या नहीं। –

9

मैं आप के बजाय अपने ऑपरेटिंग सिस्टम विन्यस्त करने की जरूरत है। प्रोग्राम द्वारा रखरखाव पैरामीटर बदलना अभी तक व्यापक रूप से समर्थित नहीं है। इससे आपकी मदद करनी चाहिए:
Using TCP keepalive to Detect Network Errors

इसके अलावा आपके पैरामीटर बुरी तरह से चुने जाते हैं। यदि tcp_keepalives_count=1 काम करता है तो एक भी खोया गया रखरखाव पैकेट आपके कनेक्शन को छोड़ देगा। और एकल पैकेट अक्सर खो जाते हैं। मैं MacOSX/FreeBSD पर /etc/sysctl.conf में निम्नलिखित का उपयोग करेंगे:
net.inet.tcp.keepidle = 60000
net.inet.tcp.keepintvl = 10000
ओएस तो ज्यादातर 140 सेकंड में कनेक्शन (के 60 सेकंड छोड़ देंगे कनेक्टिविटी खोने के बाद 10 सेकंड अंतराल में निष्क्रिय + 8 रखरखाव पैकेट।