Speicherplatz belegt
Die Berechnung des Speicherplatzes auf der Festplatte ist nicht trivial. Zu beachten sind:
-
Der Overhead pro Tabelle (gering, im Grunde die Einträge im Systemkatalog, kann sich auf Heroku nicht auswirken).
-
Der Aufwand pro Zeile (HeapTupleHeader) und pro Datenseite (PageHeaderData). Details zum Seitenlayout im Handbuch.
-
Platzverlust durch Datentypausrichtung .
-
Platz für ein NULL-Bitmap . Effektiv kostenlos für Tabellen mit 8 Spalten oder weniger, irrelevant für Ihren Fall.
-
Tote Reihen nach
UPDATE
/DELETE
. -
Größe von Index(en) . Sie haben einen Primärschlüssel, richtig? Die Indexgröße ähnelt der einer Tabelle mit nur den indizierten Spalten und weniger Overhead.
-
Der tatsächliche Platzbedarf der Daten, abhängig von den jeweiligen Datentypen . Details zu Zeichentypen (inkl. Typen mit fester Länge) im Handbuch:
Der Speicherbedarf für einen kurzen String (bis 126 Byte) beträgt 1 Byte plus den eigentlichen String, der bei
character
das Leerzeichen enthält . Längere Strings haben 4 Byte Overhead statt 1Weitere Details für alle Typen im Systemkatalog
pg_type
. -
Die Codierung der Datenbank insbesondere für Zeichentypen. UTF-8 verwendet bis zu vier Bytes, um ein Zeichen zu speichern (Aber 7-Bit-ASCII-Zeichen belegen immer nur ein Byte, sogar in UTF-8.)
-
Andere kleine Dinge, die sich auf Ihren Fall auswirken können, wie TOAST - was Sie bei 64 Zeichenketten nicht beeinträchtigen sollte.
Mit Testfall rechnen
Eine einfache Methode, um eine Schätzung zu finden, besteht darin, eine Testtabelle zu erstellen, sie mit Dummy-Daten zu füllen und mit Datenbankobjektgrößenfunktionen zu messen::
SELECT pg_size_pretty(pg_relation_size('tbl'));
Inklusive Indizes:
SELECT pg_size_pretty(pg_total_relation_size('tbl'));
Ein Schnelltest zeigt folgende Ergebnisse:
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
Nach dem Hinzufügen eines Primärschlüssels:
ALTER TABLE test ADD CONSTRAINT test_pkey PRIMARY KEY(a);
SELECT pg_size_pretty(pg_total_relation_size('test')); -- 6760 kB
Ich würde also maximal etwa 44k erwarten Zeilen ohne und um 36k Zeilen mit Primärschlüssel.