Arbeiten mit nicht protokollierten Tabellen in Aurora PostgreSQL - 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.

Arbeiten mit nicht protokollierten Tabellen in Aurora PostgreSQL

Amazon Aurora PostgreSQL unterstützt Tabellen ohne Protokollierung, die absturzsicher sind und die Datenintegrität auch nach Ausfällen oder Failovers der Writer-Instance aufrechterhalten. In Standard-PostgreSQL umgehen nicht protokollierte Tabellen das Write-Ahead Log (WAL) bei Schreibvorgängen, was zu schnelleren Schreibgeschwindigkeiten führt. Dies geht jedoch auf Kosten einer verringerten Haltbarkeit, da Tabellen, die nicht protokolliert wurden, nicht absturzsicher sind und nach einem Systemausfall oder unsachgemäßem Herunterfahren Daten verlieren können. Diese Tabellen, die nicht protokolliert wurden, 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 nicht protokollierte Tabellen aufgrund seiner verteilten Speicherarchitektur unterschiedlich. Dies liegt daran, dass das Speichersystem von Aurora aus Gründen der Haltbarkeit nicht auf die traditionelle PostgreSQL-WAL angewiesen ist. Die Leistungsvorteile, die normalerweise mit nicht protokollierten Tabellen in Standard-PostgreSQL verbunden sind, 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 verwendet wird, zusätzlichen Overhead mit sich bringen kann.

Beachten Sie bei der Verwendung nicht protokollierter Tabellen in Aurora PostgreSQL Folgendes:

  • Sie können nur vom Writer-Knoten im Aurora-DB-Cluster aus auf nicht protokollierte Tabellen zugreifen.

  • Reader-Knoten können nur dann auf Tabellen zugreifen, die nicht protokolliert wurden, wenn sie in den Writer-Status befördert werden.

  • Wenn Sie versuchen, von einem Leserknoten aus auf Tabellen zuzugreifen, die nicht protokolliert wurden, wird der folgende Fehler angezeigt:

    cannot access temporary or unlogged relations during recovery.

Tabellen ohne Protokollierung werden erstellt

Um eine Tabelle ohne Logging in Aurora PostgreSQL zu erstellen, fügen Sie das Schlüsselwort UNLOGGED in Ihre CREATE TABLE-Anweisung ein:

CREATE UNLOGGED TABLE staging_sales_data ( transaction_id bigint, customer_id bigint, product_id bigint, transaction_date date, amount NUMERIC );

Nicht protokollierte Tabellen in protokollierte Tabellen konvertieren

Wenn Sie eine nicht protokollierte Tabelle wieder in eine protokollierte Tabelle konvertieren müssen, können Sie den folgenden Befehl verwenden:

ALTER TABLE table_name SET 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.

Nicht protokollierte Tabellen und logische Replikation

Nicht protokollierte Tabellen sind im Allgemeinen nicht in der logischen Replikation enthalten, da die logische Replikation zum Erfassen und Übertragen von Änderungen auf die WAL angewiesen ist. Standardmäßig werden Änderungen an nicht protokollierten Tabellen nicht WAL-protokolliert und aus dem Replikationsstream ausgeschlossen, sodass sie für Anwendungsfälle, in denen eine logische Replikation erforderlich ist, ungeeignet sind. Aurora PostgreSQL bietet jedoch einen Parameter namensrds.logically_replicate_unlogged_tables, mit dem Sie dieses Verhalten steuern können:

  • Wenn auf 0 (aus) gesetzt rds.logically_replicate_unlogged_tables ist, werden die nicht protokollierten Tabellen von der logischen Replikation ausgeschlossen.

  • Wenn der rds.logically_replicate_unlogged_tables Wert auf 1 (ein) gesetzt ist, werden die Tabellen, die nicht protokolliert wurden, in die logische Replikation aufgenommen.

Anmerkung

In Aurora PostgreSQL ist der rds.logically_replicate_unlogged_tables Parameter in den Versionen 14 und früher standardmäßig auf 1 (ein) und in den Versionen 15 und höher auf 0 (aus) gesetzt.