पोस्टग्रेज में अधिकतम कनेक्शन कैसे बढ़ाएं?


108

मैं अपने उत्पाद के लिए Postgres DB का उपयोग कर रहा हूं। स्लिक 3 का उपयोग करते हुए बैच डालने के दौरान, मुझे एक त्रुटि संदेश मिल रहा है:

org.postgresql.util.PSQLException: FATAL: क्षमा करें, बहुत सारे ग्राहक पहले से ही।

मेरा बैच इंसर्ट ऑपरेशन हजारों रिकॉर्ड से अधिक होगा। मेरे पोस्टग्रेज का मैक्स कनेक्शन 100 है।

अधिकतम कनेक्शन कैसे बढ़ाएं?



एक कनेक्शन पूल जैसे pgBouncer या pgPool का उपयोग करें
फ्रैंक हाइकेन

2
1. पहले जांचें कि क्या आपका मिडलवेयर बहुत अधिक कनेक्शन नहीं खोल रहा है, या उन्हें लीक कर रहा है। 2. (शायद) अगले एक कनेक्शन पूलर का उपयोग करें। 3. (लगभग) इस प्रकार की समस्या पर अनुमत कनेक्शनों की संख्या कभी नहीं बढ़ाते हैं, ज्यादातर मामलों में यह चीजों को बदतर बना देगा। (सिवाय अगर आप कर रहे हैं पूरी तरह से सुनिश्चित)
Joop

जवाबों:


220

बस बढ़ते max_connectionsजाना बुरा विचार है। आपको बढ़ाने की जरूरत है shared_buffersऔर kernel.shmmaxसाथ ही साथ।


विचार

max_connectionsडेटाबेस सर्वर के समवर्ती कनेक्शन की अधिकतम संख्या निर्धारित करता है। डिफ़ॉल्ट आमतौर पर 100 कनेक्शन है।

अपने कनेक्शन की गिनती बढ़ाने से पहले आपको अपनी तैनाती को बढ़ाने की आवश्यकता हो सकती है। लेकिन इससे पहले, आपको विचार करना चाहिए कि क्या आपको वास्तव में एक बढ़ी हुई कनेक्शन सीमा की आवश्यकता है।

प्रत्येक PostgreSQL कनेक्शन कनेक्शन या क्लाइंट का उपयोग करने के लिए रैम की खपत करता है। आपके पास जितने अधिक कनेक्शन होंगे, आप उतनी अधिक रैम का उपयोग करेंगे जो डेटाबेस को चलाने के लिए उपयोग किया जा सकता है।

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


अधिकतम कनेक्शन कैसे बढ़ाएं

1. वृद्धि max_connectionऔरshared_buffers

में /var/lib/pgsql/{version_number}/data/postgresql.conf

परिवर्तन

max_connections = 100
shared_buffers = 24MB

सेवा

max_connections = 300
shared_buffers = 80MB

shared_buffersविन्यास पैरामीटर निर्धारित करता है कितना स्मृति है समर्पित करने के लिए उपयोग करने के लिए PostgreSQL के लिए डेटा कैशिंग

  • यदि आपके पास 1GB या उससे अधिक RAM वाला सिस्टम है, तो आपके सिस्टम में शेयर्ड_बफर्स ​​का एक उचित मूल्य 1/4 है।
  • यह संभव नहीं है कि आप 40% से अधिक रैम का उपयोग करके छोटी राशि से बेहतर काम कर सकें (जैसे 25%)
  • ध्यान रखें कि यदि आपका सिस्टम या PostgreSQL बिल्ड 32-बिट है, तो यह 2 ~ 2.5GB से ऊपर शेयर्ड_बफर्स ​​सेट करने के लिए व्यावहारिक नहीं हो सकता है।
  • ध्यान दें कि विंडोज पर, share_buffers के लिए बड़े मूल्य उतने प्रभावी नहीं हैं, और आपको अपेक्षाकृत कम रखने और इसके बजाय OS कैश का उपयोग करने के बेहतर परिणाम मिल सकते हैं। विंडोज पर उपयोगी रेंज 64MB से 512MB है

2. कर्नेल बदलें

आपको कर्नेल अधिकतम सेगमेंट का आकार बढ़ाने की आवश्यकता होगी जो कि इससे थोड़ा बड़ा होगा shared_buffers

फ़ाइल /etc/sysctl.confमें पैरामीटर को नीचे दिखाए अनुसार सेट करें। postgresqlरिबूट होने पर यह प्रभावी होगा (निम्न पंक्ति कर्नेल को अधिकतम बनाती है 96Mb)

kernel.shmmax=100663296

संदर्भ

अधिकतम कनेक्शन और साझा बफ़र्स को पोस्ट करता है

आपका PostgreSQL सर्वर ट्यूनिंग


बहुत बढ़िया जवाब। सवालों के जोड़े .. 96 एमबी के बराबर 100663296 कैसे है? और हम शमेक्स को क्यों बदलते हैं?
रोबो_यूके

3
100663296 बाइट्स = 96 एमबी (बाइनरी में)। Shmmax एक साझा मेमोरी सेगमेंट का अधिकतम आकार है । अब क्योंकि हमने साझा बफ़र्स के आकार में वृद्धि की है इसलिए हमें कैशिंग के लिए बढ़ी हुई मेमोरी को समायोजित करने के लिए श्मैक्स को बदलने की आवश्यकता है।
अंकित

1
@ रबो_यूके 96 * 1024 * 1024 = 100663296
स्क्रेबेल

6
आप अपने सिस्टम के लिए इन सेटिंग्स को निर्धारित करने में मदद करने के लिए PGTune का उपयोग कर सकते हैं
Yoan Tournade

11
cat /proc/sys/kernel/shmmaxइसे बदलने से पहले अपनी वर्तमान कर्नेल.शमैक्स सेटिंग ( ) देखें। आधुनिक प्रणालियों पर यह पहले से ही हास्यास्पद रूप से उच्च सेट है और इसे बदला नहीं जाना चाहिए। 18446744073692774399उबंटू 18.04 पर मेरा डिफ़ॉल्ट रूप से सेट है ।
कार्ल जुलाफ

30

विनी के महान जवाब में जोड़ना,

अगर कोई भी आपके सेटअप में पोस्टग्रैसेक्.कॉन्फ़ फाइल लोकेशन नहीं खोज पा रहा है, तो आप हमेशा पोस्टग्रैजेस से ही पूछ सकते हैं।

SHOW config_file;

मुझे बदलने के लिए max_connections ने अकेले ही ट्रिक बनाई।


2
धन्यवाद। उबंटू 18.04 में यह है/etc/postgresql/11/main/postgresql.conf
gies0r

1

परिवर्तन var_connections चर को postgresql.conf फ़ाइल में स्थित / var / lib / pgsql / data या usr / local / pgsql / data /


2
क्यों pg_hba.conf? यह कनेक्शन की संख्या के बारे में कोई पैरामीटर नहीं है, केवल कैसे कनेक्ट करें। दूसरी ओर postgresql.conf .... लेकिन सैकड़ों कनेक्शन एक बुरा विचार है, ऐसा न करें, कनेक्शन पूल का उपयोग करें या प्रदर्शन के मुद्दों से पीड़ित हों। PostgreSQL 8.3 कई वर्षों के लिए ईओएल है, कृपया अप टू डेट संस्करण का उपयोग करें।
फ्रैंक हाइकेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.