ट्यूनिंग postgresql बड़ी मात्रा में राम के लिए


29

मेरे पास दो समान सर्वर (हार्डवेयर के संदर्भ में) हैं, वे दोनों विंडोज़ सर्वर 2008 आर 2 के मानक इंस्टॉलेशन हैं, जिसमें न्यूनतम सॉफ़्टवेयर स्थापित है (मूल रूप से मेरा कोड और जेवीएम जैसे आवश्यक सामान)।

एक सर्वर पर, मैं sql सर्वर 2005 चला रहा हूं, दूसरे सर्वर पर postgresql 9.1। इन 2 सर्वरों के प्रदर्शन b / n में अंतर चौंका देने वाला है, यह postgresql पर इतना बुरा है कि मुझे अपने प्रारंभिक पर पछतावा हो रहा है "चलो sqgr सर्वर लाइसेंस के लिए भुगतान करने के बजाय अपने बॉस को" भाषण का भुगतान करने के बजाय Postgresql का उपयोग करें। हम एक ही कमांड के लिए 30 सेकंड बनाम 15 मिनट के अंतर के बारे में बात कर रहे हैं, और यह केवल यह एक कमांड नहीं है, यह किसी भी क्वेरी या कमांड को मैं इस पर फेंक रहा हूं। वे दोनों बहुत अधिक समान डेटा हैं (रिकॉर्ड अलग-अलग क्रम में डाले गए थे), और दोनों डेटाबेसों में सटीक एक ही संरचना / अनुक्रमित आदि हैं।

लेकिन मुझे उम्मीद है कि यह सिर्फ प्रदर्शन ट्यूनिंग की बात है। बात यह है, सर्वर पर सभी 32 gigs का उपयोग करते हुए sql सर्वर बहुत अधिक है, जबकि postgresl कुछ भी नहीं का उपयोग कर रहा है, निश्चित रूप से एक टमटम से कम नहीं है, हालांकि मैंने वास्तव में इसे ठीक तरीके से नहीं समझा है।

राम के 20+ गिग्स का उपयोग करने के लिए मुझे पोस्टग्रैस्कल कैसे मिलेगा? इन सर्वरों को विशेष रूप से इस डेटाबेस सामान के लिए बनाया गया था, इसलिए डेटाबेस और सहायक प्रक्रियाओं द्वारा उपयोग में नहीं आने वाला कोई भी राम मेरी राय में व्यर्थ है।


4
क्या आपने शुरुआती ट्यूनिंग के लिए कुछ भी बदल दिया? Step1: SET effective_cache_size=18G;(डिफ़ॉल्ट सेटिंग बेहद कम है) BTW: यह मानते हुए कि यह 64 बिट मशीन है (कोई PTE नहीं)

1
आप वास्तव में हमें बहुत मदद करने के लिए पर्याप्त नहीं दे रहे हैं। "यह धीमा है" के अलावा हम आपके डेटासेट के बारे में अधिक नहीं जानते हैं कि आप इसे कैसे एक्सेस कर रहे हैं, किस प्रकार की क्वेरी आम तौर पर धीरे-धीरे चल रही हैं, आपने अपने सर्वर को ट्यून (और संभवतः गलत-धुन) करने के लिए क्या किया है। बिल्ली, बहुत सारे कोर और मेमोरी चैनलों के साथ एक लाइनक्स मशीन पर, आप पोस्टग्रैस्केल स्थापित करने से बहुत पहले भद्दा प्रदर्शन प्राप्त कर सकते हैं। क्या आप सीपीयू या आईओ बाध्य हैं? आपके पास पहले से क्या गैर-डिफ़ॉल्ट सेटिंग्स हैं? किस प्रकार की क्वेरी धीमी है?
स्कॉट मार्लो

2
पोस्टग्रैस आपके उपयोग के तरीके के बारे में "राम का उपयोग" नहीं करता है। यह अपने कैशिंग के थोक के लिए OS फ़ाइल सिस्टम पेज कैश पर निर्भर करता है, इसलिए जब आप एक सिस्टम पर रैम का उपयोग देखते हैं, तो आप आमतौर पर OS बफ़र्स / कैश द्वारा उपयोग किए जाने वाले कई GB देखते हैं, और केवल कुछ का उपयोग करके बैकग्राउंड प्रक्रियाओं को पोस्ट करता है एमबीएस के कुछ दसियों।
debhur

1
इस लिंक को देखें: tekadempiere.blogspot.ae/2014/09/… और यहां से अपना संसाधन आधारित गोपनीय
Sajeev

संबंधित सवाल है, शायद ब्याज की: stackoverflow.com/questions/47311485/...
mountainclimber

जवाबों:


41

कई ट्विकेबल स्थिरांक हैं, जिनके माध्यम से आरंभ किया जाता है postgres.conf। सबसे महत्वपूर्ण हैं:

  • max_connections: समवर्ती सत्रों की संख्या
  • work_mem : इंटरमीडिएट रिजल्ट जैसे हैश टेबल, और सॉर्टिंग के लिए उपयोग की जाने वाली मेमोरी की अधिकतम मात्रा
  • shared_buffers 'पिन किए गए' बफर स्पेस को समर्पित मेमोरी की मात्रा।
  • effective_cache_size OS की LRU बफ़र्स द्वारा उपयोग की जाने वाली स्मृति की मात्रा।
  • random_page_cost : डिस्क की सापेक्ष लागत के लिए एक अनुमान।

