sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvor mange poster kan jeg gemme i 5 MB PostgreSQL på Heroku?

Diskplads optaget

Det er ikke trivielt at beregne pladsen på disken. Du skal tage højde for:

  • Overhead pr. tabel (små, dybest set posterne i systemkataloget, påvirker muligvis ikke dig på Heroku).

  • overhead pr. række (HeapTupleHeader) og pr. dataside (PageHeaderData). Detaljer om sidelayout i manualen.

  • Plads tabt til datatypejustering .

  • Plads til en NULL bitmap . Effektivt gratis for tabeller med 8 kolonner eller mindre, irrelevant for din sag.

  • Døde rækker efter UPDATE / DELETE .

  • Størrelse på indeks(er) . Du har en primær nøgle, ikke? Indeksstørrelsen svarer til den for en tabel med kun de indekserede kolonner og mindre overhead.

  • Det faktiske pladsbehov for dataene, afhængigt af de respektive datatyper . Detaljer for tegntyper (inkl. faste længdetyper) i manualen:

    Lagerkravet for en kort streng (op til 126 bytes) er 1 byte plus den faktiske streng, som inkluderer mellemrumsudfyldningen i tilfælde af character . Længere strenge har 4 bytes overhead i stedet for 1

    Flere detaljer for alle typer i systemkataloget pg_type .

  • Databasens kodning især for karaktertyper. UTF-8 bruger op til fire bytes til at gemme ét tegn (Men 7-bit-ASCII-tegn optager altid kun én byte, selv i UTF-8.)

  • Andre små ting, der kan påvirke din sag, såsom TOAST - hvilket ikke bør påvirke dig med 64 tegnstrenge.

Beregn med testcase

En simpel metode til at finde et estimat er at oprette en testtabel, udfylde den med dummy-data og måle med databaseobjektstørrelsesfunktioner::

SELECT pg_size_pretty(pg_relation_size('tbl'));

Inklusive indekser:

SELECT pg_size_pretty(pg_total_relation_size('tbl'));

En hurtig test viser følgende resultater:

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 tilføjelse af en primær nøgle:

ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a);

SELECT pg_size_pretty(pg_total_relation_size('test')); -- 6760 kB

Så jeg forventer et maksimum på omkring 44k rækker uden og omkring 36k rækker med primærnøgle.




  1. Top 50 MySQL-interviewspørgsmål, du skal forberede i 2022

  2. Oracle - Hvordan får jeg den faktiske størrelse af en specifik RÆKKE?

  3. skråstreg før hvert citatproblem

  4. SQL Oracle-optællingsklynger