PostgreSQL के लिए max_connections और pgbouncer के लिए default_pool_size की गणना कैसे करें?


17

क्या कोई नियम या कुछ है जिसका उपयोग मैं एक अच्छी संख्या की गणना करने के लिए कर सकता हूं max_connections, default_pool_sizeऔर max_client_conn?

चूक अजीब हैं। PostgreSQL डिफ़ॉल्‍ट को max_connections = 100 पर जबकि Pgbouncer डिफ़ॉल्‍ट को default_pool_size = 20 में डिफॉल्ट करता है। क्या default_pool_size हमेशा max_connections से अधिक नहीं होना चाहिए? नहीं तो बात क्या है? मैंने सोचा था कि pgbouncer हमें उनके ओवरहेड को कम करके (PostgreSQL के कनेक्शन का पुन: उपयोग करके) अधिक कनेक्शनों को संभालने के लिए था। मैं उलझन में हूं।

मैं PostgreSQL के विकी में पाए गए लोगों के समान सलाह की तलाश में हूं , जैसे "यह पैरामीटर आपकी स्मृति का ~ 50% होना चाहिए"।

मुझे याद है कि MySQL के लिए एक स्प्रेडशीट थी जो आपको इस तरह के मापदंडों की गणना करने देगी। PostgreSQL / pgbouncer के लिए ऐसा कुछ होना भयानक होगा।

जवाबों:


12

सबसे पहले, कृपया क्षमता योजना पर हमारे विहित प्रश्न पढ़ें
विशिष्ट सलाह जो आप पूछ रहे हैं, वह क्षमता नियोजन सलाह है, और आपको अपने विशेष वातावरण के लिए काम करना होगा।

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


विशेष रूप से फिर से: कनेक्शन सीमाएं और पूल आकार, आपके पास अपने आवेदन की आवश्यकताओं को पूरा करने के लिए "पर्याप्त" कनेक्शन होना चाहिए - या तो एक सर्वर पर या पूल / बाउंसर के माध्यम से।

"पर्याप्त" एक सापेक्ष संख्या है: एक आवेदन जो बनाता है (और लगातार पुन: उपयोग करता है) एक कनेक्शन को केवल एक कनेक्शन की आवश्यकता होती है। एक एप्लिकेशन जो प्रत्येक अंतिम-उपयोगकर्ता के लिए एक कनेक्शन स्थापित करता है जो लॉग इन करता है, जिसके लिए कई DB कनेक्शनों की आवश्यकता होती है क्योंकि इसमें उपयोगकर्ता हैं।

दोनों Postgres के लिए डिफ़ॉल्ट मान और डिफ़ॉल्ट केpgbouncer रूप में समझदार हैं :

  • 100 डेटाबेस कनेक्शन ठेठ व्यक्ति को पोस्टग्रेज को एक वातावरण में फेंकने के लिए बहुत कुछ है।
    डेवलपर्स को शायद 10. से अधिक की आवश्यकता नहीं होगी। किसी और को संख्या बढ़ाने के लिए पर्याप्त पता चल जाएगा।

  • pgbouncerप्रति डीबी पूल से 20 कनेक्शन का मतलब है कि आप एक सर्वर पर इंगित करते हुए 4 पूल प्राप्त कर सकते हैं और डिफ़ॉल्ट को स्थगित नहीं कर सकते कनेक्शन सीमा को स्थगित कर देता है। एक बैक-एंड डेटाबेस
    को pgbouncerइंगित करने में कई पूल किए गए संसाधन होना संभव है , और आप हमेशा अपने बैक-एंड सर्वर पर कुछ उपलब्ध कनेक्शन चाहते हैं।

यदि डिफॉल्ट आपके वातावरण के लिए उपयुक्त नहीं हैं, तो आपको उनसे बदलने की उम्मीद है।

याद रखें कि पूल किए गए कनेक्शन का अर्थ "हमेशा उपलब्ध हर डेटाबेस कनेक्शन को बाँधना" नहीं है।
के बिंदु pgbouncerके रूप में आप का उल्लेख किया है , पुन: उपयोग कनेक्शन। यहां दक्षता हासिल करने की आवश्यकता नहीं है कि आप हर उपलब्ध कनेक्शन को टाई करते हैं, केवल यह कि आप डिस्कनेक्ट नहीं करते हैं, फिर से कनेक्ट करते हैं, एसएसएल को फिर से बातचीत करते हैं, डेटाबेस को फिर से प्रमाणित करते हैं, और हर बार अपने कनेक्शन सेटअप प्रश्नों को फिर से चलाते हैं।


8
मैं चीजों को ठीक से कॉन्फ़िगर करने से पहले अधिक हार्डवेयर खरीदने की बात नहीं देखता। "किसी और को संख्या बढ़ाने के लिए पर्याप्त पता चल जाएगा" । भला, मैं पर्याप्त जानना कहाँ से सीख सकता हूँ? मुझे कनेक्शन के बारे में ज्यादा सामग्री नहीं मिल रही है। क्या यह सिर्फ परीक्षण और त्रुटि है? MySQL के लिए मैंने जिस स्प्रेडशीट का उल्लेख किया था, वह एक आकर्षण की तरह काम करता था। इसके द्वारा इंगित की तुलना में अधिक कनेक्शन का उपयोग करने से सर्वर को स्मृति से बाहर चला जाएगा। अभी मेरे पास 4GB है, मुझे डिफॉल्ट्स बढ़ने की उम्मीद थी। इसके अलावा, 20x4 = 80, अन्य 20 के लिए क्या हैं?
चोकोडेवेलपर

1
@ChocoDeveloper कृपया अपने उत्तर को पूरी तरह से पढ़ें (आप कुछ चीजें जो मैंने पहले ही संबोधित कर ली हैं) पूछ रहे हैं, और कुछ मिनटों के साथ जुड़े दस्तावेज़ों के साथ बिताते हैं। आप अभी भी इसे पीछे की ओर देख रहे हैं (मेरे उत्तर के पहले पैराग्राफ को देखें)। ध्यान रखें कि Postgres MySQL नहीं है: आपको अपने MySQL ट्यूनिंग अनुभव से जो कुछ भी आपको लगता है कि आप जानते हैं उसे भूलने की जरूरत है। Postgres Oracle की तरह है। मैनुअल का अध्ययन करें , और आपके द्वारा दिए गए निर्देशों के अनुसार आगे बढ़ें।
voretaq7

1

सूचना के प्रलेखन की परिभाषाdefault_pool_size

प्रति उपयोगकर्ता / डेटाबेस जोड़ी को अनुमति देने के लिए कितने सर्वर कनेक्शन हैं।

इसलिए, यदि डिफ़ॉल्ट कॉन्फिगरेशन 20 के एक पूल साइज का है, तो कुल 100 कनेक्शनों में से, इसका मतलब है कि 5 अलग-अलग उपयोगकर्ता / डेटाबेस जोड़े समग्र सीमा तक पहुंचने से पहले अपने पूल साइज को अधिकतम करेंगे। इसके विपरीत, यदि आप उदाहरण के लिए किसी एकल उपयोगकर्ता के माध्यम से किसी एकल डेटाबेस में जाने के लिए pgbouncer का उपयोग कर रहे हैं, तो आपकी प्रभावी कनेक्शन सीमा 20 है, 100 नहीं, इसलिए आपको उस उपयोग के लिए पूल आकार को तदनुसार सेट करना होगा। YMMV।

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