Fragen / Problem zu Toast

Hallo zusammen,
ich bin komplett neu in Sachen PostgreSQL und deshalb bitte ich um nachsicht
sollten die Fragen von mir all zu “Dau” mässig sein.

Zu Toast hätte ich eine Frage:
Ich betreibe mehrere Zabbix Server (noch Mysql). Bei einem davon möchte ich gerne bestimmte Tabellen
komprimieren (z.B hystory).
Jedoch wenn ich dies tue:

ERROR:  syntax error at or near "STORAGE"
LINE 1: ALTER TABLE history SET STORAGE EXTERNAL;
                                ^

Was mache ich hier falsch ?

Vielen Dank für jede Hilfe.
Stefan

Du mußt die Spalte mit bestimmen, alter table alter column set storage external; als Beispiel.


Andreas

Hi Andreas danke für deine Hilfe.
OK, in Mysql kann ich die “ganze” Tabelle mit ROW_FORMAT COMPRESSED angeben.
Hier habe jedoch das Problem das die Spalten bei Zabbix bigint, numeric und integer sind und ein STORAGE EXDENDED nicht zulässig.
Wass kann ich hier tun ?

Alles so lassen, wie es ist?

Andreas

Nö Andras will ich eben nicht.
In Mysql ist diese Tabelle “hystory” komprimiert 3.1GB groß und unkomprimiert 12.4GB
Diesen Effekt hätte ich auch gern in postgresql erreicht.
Die Frage stellt sich wie ? Noch dazu ich nicht der DB Guru bin.

Danke noch mal

Numeric ist komprimierbar, die anderen Typen nicht. Entweder lebst Du damit, oder verwendest MySQL, oder ein komprimiertes Filesystem als Tablespace.

Andreas

In PostgreSQL werden Daten anders abgelegt als in MySQL. Unter anderem werden “große” Datenmengen intern woanders gespeichert. Das sorgt dafür, das bei Zugriffen auf z. B. nur die “ID” nicht alle Daten gelesen werden müssen - das wiederum erhöht die Performance.

MySQL legt seine Daten alle in einer Zeile ab, daher kann man dort die gesamte Zeile komprimieren. Am Anfang der Zeile steht dann, wieviele Bytes diese Zeile enthält, danach fängt die nächste Zeile an.
In PostgreSQL ist jede Zeile gleich breit. Alle variablen Daten sind - wie oben beschrieben - ausgelagert.

Daher kann man - und braucht man - z. B. Integer nicht komprimieren. Die sind 4 Bytes, besser komprimieren geht da schlecht.
Darum “muss” man in PostgreSQL aber auch die Kompression pro Spalte angeben, einfach weil die Daten anders organisiert abgelegt werden.

OK, danke für eure guten Erklärungen.
Ich suche halt gute Komprimierung und gute “Pflege” -> Vacuum der DB (belegter Platz auf der HD).
Bei Mysql und einer DB mit komprimiert 9GB und unkomprimiert 39GB (wachsend), dauert ein “optimize” oder Dump (wobei ich schon snapshots nutze) zurückspielen quälent lange. Die Indexe sind halt bei dieser Zabbix DB mehr wie gross…
Mein Gedanke war es dies mit postgresql zu erreichen, wenn möglich.

Als Start würde ich dir empfehlen, deine MySQL-Erfahrungen hinter dir zu lassen und nicht zu versuchen, die Internas von MySQL auf eine andere Datenbank zu portieren.
Das geht schief.