PostgreSQL: TRUNCATE के बाद डिस्क स्थान जारी नहीं किया गया


12

मेरे पास TRUNCATEएक विशाल (~ 120Gb) टेबल है जिसे कहा जाता है files:

TRUNCATE files;
VACUUM FULL files;

तालिका का आकार 0 है, लेकिन कोई डिस्क स्थान जारी नहीं किया गया था। किसी भी विचार कैसे मेरी खो डिस्क स्थान को पुनः प्राप्त करने के लिए?

अद्यतन: डिस्क स्थान मेरी तरफ से बिना किसी कार्रवाई के ~ 12 घंटे के बाद जारी किया गया था। मैं Ubuntu 8.04 सर्वर का उपयोग करता हूं।


मैं "वैक्युम इट!" सुझाने वाला था, लेकिन आपने अभी-अभी विचार किया है, मैं आपको यह सलाह दूंगा कि आप किसी भी पीजी-हैकर्स या पीजी-परफॉरमेंस लिस्ट (और थ्रेड या उत्तर को एक बार मिलाने के बाद वापस ले लें) एक)।
डेनिस डे बर्नार्डी

क्या यह लिंक ( postgresql.1045698.n5.nabble.com/… ) आपके लिए कोई सलाह देता है? हो सकता है कि अभी भी मेज या इसी तरह की कोई चीज पहुंच रही हो।
DrColossos

@DrColossos: मैंने स्रोत में एक टिप्पणी (एक टिप्पणी जो मुझे अभी नहीं मिल सकती है) पढ़ी, जिसमें कहा गया कि पोस्टग्रेज़क्यूएल ने उन सभी कनेक्शनों को अधिसूचित किया जो एक ट्रंकट जगह लेने वाले थे, और इसने आवश्यक संसाधनों को लॉक कर दिया। (तालिका, अनुक्रमणिका, अनुक्रम और टोस्ट टेबल सहित कई हैं।) मुझे पूरा यकीन है कि मुझे ExecuteTruncate () के माध्यम से ट्रेस करके पहले टिप्पणी मिली, लेकिन मैं इसके बारे में 100% सकारात्मक नहीं हूं।
माइक शेरिल 'कैट रिकॉल'

जवाबों:


12

स्रोत में टिप्पणियों के अनुसार , truncateएक नई, खाली भंडारण फ़ाइल बनाता है, और प्रतिबद्ध समय में पुरानी भंडारण फ़ाइल को हटा देता है। (डॉक्स का सुझाव है कि "स्टोरेज फाइल" सिर्फ एक फाइल है जहां तक ​​ओएस का संबंध है, लेकिन मुझे शब्दावली में गलतफहमी हो सकती है।)

रिलेशन के लिए एक नई खाली स्टोरेज फ़ाइल बनाएं, और इसे relfilenode मान के रूप में असाइन करें। पुरानी संग्रहण फ़ाइल को हटाने के लिए निर्धारित किया गया है।

चूँकि यह किसी फ़ाइल को हटाने के लिए प्रतीत होता है, मैं कुछ मामलों की कल्पना कर सकता हूँ जिनमें अंतर्निहित ऑपरेटिंग सिस्टम उस स्थान को तुरंत मुक्त नहीं कर सकता है। मैं कल्पना करता हूं कि कुछ मामलों में भंडारण फ़ाइल विंडोज के तहत रीसाइक्लिंग बिन में समाप्त हो सकती है, उदाहरण के लिए। लेकिन मेरे मामले में, PostgreSQL 9.something के तहत एक टेबल को काटकर तुरंत विंडोज के तहत फ्रीस्पेस को बढ़ा दिया गया।

वाल लॉग में ट्रंकेशन भी दर्ज किया गया है। मुझे नहीं पता कि इसका कितना असर हो सकता है।


2
यह अनुमान लगाने योग्य है कि एक और बैकएंड प्रक्रिया में अभी भी फ़ाइल डिस्क्रिप्टर के पास फ़ाइल खुली है। यदि यह फिर से होता है, तो मैं अन्य सभी बैकएंड प्रक्रियाओं को समाप्त करने की कोशिश करूंगा, बस यह देखने के लिए कि क्या इससे कोई फर्क पड़ता है।
पीटर आइजेंट्राट

मुझे पूरा यकीन है कि मैंने पढ़ा है कि ExecuteTruncate () माना जाता है कि ऐसा नहीं हो सकता है। पुराने भंडारण फ़ाइल को हटाने के लिए आवश्यक संसाधनों को लॉक करने का सभी हिस्सा। लेकिन मुझे नहीं पता कि मुझे वह स्रोत कहां से मिला। मैं इसे ऑनलाइन ब्राउज़ कर रहा हूं; इस तरह से खो जाना आसान है।
माइक शेरिल 'कैट रिकॉल'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.