ฉันจำเป็นต้อง REINDEX และ VACUUM ตารางหลังจากลบแถวจำนวนมากหรือไม่


10

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

สามารถลบแถวได้นับล้านแถวและเราได้เรียกใช้ REINDEX ทุกครั้งหลังการลบ

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

เราใช้ PostgreSQL 8.2.3 ซึ่งฉันเชื่อว่าไม่อนุญาตการดูดฝุ่นอัตโนมัติ


2
คุณอาจต้องการพิจารณาการแบ่งพาร์ติชันโปรดดูpostgresql.org/docs/9.0/static/ddl-partitioning.html ; จากนั้นคุณสามารถวางพาร์ทิชันและหลีกเลี่ยงการดูดฝุ่น
alex

3
เวอร์ชัน 8.2.3 มี auto_vacuum ให้ดูคู่มือ แต่คุณควรอัปเดตโดยเร็ว รุ่น 8.2 ปัจจุบันคือ 8.2.17 คุณมีแพทช์ 14 อันรวมถึงแพตช์รักษาความปลอดภัยสองสามอัน การอัปเกรดเป็น 8.4 หรือแม้แต่ 9.0 เป็นแนวคิดที่ดีกว่า auto_vacuum ได้รับการปรับปรุง
Frank Heikens

คำตอบ:


13

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

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

หน้าเอกสารที่เกี่ยวข้องสำหรับ 8.2 อยู่ที่นี่ (ประจำอีกครั้งดัชนี)และนี่ (ดูดฝุ่นเป็นประจำ)

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