Verwalten großer Objekte mit dem lo-Modul - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten großer Objekte mit dem lo-Modul

Das Lo-Modul (Erweiterung) richtet sich an Datenbankbenutzer und Entwickler, die über unsere Treiber mit Postgre-Datenbanken arbeiten. SQL JDBC ODBC Beides JDBC und ODBC erwarten, dass die Datenbank das Löschen großer Objekte übernimmt, wenn sich die Verweise auf sie ändern. Postgre SQL funktioniert jedoch nicht auf diese Weise. Postgre SQL geht nicht davon aus, dass ein Objekt gelöscht werden sollte, wenn sich seine Referenz ändert. Demzufolge verbleiben Objekte auf der Festplatte und sind nicht referenziert. Die Erweiterung lo enthält eine Funktion, mit der bei Referenzänderungen das Löschen von Objekten bei Bedarf ausgelöst wird.

Tipp

Um herauszufinden, ob Ihre Datenbank von der Erweiterung lo profitieren kann, verwenden Sie das vacuumlo Hilfsprogramm, um nach verwaisten großen Objekten zu suchen. Um die Anzahl von verwaisten großen Objekten zu erhalten, ohne Maßnahmen zu ergreifen, führen Sie das Dienstprogramm mit der -n Option (no-op) aus. Weitere Informationen erhalten Sie unter vacuumlo utility.

Das Modul lo ist für die Nebenversionen Aurora Postgre SQL 13.7, 12.11, 11.16, 10.21 und höher verfügbar.

Zum Installieren des Moduls (Erweiterung) benötigen Sie rds_superuser-Berechtigungen. Durch die Installation der lo-Erweiterung wird Ihrer Datenbank Folgendes hinzugefügt:

  • lo— Dies ist ein Datentyp für große Objekte (Lo), den Sie für binäre große Objekte (BLOBs) und andere große Objekte verwenden können. Der lo-Datentyp ist eine Domäne des oid-Datentyps. Mit anderen Worten, es ist eine Objekt-ID mit optionalen Beschränkungen. Weitere Informationen finden Sie unter Objektbezeichner in der Postgre-Dokumentation. SQL Einfach ausgedrückt, können Sie den lo Datentyp verwenden, um Ihre Datenbankspalten, die große Objektverweise enthalten, von anderen Objektbezeichnern () zu unterscheiden. OIDs

  • lo_manage – Dies ist eine Funktion, die Sie in Triggern für Tabellenspalten verwenden können, die große Objektreferenzen enthalten. Immer wenn Sie einen Wert löschen oder ändern, der auf ein großes Objekt verweist, hebt der Trigger die Verknüpfung des Objekts (lo_unlink) mit seiner Referenz auf. Verwenden Sie den Trigger für eine Spalte nur, wenn die Spalte der einzige Datenbankverweis auf das große Objekt ist.

Weitere Informationen zum Modul für große Objekte finden Sie unter log in der Postgree-Dokumentation. SQL

Installieren der lo-Erweiterung

Stellen Sie vor der Installation der lo-Erweiterung sicher, dass Sie über rds_superuser-Berechtigungen verfügen.

So installieren Sie die lo-Erweiterung
  1. Wird verwendetpsql, um eine Verbindung zur primären DB-Instance Ihres Aurora SQL Postgre-DB-Clusters herzustellen.

    psql --host=your-cluster-instance-1.666666666666.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password

    Geben Sie bei der Aufforderung Ihr Passwort ein. Der psql-Client verbindet und zeigt die standardmäßige administrative Verbindungsdatenbank postgres=> als Eingabeaufforderung an.

  2. Installieren Sie die Erweiterung wie folgt.

    postgres=> CREATE EXTENSION lo; CREATE EXTENSION

Sie können jetzt den lo-Datentyp zum Definieren von Spalten in Ihren Tabellen verwenden. Beispielsweise können Sie eine Tabelle (images) erstellen, die Raster-Bilddaten enthält. Sie können den lo-Datentyp für eine Spalte raster verwenden, wie im folgenden Beispiel, mit dem eine Tabelle erstellt wird, gezeigt.

postgres=> CREATE TABLE images (image_name text, raster lo);

Verwenden der Triggerfunktion lo_manage zum Löschen von Objekten

Sie können die lo_manage-Funktion in einem Trigger in einer lo oder anderen großen Objektspalten verwenden, um verwaiste Objekte zu bereinigen (und zu verhindern), wenn lo aktualisiert oder gelöscht wird.

So richten Sie Trigger für Spalten ein, die auf große Objekte verweisen
  • Führen Sie eine der folgenden Aktionen aus:

    • Erstellen Sie für jede Spalte einen BEFORE UPDATE DELETE OR-Trigger, der eindeutige Verweise auf große Objekte enthält, und verwenden Sie dabei den Spaltennamen für das Argument.

      postgres=> CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster);
    • Wenden Sie einen Trigger nur an, wenn die Spalte aktualisiert wird.

      postgres=> CREATE TRIGGER t_raster BEFORE UPDATE OF images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster);

