Diskutrymme upptaget
Att beräkna utrymmet på disken är inte trivialt. Du måste ta hänsyn till:
-
Overhead per tabell (små, i princip poster i systemkatalogen, kanske inte påverkar dig på Heroku).
-
overheaden per rad (HeapTupleHeader) och per datasida (PageHeaderData). Detaljer om sidlayout i manualen.
-
Utrymme förlorat till datatypjustering .
-
Utrymme för en NULL-bitmapp . Effektivt gratis för tabeller med 8 kolumner eller mindre, irrelevant för ditt fall.
-
Döda rader efter
UPDATE
/DELETE
. -
Storlek på index(en) . Du kommer att ha en primärnyckel, eller hur? Indexstorleken liknar den för en tabell med bara de indexerade kolumnerna och mindre omkostnader.
-
Det faktiska utrymmesbehovet för data, beroende på respektive datatyper . Detaljer för teckentyper (inkl. typer av fast längd) i manualen:
Lagringskravet för en kort sträng (upp till 126 byte) är 1 byte plus den faktiska strängen, som inkluderar mellanslagsutfyllnad i fallet med
character
. Längre strängar har 4 byte av overhead istället för 1Mer information för alla typer i systemkatalogen
pg_type
. -
Databasens kodning särskilt för karaktärstyper. UTF-8 använder upp till fyra byte för att lagra ett tecken (men 7-bitars ASCII-tecken upptar alltid bara en byte, även i UTF-8.)
-
Andra små saker som kan påverka ditt fall, som TOAST - vilket inte bör påverka dig med 64 teckensträngar.
Räkna med testfall
En enkel metod för att hitta en uppskattning är att skapa en testtabell, fylla den med dummydata och mäta med databasobjektstorleksfunktioner::
SELECT pg_size_pretty(pg_relation_size('tbl'));
Inklusive index:
SELECT pg_size_pretty(pg_total_relation_size('tbl'));
Ett snabbt test visar följande resultat:
CREATE TABLE test(a text, b text);
INSERT INTO test -- quick fake of matching rows
SELECT chr((g/1000 +32)) || to_char(g%1000, 'FM000')
, repeat (chr(g%120 + 32), 64)
FROM generate_series(1,50000) g;
SELECT pg_size_pretty(pg_relation_size('test')); -- 5640 kB
SELECT pg_size_pretty(pg_total_relation_size('test')); -- 5648 kB
Efter att ha lagt till en primärnyckel:
ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a);
SELECT pg_size_pretty(pg_total_relation_size('test')); -- 6760 kB
Så jag förväntar mig maximalt runt 44k rader utan och runt 36k rader med primärnyckel.