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.
Arbeiten mit Tabellen ohne Protokollierung in Aurora PostgreSQL
Amazon Aurora PostgreSQL unterstützt Tabellen ohne Protokollierung, die absturzsicher sind und die Datenintegrität auch nach Ausfällen oder Failover der Writer-Instance wahren. Beim Standard-PostgreSQL umgehen Tabellen ohne Protokollierung das Write-Ahead-Protokoll (WAL) bei Schreibvorgängen, was zu höheren Schreibgeschwindigkeiten führt. Dies führt jedoch zu einer geringeren Haltbarkeit, da Tabellen ohne Protokollierung nicht absturzsicher sind und nach einem Systemausfall oder unsachgemäßem Herunterfahren Daten verloren gehen können. Diese Tabellen ohne Protokollierung werden nach einem Absturz oder einem unsauberen Herunterfahren automatisch gekürzt. Ihr Inhalt und ihre Indizes werden auch nicht auf Standby-Server repliziert.
Im Gegensatz dazu behandelt Aurora PostgreSQL Tabellen ohne Protokollierung aufgrund seiner verteilten Speicherarchitektur anders. Dies liegt daran, dass das Speichersystem von Aurora aus Gründen der Haltbarkeit nicht auf das traditionelle PostgreSQL-WAL angewiesen ist. Die Leistungsvorteile, die normalerweise mit Tabellen ohne Protokollierung in Standard-PostgreSQL-Versionen einhergehen, sind in Aurora jedoch möglicherweise nicht so signifikant. Dies ist auf die verteilte Speicherarchitektur von Aurora zurückzuführen, die im Vergleich zum lokalen Speicher, der in Standard-PostgreSQL-Versionen verwendet wird, zusätzlichen Overhead mit sich bringen kann.
Wenn Sie Tabellen ohne Protokollierung in Aurora PostgreSQL verwenden, beachten Sie Folgendes:
-
Sie können auf Tabellen ohne Protokollierung nur vom Writer-Knoten im Aurora-DB-Cluster aus zugreifen.
-
Reader-Knoten können nur dann auf Tabellen ohne Protokollierung zugreifen, wenn sie auf den Writer-Status hochgestuft werden.
-
Wenn Sie versuchen, von einem Reader-Knoten aus auf Tabellen ohne Protokollierung zuzugreifen, wird folgende Fehlermeldung angezeigt:
cannot access temporary or unlogged relations during recovery.
Erstellen von Tabellen ohne Protokollierung
Zum Erstellen einer Tabelle ohne Protokollierung in Aurora PostgreSQL fügen Sie das Schlüsselwort UNLOGGED zu Ihrer CREATE TABLE-Anweisung hinzu:
CREATE UNLOGGED TABLE staging_sales_data ( transaction_id bigint, customer_id bigint, product_id bigint, transaction_date date, amount NUMERIC );
Handhaben von Tabellen ohne Protokollierung während der Migration
Bei der Vorbereitung der Migration von Daten zu Aurora PostgreSQL ist es wichtig, Tabellen ohne Protokollierung zu identifizieren und angemessen zu handhaben. Bei Tabellen ohne Protokollierung findet keine WAL-Protokollierung statt. Zudem sind sie vom Replikations-Stream ausgeschlossen, was bedeutet, dass sie nicht auf ein Aurora-Lesereplikat repliziert werden.
Konvertieren Sie Tabellen ohne Protokollierung in Tabellen mit Protokollierung oder löschen Sie sie, wenn sie nicht verwendet werden, bevor Sie ein Aurora-Lesereplikat erstellen.
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob auf den einzelnen Datenbanken auf der Instance Tabellen ohne Protokollierung vorhanden sind:
SELECT oid, relfilenode, relname, relpersistence, relkind FROM pg_class WHERE relpersistence ='u';
Um eine Tabelle ohne Protokollierung in eine Tabelle mit Protokollierung zu konvertieren, verwenden Sie folgenden Befehl:
ALTER TABLEtable_nameSET LOGGED;
Dieser Vorgang schreibt die gesamte Tabelle neu und sperrt sie bis zum Abschluss exklusiv. Bei großen Tabellen kann dies zu erheblichen Ausfallzeiten führen.
Konvertieren von Tabellen ohne Protokollierung in Tabellen mit Protokollierung
Wenn Sie eine Tabelle ohne Protokollierung in eine Tabelle mit Protokollierung konvertieren müssen, verwenden Sie folgenden Befehl:
ALTER TABLEtable_nameSET LOGGED;
Bei diesem Vorgang wird die gesamte Tabelle neu geschrieben und eine exklusive Sperre für sie eingerichtet, bis der Vorgang abgeschlossen ist. Bei großen Tabellen kann dies zu erheblichen Ausfallzeiten führen.
Tabellen ohne Protokollierung und logische Replikation
Tabellen ohne Protokollierung sind im Allgemeinen nicht in der logischen Replikation enthalten, da die logische Replikation zum Erfassen und Übertragen von Änderungen auf das WAL angewiesen ist. Standardmäßig findet bei Änderungen an Tabellen ohne Protokollierung keine WAL-Protokollierung statt. Zudem sind sie vom Replikations-Stream ausgeschlossen, sodass sie für Anwendungsfälle, die eine logische Replikation erfordern, nicht geeignet sind. Aurora PostgreSQL bietet jedoch einen Parameter namens rds.logically_replicate_unlogged_tables, mit dem Sie dieses Verhalten steuern können:
-
Wenn
rds.logically_replicate_unlogged_tablesauf 0 (off) gesetzt ist, werden die Tabellen ohne Protokollierung von der logischen Replikation ausgeschlossen. -
Wenn
rds.logically_replicate_unlogged_tablesauf 1 (on) gesetzt ist, werden die Tabellen ohne Protokollierung in die logische Replikation aufgenommen.
Anmerkung
In Aurora PostgreSQL ist der rds.logically_replicate_unlogged_tables-Parameter in den Versionen 14 und niedriger standardmäßig auf 1 (on) und in den Versionen 15 und höher auf 0 (off) gesetzt.