साझा मेमोरी के बारे में PostgreSQL को शिकायत है, लेकिन साझा मेमोरी ठीक लगती है


13

मैं एक तरह से गहन स्कीमा छोड़ने और पोस्टग्रेसीक्यूएल सर्वर बनाने पर प्रदर्शन कर रहा हूं, लेकिन अब शिकायत करता है: ..

WARNING:  out of shared memory
ERROR:  out of shared memory
HINT:  You might need to increase max_locks_per_transaction.

लेकिन समस्या बनी हुई है अगर PostgreSQL को बस फिर से शुरू किया जाता है service postgresql restart, मुझे संदेह है कि max_locks_per_transaction कुछ भी नहीं ट्यून करेगा।

मैं थोड़ा विवादास्पद हूं क्योंकि इस त्रुटि के लिए समस्या निवारण सूची मेरे लिए काम नहीं कर रही है।

अधिक जानकारी 1409291350: कुछ विवरण गायब हैं लेकिन मैं मुख्य SQL परिणाम रखता हूं।

postgres=# SELECT version();
PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2,
 64-bit

तथा:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:        14.04
Codename:       trusty

2
PostgreSQL संस्करण से SELECT version()? दिलचस्प समस्या ...
क्रेग रिंगर

2
"मुझे संदेह है कि max_locks_per_transaction कुछ भी ट्यून नहीं करेगा।" - उह, आप उस पर शक क्यों करेंगे? क्या आपने वास्तव में संकेत के सुझाव का पालन करने की कोशिश की है?
जोश कुपर्शमीद

क्या आपने वास्तव में संकेत के सुझाव का पालन करने की कोशिश की है? मैंने max_locks_per_transaction = 64 # min 10अभी तक /etc/postgresql/9.3/main/postgresql.conf में असहजता है।
48347

1
डिफ़ॉल्ट max_locks_per_transaction के साथ शुरू होने के लिए 64 है - उस लाइन को अनइंस्टॉल करना प्रभावी रूप से इसे नहीं बदलता है।
यील्डफैसलहुड

1
ओके ने प्रभावी रूप से 128 की वृद्धि की समस्या को हल किया , वास्तव में ऑपरेशन को जारी रखने की अनुमति दी।
48347

जवाबों:


11

गहन ड्रॉपिंग और बनाने के बारे में आपकी टिप्पणी और आपके द्वारा अधिकतम लेन-देन में वृद्धि के बारे में प्राप्त नोटिस, जिसे आप ड्रॉप कर रहे हैं और एक ही लेनदेन में कई ऑब्जेक्ट बना रहे हैं । उनमें से प्रत्येक एक लॉक में परिणाम देता है, जिसमें से प्रत्येक को थोड़ी मात्रा में साझा मेमोरी की आवश्यकता होती है। इस वजह से, max_locks_per_transaction उन लेन-देन की संख्या को सीमित करता है जिन्हें आप लेन-देन के भीतर रख सकते हैं (किसी भी एक लेन-देन को सभी साझा मेमोरी का उपयोग करने से रोकने के लिए)।

आप या तो उस सीमा को बढ़ा सकते हैं (मैं इसे बड़े पैमाने पर सेट करने के खिलाफ सिफारिश करूंगा या आप वास्तव में कुल साझा मेमोरी से बाहर चलने की एक अलग स्थिति में चलेंगे) या अपने ड्रॉप्स और लेनदेन के बैचों में या एक बूंद के रूप में बनाते हैं। / प्रति लेनदेन बनाएँ।

संपादित करें: जाहिरा तौर पर मैं इस बारे में गलत था कि कैसे max_locks_per_transaction काम करता है। दस्तावेज़ीकरण से, उपलब्ध कुल तालों की संख्या अधिकतम_लॉक_पर_सक्रियता * (अधिकतम_संपर्क + अधिकतम_प्रकाशित_प्रक्रिया) है - कोई भी लेन-देन अधिकतम_लक्स_पर_संक्रमण से अधिक हो सकता है, जब तक कि हर जगह आयोजित ताले की संख्या इस कुल मूल्य से कम हो।


मेरे वर्कफ़्लो में (1) स्कीमा एक्स को डंप करना, (2) एक और स्कीमा वाई को छोड़ना, और (3) स्कीमा नाम वाई पर एक्स को पुनर्स्थापित करना। जैसा कि मैंने बताया, आज तक मुझे इन गतिविधियों को करने में कई सप्ताह से अधिक हो गए हैं, और आज चरण (2) विफल हो रहा है। स्टेप (2) में मुख्य रूप से शामिल हैं DROP SCHEMA IF EXISTS public CASCADE; CREATE SCHEMA public, ये वाक्य हैं, चेतावनी, त्रुटि और बिंदु।
48347

64 से 128 तक अधिकतम तालों के दोहरीकरण ने वर्कफ़्लो को जारी रखने की अनुमति दी। आईवीटी को अभी तक सभी इंटर्न नहीं मिले हैं, लेकिन मुझे लगता है कि ड्रोप स्कीमा और क्रिएट स्कीमा वाक्यों के बीच प्रतिबद्ध होना एक समान राहत देने वाला प्रभाव होगा।
48347

अब मुझे लगता है कि कई दिनों में मुझे एक छोटी स्कीमा वृद्धि मिलती है, और यह मुद्दा उन छोटे स्कीमाओं में से एक से पूरी तरह मेल खाता है । एक सामान्य रणनीति के रूप में मुझे अब से HINTs के साथ अधिक से अधिक विचार करना होगा।
48347
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.