मैंने विशेष रूप से इस मुद्दे का पता लगा लिया।
सबसे पहले, दृश्य में मेरा कोड याद रखें:
<% @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 समवर्ती कनेक्शन सीमा के साथ एक मानक टेंगू पोस्टग्रेज है। यदि आपके पास खराब डीबी डिज़ाइन के साथ समस्याग्रस्त प्रश्न हैं तो न तो डीबी और न ही अधिक डायनो आपको कैश के बिना बचा सकते हैं ... यदि आपके पास लंबे समय से चल रहे प्रश्न हैं तो आपके पास कैशिंग के अलावा कोई विकल्प नहीं है, मुझे लगता है।
उपरोक्त सभी मेरे अपने निष्कर्ष हैं, यदि उनमें कुछ भी गलत है तो कृपया मुझे अपनी टिप्पणियों से चेतावनी दें।