VACUUM, autovacuum, vacuum_cost_delay
ปรับค่าเกณฑ์ autovacuum, vacuum_cost_delay และ VACUUM แบบขนานสำหรับตารางขนาดใหญ่
VACUUM, autovacuum, vacuum_cost_delay เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
VACUUM สามโหมด
VACUUM(แบบผ่อนปรน) — เรียกคืนแถวที่ไม่ใช้งาน อัปเดตแผนผังพื้นที่ว่าง และไม่ใช้ล็อกแบบเอกซ์คลูซีฟVACUUM FULL— เขียนตารางใหม่ ใช้ล็อกแบบเอกซ์คลูซีฟ และคืนพื้นที่ดิสก์ให้ OSVACUUM ANALYZE— ทำ VACUUM และรีเฟรชสถิติของตัววางแผนคำสั่งในครั้งเดียว
เรียกใช้ VACUUM ด้วยตนเอง
บางครั้งยังมีประโยชน์แม้เปิดใช้ autovacuum อยู่:
VACUUM (VERBOSE) orders;
VACUUM (VERBOSE, ANALYZE) orders;
VACUUM (PARALLEL 4) orders; -- parallel index cleanup (PG 13+)กระบวนการ Autovacuum
ตัวเรียกใช้เบื้องหลังจะสร้างผู้ปฏิบัติงานเพื่อทำ VACUUM ให้ตารางที่มีค่าการเปลี่ยนแปลงเกินเกณฑ์ โดยค่าเริ่มต้น ผู้ปฏิบัติงานจำนวนหนึ่งจะดูแลคลัสเตอร์ทั้งหมด
การปรับแต่งรายตาราง
ตารางที่มีการใช้งานสูงจะได้ประโยชน์จาก autovacuum ที่ทำงานเชิงรุก:
ALTER TABLE busy_table SET (
autovacuum_vacuum_scale_factor = 0.05, -- 5% dead vs default 20%
autovacuum_vacuum_threshold = 1000,
autovacuum_analyze_scale_factor = 0.05
);vacuum_cost_delay
จำกัดการทำงานด้านอินพุต/เอาต์พุตของ VACUUM เพื่อไม่ให้กระทบต่อคำสั่งสอบถามเบื้องหน้า ค่าเริ่มต้นของ PG 12 ขึ้นไปคือ 2ms ซึ่งโดยทั่วไปเพียงพอแล้ว สำหรับ SSD สามารถลดค่านี้ได้:
autovacuum_vacuum_cost_delay = 2ms
-- Lower delay = faster vacuum, more I/O usage.
-- Set per-table for hot tables that need faster cleanup.VACUUM แบบขนาน
ตั้งแต่ PG 13 เป็นต้นมา VACUUM จะทำความสะอาดดัชนีแบบขนานได้:
VACUUM (PARALLEL 4) big_table;
-- Each index cleaned by a parallel worker (up to max_parallel_maintenance_workers).VACUUM FULL: ใช้เมื่อใดและเพราะเหตุใด
เขียนตารางใหม่ตั้งแต่ต้นและคืนพื้นที่ให้ OS โดยใช้ ACCESS EXCLUSIVE ควรใช้เป็นทางเลือกสุดท้ายเท่านั้น หรือใช้ pg_repack แทน
VACUUM FULL orders;
-- Locks orders; rewrites; on huge tables this is hours of downtime.pg_repack: ทางเลือกแบบออนไลน์
เขียนตารางใหม่แบบออนไลน์โดยไม่ใช้ล็อกเต็มรูปแบบ ให้ผลเช่นเดียวกับ VACUUM FULL แต่เหมาะกับระบบใช้งานจริงมากกว่า:
pg_repack -d mydb -t orders
-- Builds a shadow table, sync, swaps in.การเฝ้าติดตาม Autovacuum
ดูเวลาที่ทำ vacuum/analyze ครั้งล่าสุดและจำนวนทูเพิลที่ไม่ใช้งาน:
SELECT relname,
n_live_tup, n_dead_tup,
last_autovacuum, last_autoanalyze
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC;เมื่อ Autovacuum ทำงานไม่ทัน
อาการที่พบ:
- ข้อมูลส่วนเกินเพิ่มขึ้น
- ค่า n_dead_tup ใน pg_stat_user_tables สูง
- แผนการทำงานของคำสั่งสอบถามแย่ลง
วิธีแก้: เพิ่มค่า autovacuum_max_workers ลดปัจจัยการปรับขนาดรายตาราง และแก้ไขธุรกรรมที่ทำงานนานซึ่งขัดขวาง VACUUM
การบันทึกการทำงานของ Vacuum
เพื่อการปรับแต่ง ให้บันทึก VACUUM ที่ทำงานช้า:
log_autovacuum_min_duration = '500ms'
-- Logs every autovacuum action that took longer than 500ms.FREEZE
VACUUM จะ "ตรึง" ทูเพิลเก่าเป็นครั้งคราว เพื่อป้องกันการวนกลับของ xid Autovacuum ที่ทำงานเชิงรุกจะรักษาอายุการตรึงให้อยู่ในระดับต่ำ และป้องกันเหตุการณ์วนกลับฉุกเฉิน
สรุปทบทวน
Autovacuum เป็นสิ่งจำเป็น ควรปรับแต่งให้เหมาะกับลักษณะงาน
- ตั้งค่า autovacuum รายตารางสำหรับตารางที่มีการใช้งานสูง
- VACUUM FULL เป็นทางเลือกสุดท้าย — ควรใช้ pg_repack มากกว่า
- เฝ้าติดตาม n_dead_tup และ last_autovacuum
- แก้ไขธุรกรรมที่ทำงานนานซึ่งขัดขวางการทำความสะอาด
ตรวจสอบอย่างรวดเร็ว
วิธีที่ปลอดภัยที่สุดในการเรียกคืนพื้นที่ดิสก์บนตารางใช้งานจริงที่มีการใช้งานสูง โดยไม่ใช้ล็อกที่ขัดขวางเป็นเวลานานคืออะไร
คำถามที่พบบ่อย
บทเรียน “VACUUM, autovacuum, vacuum_cost_delay” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “VACUUM, autovacuum, vacuum_cost_delay” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “VACUUM, autovacuum, vacuum_cost_delay”
ปรับค่าเกณฑ์ autovacuum, vacuum_cost_delay และ VACUUM แบบขนานสำหรับตารางขนาดใหญ่ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “VACUUM, autovacuum, vacuum_cost_delay” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- MVCC และสาเหตุของข้อมูลบวม
- VACUUM, autovacuum, vacuum_cost_delay
- ANALYZE และ pg_statistic
- การสแกนเฉพาะดัชนีและแผนที่การมองเห็น