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. Derlo
-Datentyp ist eine Domäne desoid
-Datentyps. Mit anderen Worten, es ist eine Objekt-ID mit optionalen Beschränkungen. Weitere Informationen finden Sie unter Objektbezeichnerin 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.
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
Wird verwendet
psql
, 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 --passwordGeben Sie bei der Aufforderung Ihr Passwort ein. Der
psql
-Client verbindet und zeigt die standardmäßige administrative Verbindungsdatenbankpostgres=>
als Eingabeaufforderung an.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 postgresdocs-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 vacuumlo
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:
-
vacuumlo
beginnt mit der Erstellung einer temporären Tabelle, die alle Object IDs (OIDs) der großen Objekte in Ihrer Datenbank enthält. -
vacuumlo
durchsucht dann jede Spalte in der Datenbank, die die Datentypenoid
oder verwendetlo
. Wennvacuumlo
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 sindoid
oderlo
, keine Domänen, die auf diesen Typen basieren. -
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:
-
Vacuumlo
ist 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.