ความหมายของn_live_tup
และn_dead_tup
ในpg_stat_user_tables
หรือpgstattuple
คืออะไร?
ความหมายของn_live_tup
และn_dead_tup
ในpg_stat_user_tables
หรือpgstattuple
คืออะไร?
คำตอบ:
คอลัมน์ทั้งสองนั้นเป็นผลมาจาก
SELECT pg_stat_get_live_tuples(c.oid) AS n_live_tup
, pg_stat_get_dead_tuples(c.oid) AS n_dead_tup
FROM pg_class c;
แสดงจำนวนแถวสดและแถวที่ตายแล้ว (tuples) ในตาราง
ค้นหาผู้ที่ฟังก์ชั่นในคู่มือ
แถวที่ตายแล้วจะถูกลบแถวที่จะถูกนำมาใช้ใหม่ในภายหลังสำหรับแถวใหม่จากINSERT
s หรือUPDATE
s (พื้นที่ไม่ใช่ข้อมูล) บางแถวที่ตายแล้ว (หรือพื้นที่ว่างที่สงวนไว้) อาจมีประโยชน์อย่างยิ่งสำหรับการอัปเดต HOT (Tuples แบบฮีปเดียว) ที่สามารถใช้พื้นที่ในหน้าข้อมูลเดียวกันได้อย่างมีประสิทธิภาพ เพิ่มเติมเกี่ยวกับ HOT:
หรือแถวที่ตายแล้วอาจถูกลบออกโดยVACUUM FULL
(หรือธรรมดาVACUUM
หากได้รับโชคดี) หรือการดำเนินการที่คล้ายกันบนโต๊ะจึงทำให้ตารางทางกายภาพหดตัวตามลำดับ
เมื่อใดก็ตามที่แถวถูกลบหรืออัพเดทแถวเก่าจะมองไม่เห็นการทำธุรกรรมอื่น ๆ ทั้งหมดที่เริ่มต้นหลังจากการทำธุรกรรมได้รับการยอมรับ แถวจะตายอย่างสมบูรณ์ทันทีที่ไม่มีธุรกรรมเก่าที่ไม่ผูกมัดอีกต่อไป นั่นเป็นสิ่งจำเป็นสำหรับรุ่น MVCC ของ PostgreSQLเพื่อจัดการภาวะพร้อมกัน
เหล่านี้เป็นเพียงสถิติ คุณต้องเปิดใช้งานการรวบรวมสถิติpostgresql.conf
หากคุณต้องการอัปเดตสถิติโดยอัตโนมัติ track_counts
ควรเปิดโดยค่าเริ่มต้นแม้ว่า โปรดทราบว่าสถิติจะไม่ได้รับการอัปเดตทันที อ่านเพิ่มเติมเกี่ยวกับว่าในคู่มือการใช้งาน
SELECT n_live_tup FROM pg_stat_user_tables WHEN relname = 'mytable';
ทำไมมันแสดงเป็นศูนย์mytable
มี 6 แถว