pg_dump และข้อผิดพลาด: ไม่มี chunk number 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และสิ่งที่ไม่คำสั่งเหล่านี้จริงทำอย่างไร สิ่งเหล่านี้เกี่ยวกับการล้างข้อมูลอย่างง่ายหรือพวกเขาสามารถกำจัดแถวบางส่วนในตารางนั้นได้หรือไม่? สิ่งที่อาจทำให้เกิดปัญหาตั้งแต่แรก?

มีประมาณ 300,000 แถวในตารางนี้ แต่ฉันคาดว่าจะมีแถวใหม่ประมาณ 250 แถวเท่านั้นนับตั้งแต่การสำรองข้อมูลที่ประสบความสำเร็จก่อนหน้านี้ (ตารางนี้ใช้สำหรับ INSERT / SELECT เท่านั้นไม่มีการอัปเดต)


ฉันพบแนวคิดนี้แล้ว คุณสามารถตรวจสอบว่ากรณีของคุณเหมือนกันหรือไม่
dezso

สิ่งนี้อาจช่วยstackoverflow.com/questions/47533639/…
papanito

คำตอบ:


6

ระบุว่าสิ่งที่คุณทำคือการทำดัชนีใหม่สิ่งที่อาจเกิดขึ้นคือมันใช้การสแกนดัชนีเพื่อพยายามค้นหาค่าที่ได้จากการปิ้งในตารางและไม่สามารถหาได้ ดูเหมือนว่าดัชนีที่เสียหาย การวิเคราะห์สูญญากาศทำการเปลี่ยนแปลงตาราง แต่การทำดัชนีไม่ใหม่และการเปลี่ยนแปลงนั้นเล็กน้อยมาก

วิธีคิดเกี่ยวกับสิ่งนี้คือคุณลักษณะของขนมปังปิ้งจริง ๆ แล้วแบ่งออกเป็นชิ้น ๆ ขนาดประมาณ 4k และสิ่งเหล่านี้ถูกเก็บไว้ในแถว พวกเขาจะค้นหาและเรียงลำดับ / เชื่อมต่อใหม่กับแถวหลักในเวลาสอบถาม ดูเหมือนว่าดัชนีที่ใช้ในที่นี้เสียหายและ reindex สามารถแก้ไขปัญหาได้

ฉันพบว่าดัชนีที่เสียหายมักเป็นสัญญาณว่ามีบางอย่างที่ไม่ดีกับเซิร์ฟเวอร์ เป็นการดีที่จะตรวจสอบและตรวจสอบให้แน่ใจว่าหน่วยความจำซีพียูและฮาร์ดไดรฟ์มีความสุขและไม่รายงานปัญหา ฉันพบว่าเซิร์ฟเวอร์ที่มีความร้อนสูงเกินไปโดยเฉพาะอย่างยิ่งมีแนวโน้มที่จะเกิดความเสียหายของดัชนีและหากดัชนีสามารถได้รับความเสียหายก็ต้องกังวลเกี่ยวกับข้อมูลที่เสียหายเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.