ความหมายของ n_live_tup และ n_dead_tup ใน pg_stat_user_tables คืออะไร


คำตอบ:


28

คอลัมน์ทั้งสองนั้นเป็นผลมาจาก

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) ในตาราง
ค้นหาผู้ที่ฟังก์ชั่นในคู่มือ

แถวที่ตายแล้วจะถูกลบแถวที่จะถูกนำมาใช้ใหม่ในภายหลังสำหรับแถวใหม่จากINSERTs หรือUPDATEs (พื้นที่ไม่ใช่ข้อมูล) บางแถวที่ตายแล้ว (หรือพื้นที่ว่างที่สงวนไว้) อาจมีประโยชน์อย่างยิ่งสำหรับการอัปเดต HOT (Tuples แบบฮีปเดียว) ที่สามารถใช้พื้นที่ในหน้าข้อมูลเดียวกันได้อย่างมีประสิทธิภาพ เพิ่มเติมเกี่ยวกับ HOT:

หรือแถวที่ตายแล้วอาจถูกลบออกโดยVACUUM FULL(หรือธรรมดาVACUUMหากได้รับโชคดี) หรือการดำเนินการที่คล้ายกันบนโต๊ะจึงทำให้ตารางทางกายภาพหดตัวตามลำดับ

เมื่อใดก็ตามที่แถวถูกลบหรืออัพเดทแถวเก่าจะมองไม่เห็นการทำธุรกรรมอื่น ๆ ทั้งหมดที่เริ่มต้นหลังจากการทำธุรกรรมได้รับการยอมรับ แถวจะตายอย่างสมบูรณ์ทันทีที่ไม่มีธุรกรรมเก่าที่ไม่ผูกมัดอีกต่อไป นั่นเป็นสิ่งจำเป็นสำหรับรุ่น MVCC ของ PostgreSQLเพื่อจัดการภาวะพร้อมกัน

เหล่านี้เป็นเพียงสถิติ คุณต้องเปิดใช้งานการรวบรวมสถิติpostgresql.confหากคุณต้องการอัปเดตสถิติโดยอัตโนมัติ track_countsควรเปิดโดยค่าเริ่มต้นแม้ว่า โปรดทราบว่าสถิติจะไม่ได้รับการอัปเดตทันที อ่านเพิ่มเติมเกี่ยวกับว่าในคู่มือการใช้งาน


Tuples แบบกองเดียวคืออะไร เมื่อฉันออกSELECT n_live_tup FROM pg_stat_user_tables WHEN relname = 'mytable';ทำไมมันแสดงเป็นศูนย์ mytableมี 6 แถว
Majid Azimi

@MajidAzimi: ฉันเพิ่มคำตอบลงเล็กน้อย
Erwin Brandstetter

5
@MajidAzimi หากคุณต้องการเรียนรู้มากมายเกี่ยวกับ MVCC และ HoT ลองดูสไลด์จากการนำเสนอของ Pavan Deolasee ที่ PGCon'08
dbenhur

@ dbenhur: ลิงค์ที่ดี! การนำเสนอทำได้ดีมากและเข้าใจง่าย
Erwin Brandstetter

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