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

रेल 4 में अपग्रेड करने के बाद पोस्टग्रेस्क्ल सर्वर पर मेमोरी लीक हो जाती है

मुझे नहीं पता कि क्या बेहतर है:मेरे प्रश्न का उत्तर दें या इसे अपडेट करें ... इसलिए मैं उत्तर देना चुनता हूं। कृपया मुझे बताएं कि क्या अपडेट करना बेहतर है

हम अंत में समस्या का पता लगाते हैं। संस्करण 3.1 के बाद से, रेल ने User.find(id) जैसे सरल अनुरोध पर तैयार विवरण जोड़े। संस्करण 4.0, संघों पर अनुरोधों के लिए तैयार किए गए बयान जोड़े (has_many, संबंधित_to, has_one)। उदाहरण के लिए निम्नलिखित कोड:

class User
  has_many :adresses
end
user.addresses

अनुरोध उत्पन्न करें

SELECT "addresses".* FROM "addresses" WHERE "addresses"."user_id" = $1  [["user_id", 1]]

समस्या यह है कि रेल केवल विदेशी कुंजी (यहां user_id) के लिए तैयार कथन चर जोड़ते हैं। यदि आप

. जैसे कस्टम sql अनुरोध का उपयोग करते हैं
user.addresses.where("moved_at < ?", Time.now - 3.month) 

यह Move_at के लिए तैयार किए गए कथनों में एक चर नहीं जोड़ेगा। इसलिए जब भी अनुरोध कहा जाता है तो यह हर बार तैयार बयान उत्पन्न करता है। रेल तैयार किए गए बयानों को अधिकतम आकार 1000 के पूल के साथ संभालती है।

हालांकि, पोस्टग्रेस्क्ल तैयार बयान पूरे कनेक्शन में साझा नहीं किए जाते हैं, इसलिए एक या दो घंटे में प्रत्येक कनेक्शन में 1000 तैयार बयान होते हैं। उनमें से कुछ बहुत बड़े हैं। इससे पोस्टग्रेक्स्ल सर्वर पर बहुत अधिक मेमोरी खपत होती है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ST_GeomFromText (PostGIS) का उपयोग करने के लिए असंगत स्ट्रिंग्स से दोहरा सटीक मान प्राप्त करें

  2. मौजूदा auth.User डेटा को नए Django 1.5 कस्टम उपयोगकर्ता मॉडल में माइग्रेट करना?

  3. Postgres पर ग्राफ़ में सभी कनेक्टेड नोड्स (पंक्तियों) को कैसे गिनें?

  4. पोस्टग्रेज में टाइपओआरएम सरणी समर्थित नहीं है?

  5. ईवेंट प्रकार डेटा के आधार पर पंक्तियों को कैसे भरें