FILLFACTOR
Nur mit INSERT
und SELECT
Sie sollten einen FILLFACTOR
verwenden von 100
überall.
Es hat keinen Sinn, Spielraum pro Speicherblock zu lassen, wenn Sie nicht mit UPDATE
"wackeln". s.
Der Mechanismus hinter FILLFACTOR
ist sehr einfach. INSERT
s füllen jede Datenseite (normalerweise ein 8-kb-Blöcke) nur bis zu dem Prozentsatz, der durch den FILLFACTOR
deklariert ist Einstellung. Auch immer dann, wenn Sie VACUUM FULL
ausführen oder CLUSTER
auf dem tisch wird der gleiche spielraum pro block wieder hergestellt. Idealerweise ermöglicht dies UPDATE
s zum Speichern neuer Zeilenversionen auf derselben Datenseite, was einen erheblichen Leistungsschub beim Umgang mit vielen UPDATE
bieten kann s. Auch vorteilhaft in Kombination mit H.O.T. Aktualisierungen :
Wenn es keine gibt Updates, verschwenden Sie dafür keinen Platz und setzen Sie FILLFACTOR = 100
.
Grundlegende Informationsquelle:das Handbuch zu CREATE TABLE
oder CREATE INDEX
.
Sonstige Optimierung
Aber Sie können etwas anderes tun - da scheinst du ein Optimist zu sein ... :)
CREATE TABLE dev_transactions
( transaction_id serial PRIMARY KEY,
gateway integer NOT NULL,
moment timestamp NOT NULL,
transaction_type smallint NOT NULL,
status smallint NOT NULL,
device integer NOT NULL,
controler smallint NOT NULL,
token integer,
et_mode character(1));
Dadurch wird Ihre Tabelle hinsichtlich Datenabgleich optimiert und vermeidet Padding für einen typischen 64-Bit-Server und spart ein paar Bytes, im Durchschnitt wahrscheinlich nur 8 Bytes - mit "column tetris:
kann man normalerweise nicht viel herausquetschen
Behalten Sie außerdem NOT NULL
bei Spalten am Anfang der Tabelle für einen sehr kleinen Leistungsbonus.
Außerdem hat Ihre Tabelle 9 Spalten . Dies bedeutet zusätzliche 8 Bytes für die erweiterte NULL-Bitmap - was in die anfängliche 1-Byte-NULL-Bitmap für nur 8 Spalten passen würde .
Wenn Sie et_mode
definieren und token
NOT NULL
, alle Spalten sind NOT NULL
und die NULL-Bitmap wird überhaupt verwendet, wodurch 8 Bytes frei werden.
Das funktioniert sogar pro Zeile, wenn Sie die Spalten nicht mit NOT NULL
deklarieren . Wenn alle Spalten Werte haben, gibt es für diese Zeile kein NULL-Bitmap. In Ihrem Fall führt dies zu dem paradoxen Effekt, dass Werte für et_mode
ausgefüllt werden und token
kann Ihre Speichergröße kleiner machen oder zumindest gleich bleiben:
Grundlegende Informationsquelle:das Handbuch zum physischen Datenbankspeicher .
Vergleichen Sie die Größe der Zeilen (mit Werten gefüllt) mit Ihrer ursprünglichen Tabelle, um einen endgültigen Beweis zu erhalten:
SELECT pg_column_size(t) FROM dev_transactions t;