max_connectionsजरूरत से ज्यादा सेट नहीं किया जाना चाहिए, बेकार होने पर भी लागत संसाधनों को कनेक्ट करना; ज्यादातर मामलों में एक कनेक्शन बाहर इंतजार करने की तुलना में अंदर इंतजार करने में अधिक समय बिताएगा। (संगामिति की कीमत पर) एक अच्छा नियम-का-सूत्र सूत्र है "स्पिंडल की संख्या + प्रोसेसर की संख्या + X"

work_memमुश्किल है: इसे हर उपकुंजी पर लागू किया जा सकता है, इसलिए 5 के साथ एक क्वेरी HASHJOINS5 * खर्च हो सकती है work_mem। और सबसे खराब स्थिति के लिए, आपको इस राशि का उपभोग करने वाले कई सत्रों के बारे में सोचना चाहिए (फिर से max_connectionsकम रखने का एक कारण )।

shared_buffers(IMHO) ओवररेटेड है। आम तौर पर यह सलाह दी जाती है कि इसे सभी उपलब्ध "मुक्त" मेमोरी में से लगभग 1/4 ... 1/2 पर सेट किया जाए, लेकिन मैं इसे कम रखता हूं, और effective_cache_sizeसभी उपलब्ध "मुक्त" मेमोरी में सेट करता हूं ।

random_page_costडिस्क पर तलाश + पढ़ने के लिए लागत है। यह सापेक्ष है sequential_disk_cost, जो 1. है। random_page_costआधुनिक मशीनों और नेटवर्क स्टोरेज के लिए डिफ़ॉल्ट (4) बहुत अधिक है, आम तौर पर इसे 2 से 1.x के बीच में उतारा जा सकता है। SSD डिस्क के लिए yould ने इसे 1.0 पर सेट किया है, क्योंकि SSDs पर मांग करना लगभग मुफ्त है।


अति उत्कृष्ट! मैंने कभी भी प्रभावी_केच_साइज़ के महत्व को नहीं देखा, हमेशा केवल साझा किए गए_बफर्स ​​के साथ मूर्ख बनाया। इससे वास्तव में बहुत फर्क पड़ा। मैं pgtune भी चलाता हूं और इसने 20GB 96 की सिफारिश की है जो कि shard_buffers के लिए उपयोग किया जाता है, लेकिन प्रभावी_cache_size के लिए 64GB। धन्यवाद!

1
एफडब्ल्यूआईडब्ल्यू, मैं इन और अन्य सेटिंग्स के माध्यम से चला गया, जो पोस्टग्रेज डॉक्स में सुझाए गए थे, और हमारे सर्वर के लिए एक विश्लेषण किया था
mlissner

उत्तर के लिए बहुत बहुत धन्यवाद। क्या मैं पूछ सकता हूं कि work_memजब max_connectionsडिफ़ॉल्ट 100 है और सर्वर रैम 32GB (समर्पित पोस्टग्रेज सर्वर) है तो अनुशंसित क्या है ? मुझे पता था कि दैनिक प्रश्नों के आधार पर मुझे खुद से यह धुन निकालने की जरूरत है। मैं सिर्फ सोच रहा हूं कि क्या आप मुझे "एक आकार सभी जवाब फिट बैठता है" मूल्य (या एक प्रारंभिक बिंदु मूल्य) बता सकते हैं। क्या 50MB बहुत बड़ा है? बहुत बहुत धन्यवाद।
sagon00

यह आपकी मशीन पर सामान्य समवर्ती गतिविधि पर निर्भर करता है। 50M (उनके 10..20M के शीर्ष पर) प्रत्येक 100 सत्र चाहते हैं । या, यह नहीं हो सकता है। इंप्रेशन प्राप्त करने के लिए, vmstat या शीर्ष की निगरानी करें। प्लस: यह आपकी क्वेरी (और अन्य) पर निर्भर करता है। बस योजनाओं को देखो।
Wildplasser

@wildplasser त्वरित उत्तर के लिए बहुत बहुत धन्यवाद। मुझे एक दिलचस्प वेबसाइट pgtune.leopard.in.ua मिली । मुझे लगता है कि मैं इसके सुझाव और धुन पर आधारित बिंदु के रूप में 40 एमबी का उपयोग करूंगा। चीयर्स।
sagon00

20

PostgreSQL कॉन्फ़िगरेशन को ट्यून करने में मदद करने के लिए pgtune का उपयोग करने पर विचार करें। PgFoundry से:

pgtune wimpy को डिफ़ॉल्ट postgresql.conf लेता है और डेटाबेस सर्वर को उस हार्डवेयर के रूप में शक्तिशाली होने के लिए विस्तारित करता है, जिस पर उसे तैनात किया जा रहा है

