Postgres: gerçekleşen görünüm tarafından alınan disk alanını kontrol ettiniz mi?


14

Postgres (sürüm 9.4 kullanıyorum) dizin ve tabloların boyutunu kontrol etmek nasıl biliyorum:

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;

Ancak bu somutlaştırılmış görüşler göstermez. Ne kadar disk alanı kapladıklarını nasıl kontrol edebilirim?

Yanıtlar:


23

Bu da görüşlerini gerçekleştiğine üstleniyor relpages >= 8içinde pg_classdurumda olmak zorunda olmadığı,. Aslında boş olabilir - henüz doldurulmamıştır, ile belirtilir pg_class.relispopulated = FALSE. Bu durumda karşılık gelen disk dosyasının boyutu sıfırdır .

Bunun yerine deneyin:

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;

Nerede kullanılabilir türleri şunlardır :

r= sıradan tablo,
i= dizin,
S= sıra,
v= görünüm,
m= gerçekleşen görünüm,
c= bileşik tür,
t= TOAST tablosu,
f= yabancı tablo

Kendinizinkini oluşturmak yerine veritabanı nesnesi boyutu işlevlerinden birini kullanın . "Bir tablonun boyutu" nun farklı şekillerde tanımlanabileceğini unutmayın. Detaylar:


1
Gerçekten doğru cevap. İnsan tarafından okunabilir formda boyut yazdırırken siparişin sözlükbilimsel sıralama yapmasını sağladığından boyuta göre sıralamanın yanıltıcı olduğuna dikkat edin
Jack

@Jack: İyi bir nokta. Daha mantıklı bir şey ekledim ORDER BY.
Erwin Brandstetter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.