การจัดการกับพื้นที่ดิสก์เต็มใน postgresql


14

ฉันมี Django เว็บแอปพลิเคชันที่มีแบ็กเอนด์ postgresql 9.3.10 (อยู่ในระบบปฏิบัติการ Linux) ฉันพบข้อผิดพลาดของดิสก์เต็มแม้ว่าฉันจะพยายามตัดทอนตารางฉันก็พบข้อผิดพลาดในการเรียงลำดับ:

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

ฉันไม่สามารถเพิ่มพื้นที่ดิสก์เพิ่มเติมลงในเซิร์ฟเวอร์ได้อย่างง่ายดายและฉันจะไม่ลบสิ่งใดใน VM นี้ อย่างไรก็ตามมีหลายตารางที่เป็นตัวเลือกสำหรับการตัดทอน แต่ดูเหมือนว่าฉันไม่สามารถตัดทอนได้ในตอนนี้

ใครช่วยแนะนำฉันเกี่ยวกับสิ่งที่ฉันสามารถทำได้ที่นี่? นี่คือการตีเซิร์ฟเวอร์การผลิตของฉันอย่างหนักและฉันเป็น DBA โดยไม่ได้ตั้งใจที่นี่จึงนิ่งงันโดยสิ้นเชิง


คุณสามารถเรียกคืนบางพื้นที่ถ้าคุณสามารถ (ชั่วคราว) วางดัชนี ... ตัดทอนตารางแล้วสร้างใหม่
joanolo

คำตอบ:


9

เนื่องจาก PostgreSQL ต้องเขียน WAL ก่อนทำการเปลี่ยนแปลงใด ๆ ในตารางจึงจำเป็นต้องมีพื้นที่ว่างในดิสก์เพื่อที่จะลบสิ่งต่าง ๆ และปล่อยพื้นที่ดิสก์เพิ่มเติม

หากคุณปล่อยให้ดิสก์เต็มคุณจะไม่สามารถกู้คืนจากภายใน PostgreSQL แม้TRUNCATEยังต้องเขียนถึง WAL

ดังนั้นคุณต้องเพิ่มพื้นที่ว่างบนไดรฟ์ข้อมูลหรือขยายระดับเสียง หากไฟล์บันทึก PostgreSQL ของคุณอยู่ในpg_logไดเรกทอรีข้อมูลคุณสามารถลบไฟล์เหล่านั้นออกแล้วเริ่ม Pg ใหม่ได้อย่างปลอดภัย

ไม่ได้ลบหรือpg_xlog pg_clogสิ่งเหล่านี้ไม่ใช่บันทึกข้อผิดพลาดของเซิร์ฟเวอร์เป็นส่วนที่สำคัญของฐานข้อมูลบันทึกธุรกรรมและบันทึกการกระทำ


ทำไมTRUNCATEต้องเขียนถึงวอลและรายการนั้นใน WAL มีหน้าตาเป็นอย่างไร?
Evan Carroll

"การตัดปลายไม่ได้บันทึกข้อมูลเต็มรูปแบบเฉพาะความจริงที่ว่าการตัดปลายเกิดขึ้นเพื่อให้สามารถย้อนกลับได้ไฟล์ต้นแบบจะถูกเก็บไว้รอบ ๆ จนกว่าการทำธุรกรรมจะกระทำ" [แหล่งที่มา] ( postgresql.org/message-id/…ดังนั้นการตัดทอนของกำแพงจึงมีขนาดเล็กมากเพียงแค่ไบต์ถ้านั่นคือภาระพื้นที่ทั้งหมดที่คุณต้องการคุณอาจจะได้รับมันrm -rf /tmp/*หรือลบ vimrc ของคุณ
Evan Carroll

@EvanCarroll rm -rf /tmp/*... ที่สามารถลบสิ่งที่คุณต้องการเช่นซ็อกเก็ตแอปพลิเคชัน ฯลฯ ดีกว่าที่จะเลือกได้ดีกว่า สำหรับพื้นที่ที่ต้องการคุณพูดถูกมันน้อยมาก - ตารางว่าง 8k + รายการ WAL ไม่กี่รายการสำหรับการตัดทอนการจัดสรร xid บันทึกการกระทำ ฯลฯ
Craig Ringer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.