2012-04-28 10 views
5

मैं लगभग 150 के अनुरोध स्वीकार करने के लिए PgPool को कॉन्फ़िगर करने का प्रयास कर रहा हूं। पोस्टग्रेस सर्वर केवल 100 कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर किया गया है। 100 से परे कुछ भी PgPool द्वारा पूल किया जाना चाहिए। मुझे ऐसा नहीं लगता है। मुझे अनुरोधों को कतार में केवल PgPool की आवश्यकता होती है, मेरी वर्तमान कॉन्फ़िगरेशन ऐसा नहीं करता है। मेरे जेएमटर परीक्षण से, जब मैं 100 से अधिक कनेक्शन प्राप्त करने का प्रयास करता हूं, तो पोस्टग्रेस मुझे पीएसक्यूएल त्रुटि: sorry, too many clients कहने में त्रुटि देता है।एक अच्छा PgPool II configurataion

मैं केवल निम्नलिखित मानकों के साथ PGPool कॉन्फ़िगर किया है:

listen_address = 'localhost' 
port = 9999 
backend_hostname0 = 'localhost' 
backend_port0 = 5432 
num_init_children = 100 
max_pool = 4 
child_life_time =120 
child_max_connections = 0 
connections_life_tome = 120 
client_idle_limit = 0 

जब से मैं केवल आवश्यकता अतिरिक्त कनेक्शन अनुरोध कतार में PgPool, ऊपर कॉन्फ़िगरेशन सही है? कृपया उचित विन्यास पर सलाह दें।

+0

क्या आप सीधे पोस्टग्रेस्क्ल से कनेक्ट करने के बजाय अपने आवेदन में पीजीपूल इंस्टेंस को लक्षित करते हैं? –

+0

मैं पीजीपीूल पोर्ट 99 99 'जेडीबीसी के माध्यम से पोस्टग्रेस सर्वर से कनेक्ट कर रहा हूं: पोस्टग्रेस्क्ल: // लोकलहोस्ट: 99 99/डीबीनाम? उपयोगकर्ता = उपयोगकर्ता नाम और पासवर्ड = पासवर्डफूसर' –

उत्तर

2

पहली बात यह पता लगाना है कि आप अपने अधिकतम पूल आकार के रूप में क्या चाहते हैं। PostgreSQL प्रदर्शन (थ्रूपुट और विलंबता दोनों के मामले में) आमतौर पर सबसे अच्छा होता है जब सक्रिय कनेक्शन की अधिकतम संख्या कहीं ((2 * संख्या-कोर-कोर) + प्रभावी-स्पिंडल-गिनती होती है)। प्रभावी स्पिंडल गिनती को समझने में मुश्किल हो सकती है - यदि आपका सक्रिय डेटा सेट पूरी तरह से कैश किया गया है, तो इसे शून्य के रूप में गिनें, उदाहरण के लिए। इस गणना के लिए कोर के रूप में हाइपरथ्रेडिंग से किसी भी अतिरिक्त धागे की गणना न करें। यह भी ध्यान रखें कि नेटवर्क विलंबता के मुद्दों के कारण, आपको सक्रिय कनेक्शन की संख्या रखने के लिए गणना की गई संख्या से थोड़ा बड़ा पूल की आवश्यकता हो सकती है। आपको अपने हार्डवेयर और वर्कलोड के लिए मीठी जगह खोजने के लिए कुछ मानक करने की आवश्यकता हो सकती है।

सेटिंग को समायोजित करने की आवश्यकता child_max_connections है, num_init_children उस से कम या उसके बराबर रखी गई है।

+0

2 * संख्या-के-कोर + प्रभावी-स्पिंडल-गिनती ?? num_init_children पैरामीटर के लिए? क्या आप एक उदाहरण दे सकते हैं? मुझे यकीन नहीं है कि मैं समझ गया .. –

+0

मान लीजिए कि आपके पास हाइपरथ्रेडिंग वाला क्वाड कोर प्रोसेसर है। यह चार कोर है, इसलिए आप शायद आठ सक्रिय डेटाबेस कनेक्शन से लाभ उठा सकते हैं। मान लें कि आपके पास डेटा के लिए छः ड्राइव RAID 10 है। यदि आप पूरी तरह से कैश किए गए हैं, तो आप शायद कुछ भी नहीं जोड़ते हैं, क्योंकि ड्राइव को कई यादृच्छिक पढ़ने के लिए उपयोग नहीं किया जा रहा है। यदि आप डिस्क-बाध्य हैं, तो आप इसे छः के रूप में गिनते हैं, जिससे आपको 14 कनेक्शन मिलते हैं। यदि आप आंशिक रूप से कैश किए गए हैं, तो प्रभावी कैश आकार शायद कहीं बीच में है। वहां से शुरू करें और अपने वर्कलोड के साथ थोड़ा बड़ा और छोटा पूल परीक्षण करें। – kgrittn

+0

खैर PgPool विकी है इस बयान ने मुझे मदद की: - सारांश, max_pool, num_init_children, max_connections में, superuser_reserved_connections निम्न सूत्र को पूरा करना चाहिए: - (कोई क्वेरी को रद्द करने की जरूरत) max_pool * num_init_children <= (superuser_reserved_connections max_connections)। मैं 'listen_address करने के लिए अपने विन्यास बदल = 'स्थानीय होस्ट' पोर्ट = 9999 backend_hostname0 = 'स्थानीय होस्ट' backend_port0 = 5432 num_init_children = 25 max_pool = 4 child_life_time = 120 child_max_connections = 100 connections_life_tome = 120 client_idle_limit = 25' –

4

पीजीपूल में 'child_max_connections' डीबी के लिए अधिकतम अनुमत कनेक्शन नहीं है। यह समाप्त होने से पहले पूल किए गए कनेक्शन का उपयोग किया जा सकता है। यह कनेक्शन थ्रेड रीसायकल करने और मेमोरी लीक को रोकने के लिए है।

max_pool x num_init_children का सूत्र pgpool पोस्टग्रेस्क्ल को बनाएगा कनेक्शन की अधिकतम संख्या का वर्णन करता है। जाहिर है, इसे postgresql में 'max_connections' सेट से कम होना चाहिए, अन्यथा pgpool डीबी को अनुपलब्ध बैकएंड के रूप में चिह्नित करता है। और यदि आपके पास व्यवस्थापक उपयोग के लिए आरक्षित कुछ डीबी कनेक्शन हैं, तो आपको आगे पगपूल कनेक्शन की संख्या को कम करने की आवश्यकता है।

तो, मैं जो कह रहा हूं वह है कि सूत्र में 'max_connections' postgresql.conf में पैरामीटर सेट है। ऊपर टिप्पणी में 'child_max_connections' को 100 पर सेट करने का मतलब है कि pgpool कनेक्शन बंद है और इसका उपयोग हर 100 बार किया जाता है।

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