Postgres: ตรวจสอบพื้นที่ดิสก์ที่ถ่ายโดยมุมมอง materialized?


14

ฉันรู้วิธีตรวจสอบขนาดของดัชนีและตารางใน Postgres (ฉันใช้เวอร์ชัน 9.4):

SELECT
   relname AS objectname,
   relkind AS objecttype,
   reltuples AS "#entries", pg_size_pretty(relpages::bigint*8*1024) AS size
   FROM pg_class
   WHERE relpages >= 8
   ORDER BY relpages DESC;

แต่สิ่งนี้จะไม่แสดงมุมมองที่ปรากฏ ฉันจะตรวจสอบจำนวนเนื้อที่ดิสก์ที่ใช้ไปได้อย่างไร

คำตอบ:


23

นี้จะสมมติว่ามีมุมมองรูปธรรมrelpages >= 8ในpg_classซึ่งไม่จำเป็นต้องเป็นกรณีที่ มันสามารถจริงจะว่างเปล่า - pg_class.relispopulated = FALSEไม่บรรจุยังระบุด้วย ไฟล์ดิสก์ที่เกี่ยวข้องมีขนาดเป็นศูนย์ในกรณีนี้

ลองแทน:

SELECT relname   AS objectname
     , relkind   AS objecttype
     , reltuples AS entries
     , pg_size_pretty(pg_table_size(oid)) AS size  -- depending - see below
FROM   pg_class
WHERE  relkind IN ('r', 'i', 'm')
ORDER  BY pg_table_size(oid) DESC;

ในกรณีที่ประเภทที่มีอยู่ :

r= ตารางธรรมดา
i= ดัชนี,
S= ลำดับ,
v= ดู,
m= มุมมองที่ปรากฏ,
c= ประเภทคอมโพสิต,
t= ตาราง TOAST,
f= ตารางต่างประเทศ

ใช้ฟังก์ชันขนาดวัตถุฐานข้อมูลอย่างใดอย่างหนึ่งแทนที่จะสร้างของคุณเอง โปรดทราบว่าสามารถกำหนด "ขนาดของตาราง" ได้หลายวิธี รายละเอียด:


1
คำตอบที่ถูกต้องแน่นอน โปรดทราบว่าการเรียงลำดับตามขนาดนั้นอาจทำให้เข้าใจผิดในขณะที่คุณกำลังพิมพ์ขนาดในรูปแบบที่มนุษย์สามารถอ่านได้ทำให้เรียงลำดับพจนานุกรม
Jack

@ แจ็ค: จุดดี ORDER BYฉันเพิ่มที่เหมาะสมมากขึ้น
Erwin Brandstetter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.