मैं विभिन्न भूमिकाओं वाली तालिकाओं वाले एक बड़े (कुछ सैकड़ों गिग्स) डेटाबेस का प्रबंधन करता हूं, उनमें से कुछ लाखों रिकॉर्ड रखते हैं। कुछ तालिकाओं में केवल बड़ी संख्या में आवेषण और हटाए जाते हैं, कुछ अन्य आवेषण और बड़ी संख्या में अपडेट होते हैं।
डेटाबेस 16 जीबी गीगाबाइट रैम के साथ एक डेबियन 6.0 amd64 सिस्टम पर PostgreSQL 8.4 पर चलता है।
यह सवाल कभी-कभी एक टेबल पर ऑटोवैक्यूम प्रक्रिया है, जिसे पूरा करने में बहुत लंबा समय (दिन) लगता है। मैं मोटे तौर पर बताना चाहता हूं कि किसी विशेष वैक्यूम कमांड को कितना समय लगेगा, यह तय करने में सक्षम होने के लिए कि इसे रद्द करना है या नहीं। इसके अलावा अगर वैक्यूम ऑपरेशन को स्थगित करने के लिए एक प्रगति सूचक था, तो यह वास्तव में मददगार होगा।
संपादित करें:
मैं बुलेट-प्रूफ समाधान की तलाश में नहीं हूं। मृत ट्यूल या आवश्यक I / O बाइट्स की संख्या पर बस एक मोटा संकेत तय करने के लिए पर्याप्त है। यह वास्तव में कष्टप्रद है कि कब, क्या VACUUM
होगा कोई सुराग नहीं है।
मैंने देखा है कि pg_catalog.pg_stat_all_tables
मृत टुपल्स की संख्या के लिए एक कॉलम है। इसलिए अनुमान लगाना संभव है, भले ही इसका मतलब है कि किसी को ANALYZE
पहले टेबल पर रखना होगा । दूसरी ओर, autovacuum_vacuum_threshold
और autovacuum_vacuum_scale_factor
सेटिंग्स अकेले साबित करती हैं कि पोस्टग्रेज खुद ही टेबल पर बदलाव की मात्रा के बारे में कुछ जानता है और शायद इसे डीबीए के हाथों में भी रखता है।
मुझे यकीन नहीं है कि किस क्वेरी को चलाना है, क्योंकि जब मैं दौड़ता VACUUM VERBOSE
हूं, तो मैं देखता हूं कि न केवल टेबल, बल्कि उन पर अनुक्रमित भी संसाधित किए जा रहे हैं।