बहुत सारे INSERTS और bytea अपडेट के लिए PostgreSQL का अनुकूलन करें


12

हमारे पास क्या है (सॉफ्टवेयर):

  • आधार विन्यास के साथ PostrgeSQL 9.3 (कोई परिवर्तन नहीं postgresql.conf)
  • विंडोज 7 64 बिट

हार्डवेयर:

  • इंटेल कोर i7-3770 3.9 Ghz
  • 32 जीबी रैम
  • WDC WD10EZRX-00L4HBAta ड्राइव (1000Gb, SATA III)

तो, हमें DB-aprox में लोड करना होगा। 100.000.000 पंक्तियाँ bytea कॉलम के साथ , और अधिक सरल 500.000.000 पंक्तियाँ ( LOB के बिना)। varchar1 टेबल पर 2 इंडेक्स हैं (13, 19 लंबाई के साथ) और 2 varcharटेबल पर 2 इंडेक्स (18, 10 लंबाई)। प्रत्येक तालिका के लिए आईडी पीढ़ी के अनुक्रम भी हैं।

अब तक ये ऑपरेशन 50 JDBC बैच के आकार के साथ 8 कनेक्शन के साथ कर रहे हैं। नीचे दी गई तस्वीर सिस्टम लोड को प्रदर्शित करती है: यह postgresqlप्रक्रियाओं पर शून्य-लोड है। लोड करने के 24 घंटों के बाद हमने केवल 10.000.000 पंक्तियाँ लोड की हैं जो बहुत धीमी गति से परिणाम है।

यहाँ छवि विवरण दर्ज करें

हम के PostrgreSQLप्रयोजनों में ट्यूनिंग विन्यास में मदद के लिए पूछ रहे हैं :

1) अल्ट्रा फास्ट डेटा की इस राशि को लोड करने के लिए, यह एक बार-केवल ऑपरेशन है, इसलिए यह अस्थायी कॉन्फ़िगरेशन हो सकता है

2) उत्पादन मोड के लिए इन 2 टेबलों में सेलेक्ट की संख्या को उनके अनुक्रमणिका में बिना सम्मिलित और बिना छांटे किए जाने के लिए।

जवाबों:


14

के लिए insertप्रदर्शन, देख PostgreSQL में प्रदर्शन डालने को तेज करने और PostgreSQL में थोक डालने

आप JDBC के लिए अपना समय बर्बाद कर रहे हैं insertPgJDBC insertबैचों के साथ उपयोगी कुछ भी नहीं करता है , यह सिर्फ प्रत्येक कथन को चलाता है<- यह अब नए PgJDBC संस्करणों में सच नहीं है, जो अब दौर-यात्रा के समय को काफी कम करने के लिए तैयार किए गए बयानों को बैच सकता है। लेकिन यह अभी भी बेहतर है:

COPYइसके बजाय का उपयोग करें ; PgJDBC बैच कॉपी और देखें CopyManager। समवर्ती लोडर की संख्या के लिए: डिस्क प्रति जोड़े के लिए लक्ष्य, यदि संचालन डिस्क I / O बाध्य है। आठ शायद सबसे ज्यादा आप चाहते हैं।

आपके "उत्पादन मोड" के लिए, मैं डेटा के नमूने को लोड करने, आपके द्वारा चलाए जा रहे प्रश्नों की स्थापना और explain analyzeप्रदर्शन की जांच करने के लिए उपयोग करने का सुझाव देता हूं । केवल परीक्षण उद्देश्यों के लिए, enable_विभिन्न योजना चयनों का पता लगाने के लिए पैरामेट्स का उपयोग करें । अपने सिस्टम के लिए उचित रूप से क्वेरी प्लानर लागत पैरामीटर ( random_page_costऔर seq_page_cost, effective_cache_sizeआदि) shared_buffersसेट करें, और सुनिश्चित करें कि उचित रूप से सेट किया गया है। auto_explainमॉड्यूल, log_min_duration_statementसेटिंग, pg_stat_statementsएक्सटेंशन आदि का उपयोग करते हुए, आप एक सिम्युलेटेड प्रोडक्शन वर्कलोड को मॉनिटर करना जारी रखें ।

विवरण के लिए, PostgreSQL उपयोगकर्ता पुस्तिका देखें। मेरा सुझाव है कि जब आप explain analyzeक्वेरी निष्पादन विवरण आदि के साथ अधिक ठोस समस्या रखते हैं, तो यहां वापस पॉपिंग करें ।


1
यह एक अमेजिंग जवाब है! धन्यवाद।
Jan Mares
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.