PostgreSQL अधिकतम प्रदर्शन SSD


19

मेरे पास एक विशाल PostgreSQL 9.3 डेटाबेस होगा जिसमें प्रति टेबल 100M से अधिक प्रविष्टियों के साथ कई टेबल हैं। यह डेटाबेस मूल रूप से केवल पढ़ने के लिए होगा (एक बार जब मैं सभी आवश्यक तालिकाओं को भर दूंगा और अनुक्रमित का निर्माण डीबी पर नहीं लिखूंगा) और एकल-उपयोगकर्ता पहुंच (स्थानीयहोस्ट से कई प्रश्नों को चलाएं और बेंचमार्क करें), क्योंकि डीबी का उपयोग किया जाएगा केवल अनुसंधान उद्देश्यों के लिए। क्वेरी हमेशा पूर्णांक DB फ़ील्ड पर JOIN का उपयोग करेंगे।

मैं शायद इस उद्देश्य के लिए SSD (256-512GB) खरीदूंगा। मैंने पहले एक DB के लिए SSD का उपयोग नहीं किया है, इसलिए क्या मुझे डरना चाहिए? क्या मैं पूरे DB को SSD या केवल अनुक्रमित पर रख सकता हूं? SSDs के लिए PostgreSQL को ट्यून करने के लिए क्या कोई विशेष सलाह / ट्यूटोरियल आवश्यक है? ध्यान दें, कि मेरे पास i7 और 32 जीबी रैम के साथ एक अच्छा वर्कस्टेशन है, इसलिए शायद आप वहां कुछ सलाह भी दे सकते हैं।

जवाबों:


16

तो क्या ऐसा कुछ है जिससे मुझे डरना चाहिए?

बैकअप नहीं है। किसी भी भंडारण उपकरण की तरह, यह मर सकता है। बैकअप रखें।

यदि डेटा लोड उम्र लेने वाला है, तो मैं डेटा लोड करने के बाद रीड-ओनली db का बैकअप ले लूंगा, इसे रोककर और कॉपी करके। इस तरह अगर कुछ गलत हो गया तो बाद में फिर से बनाना आसान होगा।

क्या मैं पूरे DB को SSD या केवल अनुक्रमित पर रख सकता हूं?

यदि यह फिट बैठता है, तो पूरे डीबी को स्टोर करें।

यदि ऐसा नहीं होता है, तो SSD पर एक टेबलस्पॉट डालें और इसे इंडेक्स को स्टोर करने के लिए उपयोग करें और जितने फिट होंगे उतने भारी टेबुल टेबल पर लगाएंगे।

SSDs के लिए PostgreSQL को ट्यून करने के लिए क्या कोई विशेष सलाह / ट्यूटोरियल आवश्यक है?

एसएसडी के अधिकांश लाभ ओएलटीपी राइट लोड के लिए हैं। रीड-ओनली लोड के लिए मुख्य लाभ तेजी से तलाश है, और स्लेडियर ने इसे कवर किया है।

आप effective_io_concurrency = 5इस तथ्य को प्रतिबिंबित करने के लिए सेट या कुछ करना चाह सकते हैं कि एसएसडी तेजी से, भारी रूप से पाइपलाइज्ड यादृच्छिक पढ़ सकता है ... लेकिन यह केवल बिटमैप इंडेक्स स्कैन और व्यवहार में ही प्रभाव डालता है।random_page_cost पहले से ही शामिल है।

केवल-पढ़ने के लिए लोड के लिए यह एक टन का अंतर नहीं करता है।

प्रारंभिक डेटा लोड के लिए, देखें:

ध्यान दें, कि मेरे पास i7 और 32 जीबी रैम के साथ एक अच्छा वर्कस्टेशन है, इसलिए शायद आप वहां कुछ सलाह भी दे सकते हैं।

maintenance_work_memडेटा लोड के लिए एक बड़ा सेट करें । मैं कम से कम उपयोग करता हूँ 8GB

work_memक्वेरी कार्य के लिए एक बड़ा सेट करें । उपयुक्त आकार क्वेरी जटिलता पर थोड़ा निर्भर करता है। शुरू करो 500MBऔर वहाँ से ऊपर जाओ।

checkpoint_segmentsप्रारंभिक डेटा लोड के लिए अपने (बड़े पैमाने पर) को टक्कर दें ।

VM overcommit को अक्षम करना याद रखें! (पोस्टग्रेसीक्यूएल मैनुअल देखें: http://www.postgresql.org/docs/current/static/k कर्नल- स्रोत )


22

SSDs के बारे में, मुख्य सलाह यह है कि 'random_page_cost' को 1 ('seq_page_cost' के बराबर) postgresql.conf में दूसरों की सामान्य सेटिंग के अलावा कम करें।


शायद दोनों मान 1.0 से छोटे होने चाहिए, जैसा कि postgresql.org/docs/11/… के अनुसार : "आप CPU मूल्य के सापेक्ष डिस्क I / O की लागत को बदलने के लिए दोनों मानों को एक साथ बढ़ा या कम कर सकते हैं, जो कि इसके द्वारा वर्णित हैं। निम्नलिखित पैरामीटर "।
किरिल बूलगिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.