2009-12-01 14 views
19

मैं अपने पोस्टग्रेएसक्यूएल डेटाबेस सर्वर को स्मृति से चलाना चाहता हूं। कारण यह है कि मेरे नए सर्वर पर, मेरे पास 24 जीबी मेमोरी है, और शायद ही इसका उपयोग किया जाता है।मेमोरी डेटाबेस में PostgreSQL

मैं जानता हूँ कि मैं एक रैमडिस्क बनाने के लिए इस आदेश को चला सकते हैं:

mdmfs -s 1024m md2 /mnt 

और मैं सैद्धांतिक रूप से PostgreSQL दुकान अपने डेटा वहाँ हो सकता था। लेकिन इसके साथ समस्या यह है कि यदि सर्वर क्रैश या रीबूट करता है, तो डेटा समाप्त हो जाएगा।

असल में, मैं डेटाबेस को हर समय स्मृति में लोड करना चाहता हूं ताकि प्रत्येक रिकॉर्ड को पढ़ने के लिए हार्ड डिस्क ड्राइव पर जाना पड़े, क्योंकि मेरे पास स्मृति की टोन है और चूंकि स्मृति हार्ड डिस्क से तेज़ है ड्राइव।

क्या ऐसा करने का कोई तरीका है जबकि पोस्टग्रेएसक्यूएल डिस्क पर लिखता है, इसलिए सर्वर डाउन होने पर मुझे कोई डेटा नहीं खोता है? या स्मृति में सभी डेटा कैश करने का कोई तरीका है?

+0

क्या आप मापते हैं कि पोस्टग्रेस्क्ल द्वारा 24 गीगाबाइट्स का लगभग कुछ भी उपयोग नहीं किया जाता है? – tuinstoel

+0

चूंकि मेमोरी डिस्क से तेज़ी से तेज है, इसलिए यह कुछ गति होगी लेकिन चूंकि पोस्टग्रेएसक्यूएल को स्मृति में चलाने के लिए डिज़ाइन नहीं किया गया है, इसलिए गति की अपेक्षा अपेक्षाकृत बड़ी नहीं हो सकती है। उदाहरण के लिए PostgreSQL अपनी मेमोरी को लगातार स्टोरेज (सामान्य रूप से डिस्क, इस मामले में मेमोरी) में फ्लश करने का प्रयास करेगा, _Main मेमोरी डेटाबेस सिस्टम देखें: Gracia-Molina और केनेथ सालेम द्वारा एक सिंहावलोकन_, [यहां मेरे नोट्स हैं] (https: // इस पेपर के docs.google.com/document/d/1k9N8UNvCVM484P8xKSAF8Su8UnNKAt3D8oWM-aFYsK8/edit)। – user454322

उत्तर

3

मुझे विश्वास करना है कि पोस्टग्रेस सर्वर में उपलब्ध रैम का पूर्ण लाभ लेने के लिए इस तरह से लिखा गया है। जैसा कि आपने अभी अनुमान लगाया है, पोस्टग्रेस के बाहर ऐसा करने का कोई विश्वसनीय तरीका नहीं है।

पोस्टग्रेज़ के भीतर, लेनदेन आश्वासन देते हैं कि सभी परिचालन परमाणु हैं, इसलिए यदि आप पोस्टग्रेज़ डेटाबेस पर लिखते समय पावर डाउन हो जाते हैं, तो आप केवल उस विशेष ऑपरेशन को खो देंगे, न कि संपूर्ण डेटाबेस।

+0

http://www.postgresql.org/docs/8.4/static/spi-memory.html –

+2

मुझे लगता है कि सवाल क्या पूछ रहा है, एक लेनदेन की परमाणु प्रकृति को बंद करने के बाद रमडिस्क की दृढ़ता से संबंधित है postgres। – Kuberchaun

+0

@ जस्ट बॉब: यह प्रश्न तीन साल से अधिक पुराना है, और सबसे ज्यादा वोट दिया गया जवाब "Google इसे" कहता है। अगर आपको लगता है कि आप बेहतर कर सकते हैं तो जवाब पोस्ट करें (जो बहुत कठिन नहीं होना चाहिए)। रचनात्मक इनपुट के लिए –

6

क्या आपने Server Configuration मैनुअल अध्याय देखा है? इसे जांचें, फिर Google postgresql memory tuning पर जाएं।

+1

+1: shared_buffers आपका (ठीक है, ओपी) दोस्त – araqnid

1

उत्तर कैशिंग है। सर्वर में मेमोरी जोड़ने में देखें, फिर मेमोरी उपयोग को अधिकतम करने के लिए PostgreSQL को ट्यून करना। साथ ही, फ़ाइल सिस्टम कैश इसके साथ मदद करेगा, इसे स्वचालित रूप से कुछ कर रहा है। आप प्रदर्शन को तेज करने में सक्षम होंगे, जैसे कि यह पहली हिट को छोड़कर स्मृति में था, जबकि इसे स्वयं प्रबंधित नहीं किया जा रहा था, और भौतिक स्मृति से डेटाबेस को बड़ा करने में सक्षम होना।

8

अब मैं स्ट्रीमिंग प्रतिकृति का उपयोग कर रहा हूं जो एसिंक है। इसका मतलब है कि मेरा मास्टर पारंपरिक डिस्क का उपयोग करते हुए अलग स्लेव उदाहरण के साथ स्मृति में सभी को चला सकता है।

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

+2

यह सिंक्रोनस प्रतिकृति के साथ अब और भी संभव है। ओपी क्या करना चाहते हैं। – plundra

+0

यदि तुल्यकालिक प्रतिकृति का उपयोग किया जाता है, तो यह स्मृति फ़ाइल सिस्टम पर दूसरे के लिए होना चाहिए, अन्यथा प्रदर्शन लाभ नहीं होंगे। _ सिंक्रोनस प्रतिकृति का अनुरोध करते समय, एक लिखने के लेनदेन की प्रत्येक प्रतिबद्धता तब तक प्रतीक्षा करेगी जब तक पुष्टि प्राप्त न हो कि प्रतिबद्धता प्राथमिक और स्टैंडबाय सर्वर दोनों की डिस्क पर लेनदेन लॉग को लिखी गई है। Https://www.postgresql.org/ डॉक्स/9.4/स्थिर/वार्म standby.html # तुल्यकालिक प्रतिकृति – user454322

संबंधित मुद्दे