Die lo_manage-Trigger-Funktion funktioniert nur im Kontext des Einfügens oder Löschens von Spaltendaten, je nachdem, wie Sie den Trigger definieren. Er hat keine Auswirkung, wenn Sie eine DROP- oder TRUNCATE-Operation in einer Datenbank ausführen. Das bedeutet, dass Sie vor der Verwendung der DROP-Operation Objektspalten aus allen Tabellen löschen sollten, um das Erstellen von verwaisten Objekten zu verhindern.

Angenommen, Sie möchten die Datenbank entfernen, die die Tabelle images enthält. Sie löschen die Spalte wie folgt.

postgres=> DELETE FROM images COLUMN raster

Vorausgesetzt, die lo_manage-Funktion ist in dieser Spalte definiert, um Löschvorgänge zu behandeln, können Sie die Tabelle jetzt sicher entfernen.

Entfernen verwaister großer Objekte mit vacuumlo

Das vacuumlo Hilfsprogramm identifiziert und entfernt verwaiste große Objekte aus Datenbanken. Dieses Tool ist seit Postgre SQL 9.1.24 verfügbar. Wenn Ihre Datenbankbenutzer routinemäßig mit großen Objekten arbeiten, empfehlen wir, dass Sie es vacuumlo gelegentlich ausführen, um verwaiste große Objekte zu bereinigen.

Vor der Installation der LO-Erweiterung können Sie anhand dieser prüfenvacuumlo, ob Ihr Aurora SQL Postgre-DB-Cluster davon profitieren kann. Führen Sie dazu vacuumlo mit der -n-Option (no-op) aus, um zu zeigen, was entfernt würde, wie im Folgenden gezeigt:

$ vacuumlo -v -n -h your-cluster-instance-1.666666666666.aws-region.rds.amazonaws.com -p 5433 -U postgres docs-lab-spatial-db Password:***** Connected to database "docs-lab-spatial-db" Test run: no large objects will be removed! Would remove 0 large objects from database "docs-lab-spatial-db".

Wie die Ausgabe zeigt, stellen verwaiste große Objekte für diese bestimmte Datenbank kein Problem dar.

Weitere Informationen zu diesem Hilfsprogramm finden Sie vacuumloin der Postgre-Dokumentation. SQL

Grundlegendes zur Funktionsweise von vacuumlo

Der vacuumlo Befehl entfernt verwaiste große Objekte (LOs) aus Ihrer SQL Postgre-Datenbank, ohne Ihre Benutzertabellen zu beeinträchtigen oder Konflikte mit ihnen zu verursachen.

Der Befehl funktioniert wie folgt:

  1. vacuumlobeginnt mit der Erstellung einer temporären Tabelle, die alle Object IDs (OIDs) der großen Objekte in Ihrer Datenbank enthält.

  2. vacuumlodurchsucht dann jede Spalte in der Datenbank, die die Datentypen oid oder verwendetlo. Wenn vacuumlo OID in diesen Spalten eine Übereinstimmung gefunden wird, wird die OID aus der temporären Tabelle entfernt. vacuumloüberprüft nur Spalten, die speziell benannt sind oid oderlo, keine Domänen, die auf diesen Typen basieren.

  3. Bei den verbleibenden Einträgen in der temporären Tabelle handelt es sich um verwaiste EinträgeLOs, die vacuumlo dann sicher entfernt werden.

Verbesserung der Leistung vacuumlo

Sie können die Leistung von potenziell verbessern, vacuumlo indem Sie die Batchgröße mithilfe der -l Option erhöhen. Dadurch können vacuumlo mehr LOs auf einmal verarbeitet werden.

Wenn Ihr System über ausreichend Arbeitsspeicher verfügt und Sie die temporäre Tabelle vollständig im Arbeitsspeicher unterbringen können, kann eine Erhöhung der temp_buffers Einstellung auf Datenbankebene die Leistung verbessern. Dadurch kann sich die Tabelle vollständig im Arbeitsspeicher befinden, was die Gesamtleistung verbessern kann.

Die folgende Abfrage schätzt die Größe der temporären Tabelle:

SELECT pg_size_pretty(SUM(pg_column_size(oid))) estimated_lo_temp_table_size FROM pg_largeobject_metadata;

Überlegungen für große Objekte

Im Folgenden finden Sie einige wichtige Überlegungen, die Sie bei der Arbeit mit großen Objekten beachten sollten:

  • Vacuumloist die einzige Lösung, da es derzeit keine andere Methode gibt, um verwaiste LOs Dateien zu entfernen.

  • Tools wie pglogical, systemeigene logische Replikation, die Replikationstechnologien verwenden AWS DMS , unterstützen die Replikation großer Objekte nicht.

  • Vermeiden Sie beim Entwerfen Ihres Datenbankschemas nach Möglichkeit die Verwendung großer Objekte und ziehen Sie stattdessen alternative Datentypen wie z. B. in Betracht. bytea

  • Führen Sie das Programm vacuumlo regelmäßig, mindestens einmal wöchentlich, aus, um Probleme mit Waisen LOs zu vermeiden.

  • Verwenden Sie einen Trigger mit dieser lo_manage Funktion für Tabellen, in denen große Objekte gespeichert sind, um zu verhindern, dass verwaiste Objekte LOs erstellt werden.