DDL und verteilte Transaktionen in Aurora DSQL - Amazon Aurora DSQL

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.

DDL und verteilte Transaktionen in Aurora DSQL

Data Definition Language (DDL) verhält sich in Aurora DSQL anders als in PostgreSQL. Aurora DSQL verfügt über eine verteilte Multi-AZ-Datenbankschicht und Shared-Nothing-Datenbankebene, die auf Mehrmandanten-Rechen- und Speicherflotten aufbaut. Da es keinen einzelnen primären Datenbankknoten oder Leader gibt, wird der Datenbankkatalog verteilt. Somit verwaltet Aurora DSQL DDL-Schemaänderungen als verteilte Transaktionen.

Insbesondere verhält sich DDL in Aurora DSQL wie folgt anders:

Parallelitätsfehler

Aurora DSQL gibt einen Fehler zur Verletzung der Parallelitätskontrolle aus, wenn eine Transaktion ausgeführt wird, während eine andere dieselbe Ressource aktualisiert. Betrachten Sie beispielsweise die folgende Abfolge von Aktionen:

  1. In Sitzung 1 fügt ein Benutzer eine Spalte zur Tabelle mytable hinzu.

  2. In Sitzung 2 versucht ein Benutzer, eine Zeile inmytable einzufügen.

    Aurora DSQL gibt den Fehler SQL Error [40001]: ERROR: schema has been updated by another transaction, please retry: (OC001). zurück.

DDL und DML in derselben Transaktion

Transaktionen in Aurora DSQL können lediglich eine DDL-Anweisung und nicht gleichzeitig DDL- und DML-Anweisungen enthalten. Diese Einschränkung bedeutet, dass Sie nicht innerhalb einer und derselben Transaktion eine Tabelle erstellen und Daten in die Tabelle einfügen können. Aurora DSQL unterstützt beispielsweise die folgenden sequentiellen Transaktionen.

BEGIN; CREATE TABLE mytable (ID_col integer); COMMIT; BEGIN; INSERT into FOO VALUES (1); COMMIT;

Aurora DSQL unterstützt die folgende Transaktion nicht, die sowohl CREATE- als auch INSERT-Anweisungen enthält.

BEGIN; CREATE TABLE FOO (ID_col integer); INSERT into FOO VALUES (1); COMMIT;
Asynchrone DDL

Im Standard-PostgreSQL sperren DDL-Operationen wie die CREATE INDEX-Sperre die betroffene Tabelle, sodass sie für Lese- und Schreibzugriffe aus anderen Sitzungen nicht verfügbar ist. In Aurora DSQL werden diese DDL-Anweisungen asynchron mithilfe eines Hintergrundmanagers ausgeführt. Der Zugriff auf die betroffene Tabelle ist nicht blockiert. Somit kann DDL auf großen Tabellen ohne Ausfallzeiten oder Leistungseinbußen ausgeführt werden. Weitere Informationen über den asynchronen Job Manager in Aurora DSQL finden Sie unter Asynchrone Indizes in Aurora DSQL.