Postgresql 8.3: प्रति रिसोर्स संसाधन की खपत प्रति क्वेरी


12

मैं Ubuntu 8.04 हार्डी पर भू-स्थानिक डेटा संग्रहीत करने के लिए PostgreSQL 8.3 + PostGIS 1.3 का उपयोग कर रहा हूं ।

PostGIS के इस विशेष संस्करण में buffer()बहुत जटिल खंडों की गणना करते समय एक बग होता है , जो क्वेरी को अधिक से अधिक मेमोरी लेने का कारण बनता है जब तक कि पूरी मशीन अटक न जाए।

मैं एक PostgreSQL तंत्र की तलाश कर सकता हूँ जो:

  • एक विशिष्ट क्वेरी द्वारा उपयोग की जाने वाली मेमोरी खपत (और शायद अन्य संसाधन) को सीमित करें।
  • उन प्रश्नों को स्वचालित रूप से रोकें जिनका निष्पादन समय एक निश्चित सीमा से अधिक है।

कोई विचार?


आप एक ऐसे संस्करण का उपयोग क्यों करते हैं जिसमें एक बग है जो आपको काटता है? एक संस्करण का उपयोग करें जो ठीक किया गया है और आपकी समस्या दूर हो गई है।
फ्रैंक हाइकेंस

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

जवाबों:


9

मेमोरी की खपत को सीमित करने के लिए, मुख्य कॉन्फ़िगरेशन पैरामीटर है work_mem। चूंकि यह प्रति ऑपरेशन पर लागू होता है, प्रति क्वेरी के अनुसार नहीं, आप बस इसे N पर सेट नहीं कर सकते हैं यदि आप N की स्मृति को खर्च करना चाहते हैं, लेकिन आपको वांछित परिणाम प्राप्त करने के लिए इसे थोड़ा मोड़ और ट्यून करना होगा।

हालाँकि, सर्वर कोड या एक्सटेंशन में बग्स और अन्य मेमोरी लीक के मामले में यह मदद नहीं करता है। आप नियंत्रित कर सकते हैं कि प्रक्रिया-विशिष्ट संसाधन सीमाओं के साथ नियंत्रित किया जाए ulimit। लेकिन अगर आप सीमा तक पहुंच जाते हैं और मेमोरी आवंटन विफल हो जाता है, तो आप क्या करना चाहते हैं? यह शायद बहुत अच्छी तरह से व्यवहार नहीं करेगा। बेहतर उन बग्स को ठीक करें या एक अलग संस्करण का उपयोग करें।

स्टॉप क्वेरी जिसका निष्पादन समय एक सीमा से गुज़रा है, पैरामीटर का उपयोग करें 'statement_timeout', जैसे,

SET statement_timeout TO '10min';

महान। मुझे इसकी ही खोज थी।
एडम मटन

2

Postgres Wiki पर एक नज़र :

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

आप प्रति उपयोगकर्ता या डेटाबेस पर प्रदर्शन सेटिंग्स समायोजित कर सकते हैं लेकिन कुछ प्रश्नों को निरस्त करने के लिए नहीं।


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