pg_dump और ERROR: टोस्ट मान के लिए लापता नंबर 0


10

मैं PostgreSQL 8.4.15 का उपयोग कर रहा हूं। pg_dumpडेटाबेस बैकअप के लिए दौड़ते समय , मुझे निम्नलिखित त्रुटि मिली:

pg_dump: SQL command failed
pg_dump: Error message from server: ERROR:  missing chunk number 0 for toast value 123456789 in pg_toast_987654321
pg_dump: The command was: COPY public.my_table (id, .... all the columns ...)

इस त्रुटि संदेश की खोज करते समय, मुझे कुछ संदर्भ ( यहां और यहां ) मिले, जिन्होंने तालिका को फिर से लिखने का सुझाव दिया। (इन चर्चाओं में, pg_classसही pg_toast_XXXXXXमान ज्ञात करने के लिए तालिका को उद्धृत करने का एक संदर्भ था , लेकिन ऐसा लगता था कि ऐसा इसलिए था क्योंकि यह उनके त्रुटि संदेशों में प्रदर्शित नहीं हुआ था। मैंने इस भाग को छोड़ दिया क्योंकि मेरे पास त्रुटि संदेश में प्रदर्शित मूल्य था। । मुझे लगता है कि यह PostgreSQL के बाद के संस्करण के कारण एक सुविधा हो सकती है।)

मैंने निम्नलिखित भाग किया:

REINDEX table pg_toast.pg_toast_987654321;
VACUUM ANALYZE my_table;

अब मैं pg_dumpत्रुटियों के बिना उपयोग करने में सक्षम हूं ।

क्या है pg_toastऔर इन आदेशों वास्तव में क्या किया? क्या ये केवल साधारण सफाई के बारे में हैं या उन्हें उस तालिका में कुछ पंक्तियों से छुटकारा मिल सकता है? पहली बार में समस्या का कारण क्या हो सकता है?

इस तालिका में लगभग 300000 पंक्तियाँ हैं, लेकिन मुझे उम्मीद है कि पिछली सफल बैकअप के बाद से लगभग 250 नई पंक्तियाँ होंगी (यह तालिका केवल INSERT / SELECT के लिए उपयोग की जाती है, कोई अद्यतन नहीं है)।


मुझे यह विचार मिला है । क्या आप देख सकते हैं कि क्या आपका मामला समान है?
dezso

जवाबों:


6

यह देखते हुए कि आपने जो किया था वह एक हिरन का बच्चा था, संभवतः ऐसा क्या हुआ था कि यह तालिका में टोस्टेड मानों का पता लगाने की कोशिश करने के लिए एक इंडेक्स स्कैन का उपयोग किया गया था और एक को नहीं खोज सका। यह एक दूषित सूचकांक की तरह लगता है। वैक्यूम विश्लेषण तालिका को बदल देता है लेकिन रेनडेक्स नहीं करता है और परिवर्तन बहुत मामूली हैं।

इस बारे में सोचने का तरीका यह है कि टोस्टेड विशेषताएँ वास्तव में आकार में लगभग 4k के विखंडू में टूट जाती हैं और इन्हें पंक्तियों में संग्रहीत किया जाता है। उन्हें क्वेरी समय पर मुख्य पंक्ति के साथ देखा और सॉर्ट किया गया / पुन: संयोजित किया गया। ऐसा लगता है कि यहां उपयोग किए गए एक सूचकांक को दूषित कर दिया गया था और इसलिए रेनडेक्स ने समस्या को हल किया।

मैंने पाया है कि दूषित सूचकांक आमतौर पर एक संकेत है कि सर्वर के साथ कुछ ठीक नहीं है। यह सुनिश्चित करने के लिए अच्छा है और सुनिश्चित करें कि मेमोरी, सीपीयू और हार्ड ड्राइव सभी खुश हैं और समस्याओं की रिपोर्ट नहीं कर रहे हैं। मैंने सर्वरों को ओवरहेटिंग को विशेष रूप से सूचकांक भ्रष्टाचार के लिए खतरा माना है और यदि सूचकांक भ्रष्ट हो सकते हैं तो डेटा को भी भ्रष्ट होने की चिंता करनी होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.