PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Heroku . पर प्यूमा क्लस्टर कॉन्फ़िगरेशन

<ब्लॉककोट>

ए) क्या मुझे यूनिकॉर्न की तरह पहले_फोर्क / आफ्टर_फोर्क कॉन्फ़िगरेशन की आवश्यकता है, क्योंकि क्लस्टर कार्यकर्ता फोर्क हैं?.

आम तौर पर नहीं, लेकिन चूंकि आप preload_app का उपयोग कर रहे हैं , हां। ऐप को प्रीलोड करने से एक इंस्टेंस ऊपर और चल रहा है और फिर श्रमिकों के लिए मेमोरी स्पेस फोर्क करता है; नतीजा यह है कि आपके प्रारंभकर्ता केवल एक बार दौड़ते हैं (संभवतः डीबी कनेक्शन आवंटित करना और ऐसे)। इस उदाहरण में, आपका on_worker_boot कोड उपयुक्त है। अगर आप preload_app का इस्तेमाल नहीं कर रहे हैं , तो प्रत्येक कार्यकर्ता खुद को बूट करता है, जिस स्थिति में एक इनिशियलाइज़र का उपयोग करना आपके जैसे कस्टम कनेक्शन को स्थापित करने के लिए आदर्श होगा। वास्तव में, बिना preload_app . के , आपका on_worker_boot ब्लॉक त्रुटि होगी क्योंकि उस समय ActiveRecord और मित्र भी लोड नहीं होते हैं।

<ब्लॉककोट>

बी) मैं अपने आवेदन के आधार पर अपनी थ्रेड गिनती को कैसे ट्यून करूं - इसे छोड़ने का क्या कारण होगा? / किन मामलों में यह महत्व देगा? क्या 0:16 पहले से ही अनुकूलित नहीं है?

Heroku (और मेरे परीक्षण) पर आप अपने min . का मिलान करने में सर्वश्रेष्ठ हैं /max धागे, max . के साथ <=DB_POOL सेटिंग। min थ्रेड्स आपके एप्लिकेशन को लोड में नहीं होने पर संसाधनों को स्पिन करने की अनुमति देता है, जो सर्वर पर संसाधनों को मुक्त करने के लिए सामान्य रूप से बहुत अच्छा है, लेकिन हेरोकू पर इसकी आवश्यकता कम होने की संभावना है; कि डायनो पहले से ही वेब अनुरोधों की सेवा के लिए समर्पित है, साथ ही उन्हें तैयार और तैयार भी कर सकता है। अपना max सेट करते समय धागे <=आपका DB_POOL पर्यावरण चर की आवश्यकता नहीं है, आप पूल में अपने सभी डेटाबेस कनेक्शन का उपभोग करने का जोखिम चलाते हैं, फिर आपके पास एक कनेक्शन चाहने वाला धागा है लेकिन इसे प्राप्त नहीं कर सकता है, और आप पुराने "ActiveRecord ::कनेक्शनटाइमआउट त्रुटि - नहीं कर सकते 5 सेकंड के भीतर डेटाबेस कनेक्शन प्राप्त करें।" त्रुटि। यह आपके आवेदन पर निर्भर करता है हालांकि, आपके पास max हो सकता है> DB_POOL और ठीक हो। मैं कहूंगा कि आपका DB_POOL कम से कम आपके min . के समान होना चाहिए थ्रेड्स मान, भले ही आपके कनेक्शन उत्सुकता से लोड न हों (5:5 थ्रेड्स 5 कनेक्शन नहीं खोलेंगे यदि आपका ऐप कभी भी डेटाबेस को हिट नहीं करता है)।

<ब्लॉककोट>

सी) हेरोकू डेटाबेस 500 कनेक्शन की अनुमति देता है। थ्रेड, वर्कर और डायनो काउंट के आधार पर DB_POOL का अच्छा मूल्य क्या होगा? - क्या समानांतर रूप से काम करते समय प्रत्येक थ्रेड प्रति कार्यकर्ता प्रति डायनो को एकमात्र डीबी कनेक्शन की आवश्यकता होती है?

प्रोडक्शन टियर 500 को स्पष्ट होने की अनुमति देता है :)

प्रत्येक थ्रेड प्रति कार्यकर्ता प्रति डायनो सकता एक कनेक्शन का उपभोग करें, इस पर निर्भर करता है कि क्या वे सभी एक ही समय में डेटाबेस तक पहुंचने का प्रयास कर रहे हैं। आमतौर पर कनेक्शन पूरा होने के बाद उनका पुन:उपयोग किया जाता है, लेकिन जैसा कि मैंने b) . में उल्लेख किया है , यदि आप थ्रेड अपने पूल से बड़े हैं तो आपका समय खराब हो सकता है। कनेक्शन का पुन:उपयोग किया जाएगा, यह सब ActiveRecord द्वारा नियंत्रित किया जाता है, लेकिन कभी-कभी आदर्श रूप से नहीं। कभी-कभी कनेक्शन निष्क्रिय हो जाते हैं, या मर जाते हैं, और इसीलिए मृत कनेक्शनों का पता लगाने और उन्हें पुनः प्राप्त करने के लिए रीपर को चालू करने का सुझाव दिया जाता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:कमांड लाइन के माध्यम से PostgreSQL डेटाबेस को छोड़ें

  2. क्वेरी में एक कॉलम को कई कॉलमों के साथ एकत्रित करें

  3. Windows मशीन पर Postgresql 11 चलाते समय त्रुटि का क्या कारण है?

  4. PostgreSQL शो टेबल समतुल्य (psql)

  5. PostgreSQL पर क्वेरी करने के लिए दोहरे उद्धरण को छोड़ना