ฉันไม่คิดว่าคุณจะต้องดูดฝุ่นด้วยตนเองเว้นแต่คุณจะเริ่มเห็นการเสื่อมประสิทธิภาพ อย่างไรก็ตามฉันขอแนะนำให้คุณตรวจสอบการตั้งค่าสูญญากาศและการกำหนดค่าอัตโนมัติและปรับแต่งตามความต้องการของคุณ
หากต้องการดูการตั้งค่าปัจจุบันของคุณให้เรียกใช้คิวรีนี้:
SELECT *
FROM pg_settings
WHERE name LIKE '%vacuum%'
ฟิลด์ส่วนใหญ่อธิบายตนเอง แต่นี่คือเอกสารเกี่ยวกับพวกเขา:
https://www.postgresql.org/docs/current/static/runtime-config-autovacuum.html
ฉันจะบอกว่าเป้าหมายของคุณควรกำหนดค่า autovacuum เพื่อทำความสะอาดขยะอย่างสม่ำเสมอ แต่อย่าเรียกใช้ autovacuum อย่างต่อเนื่อง
การตั้งค่าที่สำคัญที่สุดคือ:
- autovacuum_vacuum_scale_factor - กำหนดเปอร์เซ็นต์ของสิ่งอันดับที่สามารถตายก่อนที่จะมีการเรียกใช้การล้างข้อมูล ค่าเริ่มต้น = 0.2
- autovacuum_vacuum_threshold - จำนวน tuples ขั้นต่ำสุดก่อนที่จะเรียกใช้การล้างข้อมูล ค่าเริ่มต้น = 50
เกณฑ์ช่วยป้องกันกระบวนการล้างข้อมูลที่จะถูกเรียกใช้บ่อยเกินไปสำหรับตารางเล็ก ๆ
การตั้งค่าเริ่มต้นทำงานได้ดียกเว้นคุณมีตารางที่มีขนาดใหญ่มาก พูดง่ายๆก็คือถ้าคุณมีตารางที่ใช้ 100GB คุณจะสะสมขยะ 20GB ก่อนที่ autovacuum จะถูกเรียกใช้ ดังนั้นฉันมักจะแนะนำให้ตั้งค่าตัวประกอบสเกลต่ำ คุณควรตัดสินใจเองเพียงใด ฉันใช้ 0.05 กับโครงการปัจจุบันของฉัน
เกณฑ์ก็สามารถเพิ่มได้เช่นกัน แอปพลิเคชั่นหลายตัวมีตารางอยู่สองสามตารางซึ่งมีการอัปเดตบ่อยครั้งและ 50 tuples นั้นไม่มาก การเพิ่มที่ 1,000 ไม่ควรนำไปสู่ปัญหาใด ๆ แต่แน่นอนคุณควรพิจารณากรณีของคุณเอง
นอกจากนี้คุณยังสามารถปรับแต่ง autovacuum และตั้งค่าที่แตกต่างกันสำหรับตารางบางส่วนของคุณ
ALTER TABLE your_table SET (autovacuum_vacuum_scale_factor = 0.05);
หากคุณกำหนดค่า scale_factor และเกณฑ์ที่คุณควรจะปรับ คุณอาจเพิ่มขึ้นautovacuum_vacuum_cost_limit
ซึ่งโดยค่าเริ่มต้นเท่ากับvacuum_cost_limit
ซึ่งตั้งไว้ที่ 200 นี่เป็นคุณสมบัติที่สำคัญมากของการดูดซึ่งไม่อนุญาตให้กินทรัพยากรทั้งหมดและอนุญาตให้แอปพลิเคชันของคุณทำงานกับข้อมูลแม้ในระหว่างกระบวนการดูดฝุ่น แต่ค่าเริ่มต้นต่ำเกินไป การเพิ่มเป็น 1,000 ไม่ควรนำไปสู่ความล่าช้าที่สำคัญใด ๆ แต่จะทำให้กระบวนการสูญญากาศทำงานเสร็จเร็วขึ้นมาก
แน่นอนคุณสามารถใช้สุญญากาศได้ด้วยตนเอง ในกรณีที่ง่ายที่สุดคุณสามารถมีงาน cron ง่ายซึ่งจะทำให้การทำความสะอาดเต็มรูปแบบทุกคืนเมื่อ DB ของคุณไม่ได้เข้าถึงบ่อย
หวังว่าจะช่วย!