में पोस्टग्रेस्क्ल प्रदर्शन और मेमोरी उपयोग ट्यूनिंग मैं मॉडल डेटाबेस के लिए पोस्टग्रेस्क्ल 9.4 का उपयोग करता हूं। मेरे तालिका इस तरह कुछ हद तक दिखता है:एक पायथन वर्कफ़्लो
CREATE TABLE table1 (
sid INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('table1_sid_seq'::regclass),
col1 INT,
col2 INT,
col3 JSONB);
मेरे अजगर 2.7 कार्यप्रवाह अक्सर इस तरह दिखता है:
curs.execute("SELECT sid, col1, col2 FROM table1")
data = curs.fetchall()
putback = []
for i in data:
result = do_something(i[1], i[2])
putback.append((sid, result))
del data
curs.execute("UPDATE table1
SET col3 = p.result
FROM unnest(%s) p(sid INT, result JSONB)
WHERE sid = p.sid", (putback,))
यह आमतौर पर बहुत अच्छी तरह से और कुशलता से काम करता है। हालांकि, बड़े प्रश्नों के लिए पोस्टग्रेस्क्ल मेमोरी उपयोग कभी-कभी UPDATE
कमांड के दौरान छत (> 50 जीबी) के माध्यम से जाएगा और मुझे विश्वास है कि यह ओएस एक्स द्वारा मारा जा रहा है, क्योंकि मुझे WARNING: terminating connection because of crash of another server process
मिलता है। मेरे मैकबुक प्रो में 16 जीबी रैम है और प्रश्न में पूछताछ में 11 एम लाइनें हैं जिनमें से प्रत्येक को लिखने के लिए डेटा के लगभग 100 गुण हैं।
मेरे postgresql.conf
:
default_statistics_target = 50
maintenance_work_mem = 512MB
constraint_exclusion = on
checkpoint_completion_target = 0.9
effective_cache_size = 4GB
work_mem = 256MB
wal_buffers = 16MB
checkpoint_segments = 128
shared_buffers = 1024MB
max_connections = 80
तो मुझे आश्चर्य है कि
- क्यों मेरी क्वेरी रैम कभी कभी अत्यधिक मात्रा में लेने वाली है?
- मैं मेमोरी उपयोग को कैसे नियंत्रित कर सकता हूं और अभी भी अच्छे प्रदर्शन की गारंटी दे सकता हूं?
- क्या पोस्टग्रेस्क्ल ट्यूनिंग के लिए कोई अच्छा दिशानिर्देश या उपकरण है?
अद्यतन:
मैं बहुत यकीन है कि @wildplasser मेरी समस्या इंगित कर रहा हूँ। टिप्पणियों में वह डेटा को डेटाबेस में पहले डंप करने का सुझाव देता है, और इसे वहां से अनपैक करता है। दुर्भाग्य से मैं यह नहीं समझ पाया कि उसके प्रस्ताव को कैसे कार्यान्वित किया जाए। अगर किसी को यह पता है कि ऐसा कैसे करना है, तो उनका जवाब खुशी से स्वीकार किया जाएगा।
1) आपका work_mem (बल्कि) उच्च है, और आप (शायद) में कोई टेबल संरचना नहीं है। 2) अपने डेटाबेस को डिज़ाइन करें 3) 2 बीटीडब्लू देखें: आपकी चयन क्वेरी * सभी * पंक्तियां लाती है (और मुझे आपकी अपडेट क्वेरी नहीं आती है।) – wildplasser
हां। आपकी तालिका एक स्प्रेडशीट की तरह लग सकती है, मुझे नहीं पता। हाँ। – wildplasser
बीटीडब्ल्यू: मैं आपके बारे में पाइथन सामान के बारे में एक शब्द नहीं समझता, लेकिन यह * लगता है * जैसे आप पूरे डीबी-टेबल को एक अजगर सेट या सरणी में चूस रहे हैं, और उसी तालिका को अपडेट करने के लिए उस (विस्फोटित रूप में) का उपयोग करें। – wildplasser