pg_squeeze – Übergroße Tabellen in PostgreSQL automatisch verkleinern

pg_squeeze1

pg_sqzeeze ist eine Open Source PostgreSQL Extension von Cybertec und ermöglicht die automatische Behebung eines der wenigen Schwachpunkte, die in PostgreSQL auftreten können: Übergroße (gebloatete) Tabellen.

Im Gegensatz zu den bestehenden Befehlen „VACUUM FULL“ oder „CLUSTER“ gibt es bei pg_squeeze kein langes Locking von Tabellen. Während des Prozesses kann sowohl gelesen als auch geschrieben werden. Auch der Wiederherstellungsprozess ist aufgrund eines neuen Ansatzes der Verwendung von Transaction Log Dateien und logischer Dekodierung (anstelle von Triggern) sehr effizient, um mögliche Datenänderungen in der wiederherzustellenden Tabelle zu erfassen. Das spart Speicherplatz und IO-Durchsatz und gewährleistet sehr kurze Locking Zeiten, was pg_squeeze perfekt für unternehmenskritische OLTP Systeme macht.

Wie funktioniert pg_squeeze?

Die Erweiterung wird als Background-Worker-Prozess implementiert – ein Framework, das in PostgreSQL 9.4 eingeführt wurde. Dieser überwacht regelmäßig benutzerdefinierte Tabellen und wenn er feststellt, dass eine Tabelle den „bloat threshold“ überschritten hat, wird ein „squeeze“-Prozess automatisch gestartet und die Tabelle neu erstellt. Der Wiederaufbau geschieht im Hintergrund bei minimalem Speicher- und Rechenaufwand, durch die Verwendung der Replication Logik von PostgreSQL in Verbindung mit der logischen Dekodierung, um mögliche Änderungen der Tabelle, die während des Wiederaufbaus passieren, vom XLOG zu erkennen. „Bloat“ Schwellenwerte kann der User natürlich frei anpassen (auch pro Tabelle) und die Berechnung passiert mithilfe der Postgres-internen Free Space Map, wobei auch Fillfactor berücksichtigt wird. Unter Umständen kann auch die „pgstattuple“ Extension für die Berechnung benutzt werden, wenn sie vorhanden ist. Zusätzlich können Parameter wie „minimum table size“ eingestellt werden, wodurch nicht passende Tabellen ignoriert werden. Auch die Neuanordnung durch Index oder das Verschieben von Tabellen oder Indizes in einen anderen Tablespace sind möglich.

pg_sqeeze_web1

  • NO EXTENSIVE TABLE LOCKING
  • AUTOMATIC SHRINKING
  • WORKS AS BACKGROUND PROCESS
  • AVAILABLE AS EXTENSION

Lizenz

PostgreSQL License

Download

HIER downloaden und testen (Version BETA 1)! Bei Problemen oder Supportanfragen freuen wir uns darauf, von Ihnen zu hören! – KONTAKT.

FAQ

F: Ist pg_sueeze sicher? Was passiert bei einem Stromausfall während des Prozesses?

A: Ja, die Erweiterung ist sicher. Der Wiederaufbau findet in einer Transaction statt. Zusätzlich kann die maximale Locking-Zeit der Tabelle festgelegt werden.

 

F: Was ist der Unterschied zu „pg_repack“?

A: Indem keine Trigger verwendet werden, was ressourcenschonender ist, indem übergroße Tabellen automatisch erkannt werden und kein separates Kommandozeilen Tool verwendet werden muss.

 

F: Welche Voraussetzungen müssen Tabellen erfüllen um bearbeitet zu werden?

A: Neben dem Erreichen des zuvor festgelegten Schwellenwertes ist es zwingend nötig, dass die Tabelle über einen identity key, also einen PRIMARY KEY oder UNIQUE constraint verfügt.

 

 

postsuppbutt1