Postgres: periksa ruang disk yang diambil oleh tampilan terwujud?


14

Saya tahu cara memeriksa ukuran indeks dan tabel di Postgres (Saya menggunakan versi 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;

Tapi ini tidak menunjukkan pandangan terwujud. Bagaimana saya bisa memeriksa berapa banyak ruang disk yang digunakan?

Jawaban:


23

Ini adalah asumsi bahwa pandangan terwujud telah relpages >= 8di pg_class, yang tidak harus terjadi. Ini sebenarnya bisa kosong - belum diisi, ditunjukkan oleh pg_class.relispopulated = FALSE. File disk yang sesuai memiliki ukuran nol dalam hal ini.

Coba saja:

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;

Di mana jenis yang tersedia adalah :

r= tabel biasa,
i= indeks,
S= urutan,
v= tampilan,
m= tampilan terwujud,
c= tipe komposit,
t= tabel TOAST,
f= tabel asing

Gunakan salah satu fungsi ukuran objek database daripada membangun Anda sendiri. Sadarilah bahwa "ukuran tabel" dapat didefinisikan dengan berbagai cara. Detail:


1
Memang jawaban yang benar. Perhatikan bahwa pesanan berdasarkan ukuran menyesatkan karena Anda mencetak ukuran dalam bentuk yang dapat dibaca manusia membuat pemesanan menjadi agak leksikografis
Jack

@ Jack: Poin bagus. Saya menambahkan yang lebih masuk akal ORDER BY.
Erwin Brandstetter
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.