2013-08-19 18 views
17

Postgres 9.1'de bir tabloda text türünde bir sütun var. Sadece bu sütunun ihtiyaç duyulan disk alanı üzerindeki etkisini bilmek istiyorum. Kesin olması gerekmiyor, ancak bu sütunun veritabanı tarafından tüketilen disk alanının% 20 /% 30'undan sorumlu olup olmadığı hakkında bir fikir edinmek istiyorum.Postgres tablosundaki bir sütunun boyutu nasıl tahmin edilir?

Biliyorum pg_relation_size, ancak yalnızca tablo düzeyinde çalışır.

Aynı şemada birçok veritabanım var. Ben daha küçük bir tane döktüm ve grep ile sütunu kesip çıkardım ve düz metin dökümlerinin boyutunu karşılaştırdım. Ancak bu, canlı db'deki alan gereksinimlerinin iyi bir göstergesi değildir ve büyük veritabanları için bunu yapmak daha da zordur.

cevap

31
select 
    sum(pg_column_size(the_text_column)) as total_size, 
    avg(pg_column_size(the_text_column)) as average_size, 
    sum(pg_column_size(the_text_column)) * 100.0/pg_relation_size('t') as percentage 
from t; 
+7

pg_relation_size tost tablo eklemeden temel tablonun boyutunu verir. Birisi her bir sütunun disk kullanımını önemserse, büyük olasılıkla bir tost tablosunun bulunması muhtemeldir, bu yüzden büyük olasılıkla pg_table_size'yi kullanmak isteyebilirsiniz. – jjanes

+5

Ayrıca, tost tablosunu artı dizinlerin boyutunu saymak istiyorsanız pg_total_relation_size öğesini de kullanabilirsiniz. –

İlgili konular