2013-10-22 4 views
5

मेरे पास पोस्टब्रेएसक्यूएल 9.2 उबंटू पर चल रहा है। ऑटोवाक्यूम प्रक्रिया सर्वर पर चल रही है।postgresql autovacuum काम नहीं कर रहा है हालांकि प्रक्रिया चल रही है

डेटाबेस में भारी भार, 1000 के अतिरिक्त और 100 हटाने के दैनिक हैं और फिर भी ऐसा लगता है कि ऑटोवाक्यूम फायरिंग नहीं कर रहा है।

लॉग में वैक्यूम से संबंधित कुछ भी नहीं है।

कर ps -ef | grep -i vacuum

पैदा करता है: postgres 1406 1130 0 Oct13 00:00:14 postgres: autovacuum launcher process

क्वेरी SELECT last_autovacuum , last_autoanalyze FROM pg_stat_user_tables; रनिंग पिछले autovacuum स्तंभ में कोई रिकॉर्ड है, और suto_analyze कॉलम में 2 entrys पैदा करता है।

postgresql.conf की उचित अनुभाग है:

#------------------------------------------------------------------------------ 
# AUTOVACUUM PARAMETERS 
#------------------------------------------------------------------------------ 

autovacuum = on   # Enable autovacuum subprocess? 'on' 
        # requires track_counts to also be on. 
log_autovacuum_min_duration = 250 # -1 disables, 0 logs all actions and 
        # their durations, > 0 logs only 
        # actions running at least this number 
        # of milliseconds. 
autovacuum_max_workers = 3  # max number of autovacuum subprocesses 
        # (change requires restart) 
#autovacuum_naptime = 1min  # time between autovacuum runs 
autovacuum_vacuum_threshold = 128 # min number of row updates before 
        # vacuum 
autovacuum_analyze_threshold = 128 # min number of row updates before 
        # analyze 
#autovacuum_vacuum_scale_factor = 0.2 # fraction of table size before vacuum 
#autovacuum_analyze_scale_factor = 0.1 # fraction of table size before analyze 
#autovacuum_freeze_max_age = 200000000 # maximum XID age before forced vacuum 
        # (change requires restart) 
#autovacuum_vacuum_cost_delay = 20ms # default vacuum cost delay for 
        # autovacuum, in milliseconds; 
        # -1 means use vacuum_cost_delay 
#autovacuum_vacuum_cost_limit = -1 # default vacuum cost limit for 
        # autovacuum, -1 means use 
        # vacuum_cost_limit 

किसी भी विचार?

+0

देखें http://www.postgresql.org/docs/9.2/static/monitoring-stats.html last_autovacuum - पिछली बार जिस पर इस तालिका autovacuum द्वारा वैक्यूम गया था डेमॉन। मुझे लगता है कि यह autovaccuum खत्म करने का timestemp है। बस अगर डेमॉन उच्च भार उत्पन्न करता है तो यह संभवतः वैसे भी चल रहा है। कमांड लाइन से वैक्यूम को SQL कमांड के रूप में चलाने के लिए यह देखने के लिए कि प्रत्येक तालिका पर वैक्यूम कितना समय चलता है। –

+0

"1000 के अतिरिक्त और 100 हटाए जाने की कमी" उतनी ही अधिक गतिविधि नहीं है। क्या आपके पास टेबल में ब्लोट है? क्या n_dead_tup सुझाव देता है कि वैक्यूमिंग वास्तव में किसी भी टेबल के लिए है? हो सकता है कि वैक्यूमिंग सिर्फ आपके लिए अक्सर जरूरी नहीं है। लॉग_autovacuum_min_duration = 0 को सेट करने से लॉग पर अधिक सामान मिलना चाहिए, हालांकि शायद यह साबित करने के लिए पर्याप्त नहीं है कि यह अच्छी तरह से काम कर रहा है। Suto_analyze क्या है? – jjanes

उत्तर

6

उद्धृत विन्यास में प्रासंगिक प्रविष्टि शायद है:

autovacuum_vacuum_scale_factor = 0.2

यह डिफ़ॉल्ट के साथ

, यह सामान्य है कि autovacuum एक मेज छोड़ देता है अगर इसकी पंक्तियों की 20% से कम किया गया है हटाया गया या अपडेट किया गया (या autovacuum_vacuum_threshold पंक्तियों से कम लेकिन 128 पर जो इससे कोई फर्क नहीं पड़ता)।

autovacuum_vacuum_scale_factor (चल बिन्दु)

निर्णय लेते समय एक निर्वात को गति प्रदान करने autovacuum_vacuum_threshold में जोड़ने के लिए तालिका आकार का एक अंश निर्दिष्ट करता है:

documentation में अपनी परिभाषा को देखें। डिफ़ॉल्ट 0.2 (तालिका आकार का 20%) है। यह पैरामीटर केवल postgresql.conf फ़ाइल में या सर्वर कमांड लाइन पर सेट किया जा सकता है। यह सेटिंग पैरामीटर को बदलकर अलग-अलग तालिकाओं के लिए सेटिंग ओवरराइड की जा सकती है।

यदि आप डिफ़ॉल्ट पसंद नहीं करते हैं तो ऑटोवाक्यूम कुछ टेबल को संसाधित करने के लिए, आप मामले के आधार पर इस पैरामीटर को कम कर सकते हैं। उदाहरण 1% से कम यह स्थापित करने के लिए के लिए:

ALTER TABLE tablename SET (autovacuum_vacuum_scale_factor=0.01); 
संबंधित मुद्दे