PostgreSQL का डिफ़ॉल्ट कॉन्फ़िगरेशन बहुत रूढ़िवादी है और यह उपकरण इस सटीक स्थिति में मदद करने के लिए है। प्रलेखन एक हल्का पढ़ने है और उपकरण का उपयोग करना बहुत सरल है।

ध्यान रखें कि pgtune के सटीक सुझावों का उपयोग करने की कोई आवश्यकता नहीं है। इसकी सेटिंग्स के साथ खेलना और कॉन्फिडेंस फाइल में होने वाले बदलावों को देखना आपको PostgreSQL के कॉन्फिगरेशन की बेहतर समझ देगा और इसे मैन्युअल रूप से कैसे ट्वीक किया जा सकता है।


8
Pgtune का अंतिम अपडेट 2009 में था, जो 5 साल पहले था और अभी भी गिनती है। मुझे आश्चर्य हो रहा है कि इसकी अभी भी 9.1-9.2-9.3 श्रृंखला के लिए मान्य है।


3

यदि प्रत्येक क्वेरी या कमांड धीरे चल रहा है तो मुझे संदेह है कि:

  • आपके द्वारा चलाए जाने वाले प्रत्येक प्रश्न के लिए डेटाबेस से जुड़ते हैं;
  • आपने किसी प्रकार की प्रमाणीकरण विधि को कॉन्फ़िगर किया है, जो काम नहीं करता है और यह आपके प्रश्नों को तब तक रोकती है जब तक कि यह विशेष प्रमाणीकरण विधि नहीं निकल जाती।

क्या आप हमें बता सकते हैं कि क्वेरी को चलाने में कितना समय लगता है select version()? यदि तत्काल (मेरे कार्यस्थान पर 0,16ms) होना चाहिए।


2

अगर हर प्रश्न यह है कि बहुत कुछ धीमा सर्वर या कुछ के साथ बहुत गलत है। मेरे अनुभव में प्रत्येक db में कुछ चीजें हैं जो दूसरे की तुलना में बेहतर है, लेकिन प्रदर्शन वार pgsql आसानी से mssql सर्वर के समान ही है।

तो, आप किस ओएस पर pgsql चला रहे हैं? क्या हार्डवेयर? आपने पहले से कौन सी सेटिंग बदली है? आपका डेटासेट कितना बड़ा है? खराब क्वेरी का एक उदाहरण और व्याख्या विश्लेषण का आउटपुट क्या है (इस तरह अपनी क्वेरी चलाएँ:

विश्लेषण का चयन करें का चयन करें ... शेष क्वेरी यहाँ ...;

आउटपुट को http://explain.depesz.com/ पर पोस्ट करें और यहां लिंक पोस्ट करें।


1
हां, प्रत्येक प्रश्न / आदेश धीरे-धीरे चल रहा है, और हां "कुछ" बहुत गलत है इसलिए मेरा प्रश्न है। मुद्दा यह है कि mssql सर्वर पर उपलब्ध रैम (इतना भारी कैशिंग) का पूरा उपयोग कर रहा है, जबकि psql नहीं है। मैं टिप्पणियों और सलाह की सराहना करता हूं, लेकिन आपने मेरे प्रश्न और विषय पंक्ति को स्वयं ही याद किया होगा ... मैं सिर्फ यह जानना चाहता हूं कि उपलब्ध राम का उपयोग करने के लिए psql कैसे प्राप्त करें; वर्तमान में दूसरों द्वारा सूचीबद्ध कुछ सुझावों की कोशिश कर रहा है ...
user85116

1
अपने RAM का उपयोग करना समस्या नहीं है। Postgresql अधिकांश कैशिंग करने के लिए OS पर निर्भर करता है। तो, यह सभी RAM का उपयोग करने की आवश्यकता नहीं है। फिर, आप मेरी बात से चूक गए। आप हमें आपकी मदद करने के लिए अनमोल दे रहे हैं। मैं जीने के लिए 5000 टीपीएस पोस्टग्रैक्स्ल क्लस्टर चलाता हूं। आप मेरी सलाह ले सकते हैं, या सोचते रह सकते हैं कि कैसे pgsql काम करता है और बहस करता है।
स्कॉट मारलो

@ user85116, कृपया स्कॉट को सुनें, हमारे पास पहले से ही MySQL के साथ एक वर्कफ़्लो है जो सुपर लेटेंसी पर निर्भर है, इसलिए वर्तमान में MySQL 64GB RAM का उपयोग कर रहा है ताकि उस क्वेरी को तेज़ी से किया जा सके, जबकि 2G पर प्राप्त किया जा सकता है और इसे केवल भौतिक विचारों के साथ पोस्टग्रेट किया जा सकता है। सभी डेटाबेस को रैम में कैशिंग करने से आपकी समस्या का समाधान नहीं होगा, यह सिर्फ इसे कम दिखाई देता है। यदि आपको DB संरचना में समान समस्याएं हैं, तो Postgres आपके लिए इसे ठीक नहीं करेंगे और न ही इसे छिपाने का प्रयास करेंगे।
कावर्र
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.