मैं SQLAlchemy उपयोग कर रहा हूँ (अभिव्यक्ति भाषा, नहीं पूर्ण ORM) MySQL के साथ और कुछ अप्रत्याशित धीमेपन का अनुभव। विशेष रूप से, कुछ ही समय में SQLAlchemy दस बार समय mysql कमांड लाइन से एक ही क्वेरी प्रदर्शन करते हुए बिताया से अधिक है द्वारा एक का चयन क्वेरी प्रदर्शन करते हुए बिताया। cprofile सेरूपरेखा SQL क्वेरी
आउटपुट:
ncalls tottime percall cumtime percall filename:lineno(function)
100 206.703 2.067 206.703 2.067 {method 'query' of '_mysql.connection' objects}
MySQL समय: 0.26 सेकंड
आम सहमति है कि वहाँ कुछ SQLAlchemy का उपयोग कर भूमि के ऊपर हो रहा है, लेकिन लगभग नहीं इतना। इस तरह के व्यवहार का कारण बनने के लिए कोई सुझाव?
प्रश्नों फार्म के आम तौर पर कर रहे हैं:
SELECT fieldnames.minage, fieldnames.maxage, fieldnames.race,
fieldnames.sex, sum(pop.population) AS pop, pop.zip5
FROM pop
INNER JOIN fieldnames ON fieldnames.fieldname = pop.fieldname_id
WHERE fieldnames.race IN ("White alone")
AND fieldnames.sex IN ("Female")
AND fieldnames.maxage >=101
AND fieldnames.minage <=107
GROUP BY fieldnames.minage, fieldnames.maxage
सुनिश्चित करें कि आप नहीं सीधे SQLAlchemy के बाद MySQL में क्वेरी को चला रहे हैं यह चलाता है, या परिणाम क्वेरी कैश में किया जाएगा। अगर स्मृति परोसता है, तो रीसेट कैच कैच सबकुछ साफ़ कर देता है। एसक्यूएल कीमिया के माध्यम से इतना अंतर नहीं होना चाहिए। – SteveMc
मैंने प्रश्न पोस्ट करने के ठीक बाद कैशिंग के बारे में सोचा। मैं कैश साफ़ करने के साथ खेल रहा हूं, लेकिन प्रारंभिक परिणाम इंगित करते हैं कि यह मुद्दा नहीं है। – AAmeliorant
नेटवर्क समस्याएं - यदि आप स्थानीय स्तर पर कमांड लाइन से MySQL चला रहे हैं लेकिन आपके एप्लिकेशन का रिमोट है, जो देरी पेश कर सकता है, लेकिन इसे बहुत सारे डेटा और/या धीमे नेटवर्क होना होगा। प्रोफाइलिंग जानकारी कुछ भी sqlalchemy कुछ भी नियम कर सकता है। – SteveMc