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

हेरोकू पर चल रहे रेल एप्लिकेशन पर रूबी को कैसे ट्यून करें जो उत्पादन स्तर हेरोकू पोस्टग्रेस का उपयोग करता है?

मैंने विशेष रूप से इस मुद्दे का पता लगा लिया।

सबसे पहले, दृश्य में मेरा कोड याद रखें:

<% @episodes.each do |t| %>
<% if !t.episode_image.blank? %>
<li><%= image_tag(t.episode_image.image(:thumb)) %></li>
<% end %>
<li><%= t.episode_urls.first.mas_path if !t.episode_urls.first.blank?%></li>
<li><%= t.title %></li>
<% end %>

यहां मुझे प्रत्येक एपिसोड episode_image मिल रहा है मेरे पुनरावृत्ति के अंदर। भले ही मैं includes का उपयोग कर रहा हूं मेरे नियंत्रक में, मेरी टेबल स्कीमा में एक बड़ी गलती थी। मेरे पास episode_id के लिए अनुक्रमणिका नहीं थी मेरे episode_images . में टेबल! . यह एक अत्यंत उच्च क्वेरी समय का कारण बन रहा था। मैंने इसे न्यू रेलिक की डेटाबेस रिपोर्ट का उपयोग करके पाया है। अन्य सभी क्वेरी समय 0.5ms या 2-3ms थे लेकिन episode.episode_image लगभग 6500ms पैदा कर रहा था!

मुझे क्वेरी समय और एप्लिकेशन निष्पादन के बीच संबंध के बारे में अधिक जानकारी नहीं है, लेकिन जैसा कि मैंने अपने episode_images में अनुक्रमणिका जोड़ी है तालिका, अब मैं स्पष्ट रूप से अंतर देख सकता हूं। यदि आपके पास अपना डेटाबेस स्कीमा ठीक से है, तो आपको शायद हेरोकू के माध्यम से स्केलिंग के साथ किसी भी समस्या का सामना नहीं करना पड़ेगा। लेकिन कोई भी डायनो खराब तरीके से तैयार किए गए डेटाबेस के साथ आपकी मदद नहीं कर सकता।

उन लोगों के लिए जो एक ही समस्या में भाग ले सकते हैं, मैं आपको हेरोकू वेब डायनोस, यूनिकॉर्न वर्कर्स और पोस्टग्रेस्क्ल सक्रिय कनेक्शन के बीच संबंधों के अपने कुछ निष्कर्षों के बारे में बताना चाहता हूं:

मूल रूप से, हरोकू आपको एक डायनो प्रदान करता है जो किसी प्रकार की एक छोटी वर्चुअल मशीन है जिसमें 1 कोर और 512 एमबी रैम है। उस छोटी सी वर्चुअल मशीन के अंदर, आपका यूनिकॉर्न सर्वर चलता है। यूनिकॉर्न में एक मास्टर प्रक्रिया और कार्यकर्ता प्रक्रियाएं हैं। आपके प्रत्येक यूनिकॉर्न कर्मचारी का आपके मौजूदा Postgresql सर्वर से अपना स्थायी कनेक्शन है (यह ) इसका मूल रूप से मतलब है कि जब आपके पास 3 यूनिकॉर्न श्रमिकों के साथ हरोकू डायनो होता है, तो आपके पास कम से कम 4 सक्रिय कनेक्शन होते हैं। यदि आपके पास 2 वेब डायनो हैं, तो आपके पास कम से कम 8 सक्रिय कनेक्शन हैं।

मान लें कि आपके पास 200 समवर्ती कनेक्शन सीमा के साथ एक मानक टेंगू पोस्टग्रेज है। यदि आपके पास खराब डीबी डिज़ाइन के साथ समस्याग्रस्त प्रश्न हैं तो न तो डीबी और न ही अधिक डायनो आपको कैश के बिना बचा सकते हैं ... यदि आपके पास लंबे समय से चल रहे प्रश्न हैं तो आपके पास कैशिंग के अलावा कोई विकल्प नहीं है, मुझे लगता है।

उपरोक्त सभी मेरे अपने निष्कर्ष हैं, यदि उनमें कुछ भी गलत है तो कृपया मुझे अपनी टिप्पणियों से चेतावनी दें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पूर्ण बाहरी जॉइन का उपयोग किए बिना कॉलम में सशर्त रूप से समूह कैसे करें

  2. PostgreSQL में पुनरावर्ती ट्रिगर रोकें

  3. हर 15 मिनट में एक पंक्ति के लिए एक विशाल समय श्रृंखला तालिका को कुशलतापूर्वक क्वेरी करना

  4. PostgreSQL में यूनिक्स टाइमस्टैम्प लौटाएं

  5. SQLAlchemy:कई तालिकाओं पर दिन के अनुसार समूह