Damit ich es nicht wieder vergesse (und beim nächsten mal die Suchmaschinen mit den falschen Suchbegriffen füttere):
Um den physikalischen Speicherplatz einer Datenbank, Tabelle, Indexes usw. zu berechnen stellt PostgreSQL einige Funktionen bereit: System Administration Functions.
Um zum Beispiel ergibt der folgende Query den auf der Festplatte belegten Speicher für die Tabelle sessions, inklusive Indexe, TOAST-Daten usw:
db=> SELECT pg_total_relation_size('sessions');
pg_total_relation_size
------------------------
563707904
(1 row)
Ohne total kann man sich auch nur den Speicherplatz für die Daten ohne Indexe und TOAST-Daten anzeigen lassen, ein Beispiel verkneife ich mir nun aber.
Und mit pg_size_pretty kann man sich das ganze auch menschenlesbar formatieren lassen:
SELECT pg_size_pretty(pg_total_relation_size('sessions'));
pg_size_pretty
----------------
538 MB
(1 row)
Auch der von einem Index belegte Speicherplatz lässt sich so herausfinden:
db=> SELECT pg_size_pretty(pg_total_relation_size('sessions_pkey'));
pg_size_pretty
----------------
72 MB
(1 row)
Alles in allem ganz schön viel für ein paar gammelige Sessiondaten: Es wurden einfach zu viele angelegt, zum Beispiel an Stellen, an denen nur eventuell vorhandene ausgelesen werden sollten.
Man kann sich aber auch ausgeben lassen, wieviel Speicher eine Spalte benötigt. Hier sieht man dann auch gut, welchen Effekt die Kompression von langen Texten bei Postgres hat:
odem=> SELECT uri, length(text), pg_column_size(text) FROM main_data;
uri | length | pg_column_size
---------------------------------------------+--------+----------------
/insert_coin/medien/boese.html | 17964 | 10324
/insert_coin/medien/schluesse.html | 23644 | 13588
/insert_coin/experiment/protokoll.html | 8331 | 5070
/insert_coin/experiment/manipulationen.html | 23079 | 12601
/insert_coin/vorwort.html | 2841 | 2841
/insert_coin/experiment/aenderung.html | 6107 | 3620
/insert_coin/medien/at-bombe.html | 28267 | 15941
/insert_coin/impressum.html | 590 | 594
[...]
Weitere Funktionen sind in der Postrgres-Dokumentation aufgeführt, zum Beispiel zum Berechnen des Gesamtspeicherverbrauchs einer Datenbank.
(dank an #postgresql-de (IRC) und ads)
Aktuelle Kommentare