Verwendung der Schreibweiterleitung in einer SQL globalen Aurora My-Datenbank - 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.

Verwendung der Schreibweiterleitung in einer SQL globalen Aurora My-Datenbank

Region und Versionsverfügbarkeit der Schreibweiterleitung in Aurora My SQL

Die Schreibweiterleitung wird mit Aurora My SQL 2.08.1 und höheren Versionen in jeder Region unterstützt, in der globale Datenbanken SQL auf Basis von Aurora My verfügbar sind.

Informationen zur Version und regionalen Verfügbarkeit der SQL globalen Aurora My-Datenbanken finden Sie unterGlobale Aurora-Datenbanken mit Aurora My SQL.

Schreibweiterleitung in Aurora My aktivieren SQL

Standardmäßig ist die Schreibweiterleitung nicht aktiviert, wenn Sie einen sekundären Cluster zu einer Aurora Global Database hinzufügen.

Um die Schreibweiterleitung mit dem zu aktivieren AWS Management Console, aktivieren Sie unter Read Replica Write Forwarding das Kontrollkästchen Globale Schreibweiterleitung aktivieren, wenn Sie eine Region für eine globale Datenbank hinzufügen. Ändern Sie den Cluster für einen vorhandenen sekundären Cluster in Globale Schreibweiterleitung aktivieren. Wenn Sie die Schreibweiterleitung ausschalten möchten, deaktivieren Sie beim Hinzufügen der Region oder beim Ändern des sekundären Clusters das Kontrollkästchen Read-Replica-Schreibweiterleitung aktivieren.

Um die Schreibweiterleitung zu aktivieren, verwenden Sie AWS CLI, verwenden Sie die --enable-global-write-forwarding Option. Diese Option funktioniert, wenn Sie über den Befehl create-db-cluster einen neuen sekundären Cluster erstellen. Sie funktioniert auch, wenn Sie einen vorhandenen sekundären Cluster über den Befehl modify-db-cluster ändern. Sie erfordert, dass die globale Datenbank eine Aurora-Version verwendet, die eine Schreibweiterleitung unterstützt. Sie können die Schreibweiterleitung ausschalten, indem Sie die --no-enable-global-write-forwarding Option mit denselben CLI Befehlen verwenden.

Um die Schreibweiterleitung über Amazon zu aktivieren RDSAPI, setzen Sie den EnableGlobalWriteForwarding Parameter auftrue. Dieser Parameter funktioniert, wenn Sie über die Operation CreateDBCluster einen neuen sekundären Cluster erstellen. Sie funktioniert auch, wenn Sie einen vorhandenen sekundären Cluster über die Operation ModifyDBCluster ändern. Sie erfordert, dass die globale Datenbank eine Aurora-Version verwendet, die eine Schreibweiterleitung unterstützt. Sie können die Schreibweiterleitung deaktivieren, indem Sie den Parameter EnableGlobalWriteForwarding auf false festlegen.

Anmerkung

Damit eine Datenbanksitzung die Schreibweiterleitung verwenden kann, geben Sie eine Einstellung für den Konfigurationsparameter aurora_replica_read_consistency an. Sie führen dies in jeder Sitzung aus, in der die Schreibweiterleitungsfunktion verwendet wird. Informationen zu diesem Parameter finden Sie unter Isolation und Konsistenz für die Schreibweiterleitung in Aurora My SQL.

Die RDS Proxy-Funktion unterstützt den SESSION Wert für die aurora_replica_read_consistency Variable nicht. Durch das Festlegen dieses Werts kann unerwartetes Verhalten auftreten.

Die folgenden CLI Beispiele zeigen, wie Sie eine globale Aurora-Datenbank mit aktivierter oder deaktivierter Schreibweiterleitung einrichten können. Die markierten Elemente stellen die Befehle und Optionen dar, die bei der Einrichtung der Infrastruktur für eine Aurora Global Database Datenbank angegeben werden müssen und konsistent sein müssen.

Im folgenden Beispiel werden eine Aurora Global Database, ein primärer Cluster und ein sekundärer Cluster mit aktivierter Schreibweiterleitung erstellt. Ersetzen Sie den Benutzernamen, das Passwort sowie den primären und sekundären Namen durch Ihre eigenen Einstellungen AWS Regionen.

# Create overall global database. aws rds create-global-cluster --global-cluster-identifier write-forwarding-test \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-1 # Create primary cluster, in the same AWS Region as the global database. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-1 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --master-username user_name --master-user-password password \ --region us-east-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \ --db-instance-identifier write-forwarding-test-cluster-1-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-1 \ --db-instance-identifier write-forwarding-test-cluster-1-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-1 # Create secondary cluster, in a different AWS Region than the global database, # with write forwarding enabled. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-2 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-2 \ --enable-global-write-forwarding aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-2 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-east-2

Das folgende Beispiel setzt das vorherige Beispiel fort. In ihm werden ein sekundärer Cluster ohne aktivierte Schreibweiterleitung erstellt und anschließend die Schreibweiterleitung aktiviert. Nach Abschluss dieses Beispiels ist die Schreibweiterleitung für alle sekundären Cluster in der globalen Datenbank aktiviert.

# Create secondary cluster, in a different AWS Region than the global database, # without write forwarding enabled. aws rds create-db-cluster --global-cluster-identifier write-forwarding-test \ --db-cluster-identifier write-forwarding-test-cluster-2 \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-west-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-1 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-west-1 aws rds create-db-instance --db-cluster-identifier write-forwarding-test-cluster-2 \ --db-instance-identifier write-forwarding-test-cluster-2-instance-2 \ --db-instance-class db.r5.large \ --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.1 \ --region us-west-1 aws rds modify-db-cluster --db-cluster-identifier write-forwarding-test-cluster-2 \ --region us-east-2 \ --enable-global-write-forwarding

Überprüfung, ob für einen sekundären Cluster die Schreibweiterleitung in Aurora My aktiviert ist SQL

Um festzustellen, ob Sie die Schreibweiterleitung aus einem sekundären Cluster verwenden können, können Sie prüfen, ob der Cluster das Attribut besitz "GlobalWriteForwardingStatus": "enabled".

Im AWS Management Console, auf der Registerkarte Konfiguration der Detailseite für den Cluster sehen Sie den Status Aktiviert für globale Read Replica-Schreibweiterleitung.

Führen Sie den folgenden Befehl aus, um den Status der Einstellung für die globale Schreibweiterleitung für alle Ihre Cluster zu überprüfen AWS CLI Befehl.

Ein sekundärer Cluster zeigt die Werte "enabled" oder "disabled" an, um anzugeben, ob die Schreibweiterleitung aktiviert oder deaktiviert ist. Der Wert null gibt an, dass die Schreibweiterleitung für diesen Cluster nicht verfügbar ist. Entweder ist der Cluster nicht Teil einer globalen Datenbank oder ist der primäre Cluster und nicht kein sekundärer Cluster. Der Wert kann auch "enabling" oder "disabling" sein, wenn die Schreibweiterleitung gerade aktiviert oder deaktiviert wird.

aws rds describe-db-clusters \ --query '*[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus}' [ { "GlobalWriteForwardingStatus": "enabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" }, { "GlobalWriteForwardingStatus": "disabled", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-2" }, { "GlobalWriteForwardingStatus": null, "DBClusterIdentifier": "non-global-cluster" } ]

Führen Sie den folgenden Befehl aus, um alle sekundären Cluster zu suchen, für die eine globale Schreibweiterleitung aktiviert ist. Dieser Befehl gibt auch den Reader-Endpunkt des Clusters aus. Sie verwenden den Reader-Endpunkt des sekundären Clusters, wenn Sie die Schreibweiterleitung vom sekundären zum primären Cluster in Ihrer globalen Aurora-Datenbank verwenden.

Beispiel
aws rds describe-db-clusters --query 'DBClusters[].{DBClusterIdentifier:DBClusterIdentifier,GlobalWriteForwardingStatus:GlobalWriteForwardingStatus,ReaderEndpoint:ReaderEndpoint} | [?GlobalWriteForwardingStatus == `enabled`]' [ { "GlobalWriteForwardingStatus": "enabled", "ReaderEndpoint": "aurora-write-forwarding-test-replica-1.cluster-ro-cnpexample.us-west-2.rds.amazonaws.com", "DBClusterIdentifier": "aurora-write-forwarding-test-replica-1" } ]

Anwendung und SQL Kompatibilität mit der Schreibweiterleitung in Aurora My SQL

Sie können die folgenden Arten von SQL Anweisungen mit der Schreibweiterleitung verwenden:

  • Anweisungen in der Datenmanipulationssprache (DML)INSERT, wieDELETE, undUPDATE. Es gibt einige Einschränkungen für die Eigenschaften dieser Anweisungen, die Sie bei der Schreibweiterleitung verwenden können, wie im Folgenden beschrieben.

  • SELECT ... LOCK IN SHARE MODE- und SELECT FOR UPDATE-Anweisungen.

  • PREPARE- und EXECUTE-Anweisungen.

Bestimmte Anweisungen sind nicht zulässig oder können veraltete Ergebnisse erzeugen, wenn Sie sie in einer globalen Datenbank mit Schreibweiterleitung verwenden. Daher ist die Einstellung EnableGlobalWriteForwarding für sekundäre Cluster standardmäßig deaktiviert. Stellen Sie vor einer Aktivierung sicher, dass der Anwendungscode von keiner dieser Einschränkungen betroffen ist.

Die folgenden Einschränkungen gelten für die SQL Anweisungen, die Sie bei der Schreibweiterleitung verwenden. In einigen Fällen können Sie die Anweisungen auf sekundären Clustern verwenden, bei denen eine Schreibweiterleitung auf Clusterebene aktiviert ist. Dieser Ansatz funktioniert, wenn die Schreibweiterleitung nicht innerhalb der Sitzung durch den Konfigurationsparameter aurora_replica_read_consistency aktiviert wird. Der Versuch, eine Anweisung zu verwenden, wenn sie aufgrund der Schreibweiterleitung nicht zulässig ist, verursacht eine Fehlermeldung im folgendem Format.

ERROR 1235 (42000): This version of MySQL doesn't yet support 'operation with write forwarding'.
Sprache der Datendefinition (DDL)

Connect zum primären Cluster her, um DDL Anweisungen auszuführen. Sie können sie nicht von Reader-DB-Instances aus ausführen.

Aktualisieren einer permanenten Tabelle mit Daten aus einer temporären Tabelle

Sie können in sekundären Clustern mit aktivierter Schreibweiterleitung temporäre Tabellen verwenden. Sie können jedoch keine DML Anweisung verwenden, um eine permanente Tabelle zu ändern, wenn sich die Anweisung auf eine temporäre Tabelle bezieht. Beispielsweise können Sie keine INSERT ... SELECT-Anweisung verwenden, die die Daten aus einer temporären Tabelle übernimmt. Die temporäre Tabelle ist auf dem sekundären Cluster vorhanden und nicht verfügbar, wenn die Anweisung auf dem primären Cluster ausgeführt wird.

XA-Transaktionen

Sie können die folgenden Anweisungen nicht in einem sekundären Cluster verwenden, wenn die Schreibweiterleitung innerhalb der Sitzung aktiviert wird. Sie können diese Anweisungen in sekundären Clustern verwenden, bei denen die Schreibweiterleitung nicht aktiviert ist, oder innerhalb von Sitzungen mit leerer Einstellung aurora_replica_read_consistency. Bevor Sie die Schreibweiterleitung innerhalb einer Sitzung aktivieren, müssen Sie überprüfen, ob Ihr Code diese Anweisungen verwendet.

XA {START|BEGIN} xid [JOIN|RESUME] XA END xid [SUSPEND [FOR MIGRATE]] XA PREPARE xid XA COMMIT xid [ONE PHASE] XA ROLLBACK xid XA RECOVER [CONVERT XID]
LOADAnweisungen für permanente Tabellen

Sie können die folgenden Anweisungen nicht in einem sekundären Cluster mit aktivierter Schreibweiterleitung verwenden.

LOAD DATA INFILE 'data.txt' INTO TABLE t1; LOAD XML LOCAL INFILE 'test.xml' INTO TABLE t1;

Sie können in einem sekundären Cluster Daten in eine temporäre Tabelle laden. Sie dürfen jedoch alle LOAD-Anweisungen, die sich auf permanente Tabellen beziehen, nur im primären Cluster ausführen.

Plugin-Anweisungen

Sie können die folgenden Anweisungen nicht in einem sekundären Cluster mit aktivierter Schreibweiterleitung verwenden.

INSTALL PLUGIN example SONAME 'ha_example.so'; UNINSTALL PLUGIN example;
SAVEPOINTAussagen

Sie können die folgenden Anweisungen nicht in einem sekundären Cluster verwenden, wenn die Schreibweiterleitung innerhalb der Sitzung aktiviert wird. Sie können diese Anweisungen in sekundären Clustern ohne aktivierte Schreibweiterleitung oder in Sitzungen mit leerer Einstellung aurora_replica_read_consistency verwenden. Sie müssen überprüfen, ob Ihr Code diese Anweisungen verwendet, bevor Sie die Schreibweiterleitung innerhalb einer Sitzung aktivieren.

SAVEPOINT t1_save; ROLLBACK TO SAVEPOINT t1_save; RELEASE SAVEPOINT t1_save;

Isolation und Konsistenz für die Schreibweiterleitung in Aurora My SQL

In Sitzungen, die Schreibweiterleitung verwenden, können Sie nur die Isolationsstufe REPEATABLE READ verwenden. Sie können die READ COMMITTED Isolationsstufe jedoch auch für schreibgeschützte Cluster im Sekundarbereich verwenden AWS Regionen, diese Isolationsstufe funktioniert nicht mit der Schreibweiterleitung. Weitere Informationen zu den Isolationsstufen REPEATABLE READ und READ COMMITTED finden Sie unter Aurora Meine SQL Isolationsstufen.

Sie können den Grad der Lesekonsistenz in einem sekundären Cluster steuern. Die Lesekonsistenzstufe legt fest, wie viel Wartezeit der sekundäre Cluster vor jeder Leseoperation ausführt, um sicherzustellen, dass einige oder alle Änderungen aus dem primären Cluster repliziert werden. Sie können die Lesekonsistenzstufe anpassen, um sicherzustellen, dass alle aus Ihrer Sitzung weitergeleiteten Schreiboperationen im sekundären Cluster vor nachfolgenden Abfragen angezeigt werden. Sie können diese Einstellung auch verwenden, um sicherzustellen, dass Abfragen auf dem sekundären Cluster stets die aktuellsten Updates des primären Clusters angezeigt werden. Dies gilt auch für diejenigen, die von anderen Sitzungen oder anderen Clustern übermittelt wurden. Um diese Art von Verhalten für Ihre Anwendung anzugeben, wählen Sie einen Wert für den Sitzungsebenen-Parameter au aurora_replica_read_consistency.

Wichtig

Legen Sie immer den Parameter aurora_replica_read_consistency für jede Sitzung fest, für die Sie Schreibvorgänge weiterleiten möchten. Andernfalls aktiviert Aurora die Schreibweiterleitung für diese Sitzung nicht. Dieser Parameter hat standardmäßig einen leeren Wert, wählen Sie daher einen bestimmten Wert, wenn Sie diesen Parameter verwenden. Der Parameter aurora_replica_read_consistency wirkt sich nur auf sekundäre Cluster aus, in denen die Schreibweiterleitung aktiviert ist.

Verwenden Sie für Aurora My SQL Version 2 und Version 3 unter 3.04 die Option aurora_replica_read_consistency als Sitzungsvariable. Für Aurora My SQL Version 3.04 und höher können Sie es entweder aurora_replica_read_consistency als Sitzungsvariable oder als DB-Cluster-Parameter verwenden.

Für den Parameter aurora_replica_read_consistency können Sie die Werte EVENTUAL, SESSION und GLOBAL angeben.

Wenn Sie das Konsistenzniveau erhöhen, verbringt Ihre Anwendung mehr Zeit damit, darauf zu warten, dass Änderungen zwischen ihnen weitergegeben werden AWS Regionen. Sie können das Verhältnis zwischen schneller Reaktionszeit und der Gewährleistung festlegen, dass vor der Ausführung Ihrer Abfragen Änderungen an anderen Speicherorten vollständig verfügbar sind.

Wenn die Lesekonsistenz auf eingestellt istEVENTUAL, werden Abfragen in einem sekundären Bereich ausgeführt AWS In Regionen, in denen Schreibweiterleitung verwendet wird, können Daten aufgrund von Verzögerungen bei der Replikation leicht veraltet sein. Ergebnisse von Schreiboperationen in derselben Sitzung werden erst angezeigt, wenn die Schreiboperation in der primären Region ausgeführt und zur aktuellen Region repliziert wird. Die Abfrage wartet nicht, bis die aktualisierten Ergebnisse verfügbar sind. Daher könnte sie die älteren Daten oder die aktualisierten Daten abrufen, abhängig vom Zeitpunkt der Anweisungen und der Größe der Replikationsverzögerung.

Wenn die Lesekonsistenz auf eingestellt istSESSION, befinden sich alle Abfragen in einer sekundären Datenbank AWS In der Region, die Schreibweiterleitung verwendet, werden die Ergebnisse aller in dieser Sitzung vorgenommenen Änderungen angezeigt. Die Änderungen werden unabhängig davon angezeigt, ob die Transaktion übergeben wurde. Wenn notwendig, wartet die Abfrage auf die Replikation der Ergebnisse weitergeleiteter Schreiboperationen zur aktuellen Region. Sie wartet nicht auf aktualisierte Ergebnisse aus Schreiboperationen, die in anderen Regionen oder in anderen Sitzungen innerhalb der aktuellen Region ausgeführt werden.

Wenn die Lesekonsistenz auf eingestellt istGLOBAL, eine Sitzung in einer sekundären Sitzung AWS In der Region werden die durch diese Sitzung vorgenommenen Änderungen angezeigt. Außerdem werden alle festgeschriebenen Änderungen aus den beiden Primärversionen angezeigt AWS Region und andere Sekundarstufe AWS Regionen. Jede Abfrage kann für einen bestimmten Zeitraum warten, abhängig von der Sitzungsverzögerung. Die Abfrage wird fortgesetzt, wenn der sekundäre Cluster alle up-to-date zugeschriebenen Daten aus dem primären Cluster enthält, also zu dem Zeitpunkt, zu dem die Abfrage gestartet wurde.

Weitere Informationen zu allen mit der Schreibweiterleitung verbundenen Parametern finden Sie unter Konfigurationsparameter für die Schreibweiterleitung in Aurora My SQL.

Beispiele für die Verwendung der Schreibweiterleitung

In diesen Beispielen wird aurora_replica_read_consistency als Sitzungsvariable verwendet. Für Aurora My SQL Version 3.04 und höher können Sie es entweder aurora_replica_read_consistency als Sitzungsvariable oder als DB-Cluster-Parameter verwenden.

Im folgenden Beispiel befindet sich der primäre Cluster in der Region US East (N. Virginia). Der sekundäre Cluster befindet sich in der Region USA Ost (Ohio). Das Beispiel zeigt die Auswirkungen ausgeführter INSERT-Anweisungen, gefolgt von SELECT-Anweisungen. Abhängig vom Wert der Einstellung aurora_replica_read_consistency können sich die Ergebnisse abhängig vom Zeitpunkt der Anweisungen unterscheiden. Um eine höhere Konsistenz zu erreichen, können Sie kurz warten, bevor Sie die Anweisung SELECT ausführen. Oder Aurora kann automatisch warten, bis die Ergebnisse fertig repliziert sind, bevor mit fortgefahren wir SELECT.

In diesem Beispiel gibt es eine Lesekonsistenzeinstellung von eventual. Das Ausführen der Anweisung INSERT unmittelbar gefolgt von der Anweisung SELECT gibt immer noch den Wert von COUNT(*) zurück. Dieser Wert gibt die Anzahl der Zeilen an, bevor die neue Zeile eingefügt wird. Wenn Sie kurze Zeit später SELECT erneut ausführen, wird die aktualisierte Zeilenzahl zurückgegeben. Die SELECT-Anweisungen haben keine Wartezeit.

mysql> set aurora_replica_read_consistency = 'eventual'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> insert into t1 values (6); select count(*) from t1; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.00 sec)

Bei Festlegung der Lesekonsistenzeinstellung auf session wartet eine SELECT-Anweisung, die unmittelbar nach einer INSERT-Anweisung ausgeführt wird, bis die Änderungen aus der INSERT-Anweisung angezeigt werden. Nachfolgende SELECT-Anweisungen haben keine Wartezeit.

mysql> set aurora_replica_read_consistency = 'session'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 6 | +----------+ 1 row in set (0.01 sec) mysql> insert into t1 values (6); select count(*) from t1; select count(*) from t1; Query OK, 1 row affected (0.08 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.37 sec) +----------+ | count(*) | +----------+ | 7 | +----------+ 1 row in set (0.00 sec)

Wenn die Lesekonsistenzeinstellung weiter auf session festgelegt ist, wird durch die Einführung einer kurzen Wartezeit nach der Ausführung einer INSERT-Anweisung die aktualisierte Zeilenzahl zum Zeitpunkt der nächsten Ausführung der SELECT-Anweisung verfügbar.

mysql> insert into t1 values (6); select sleep(2); select count(*) from t1; Query OK, 1 row affected (0.07 sec) +----------+ | sleep(2) | +----------+ | 0 | +----------+ 1 row in set (2.01 sec) +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.00 sec)

Wenn die Leseksistenzeinstellung auf global festgelegt ist, wartet jede SELECT-Anweisung, um sicherzustellen, dass alle Datenänderungen mit Stand zur Startzeit der Anweisung angezeigt werden, bevor die Abfrage ausgeführt wird. Die Wartezeit für die einzelnen SELECT-Anweisungen ist von der Replikationsverzögerung zwischen dem primären und den sekundären Clustern abhängig.

mysql> set aurora_replica_read_consistency = 'global'; mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.75 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.37 sec) mysql> select count(*) from t1; +----------+ | count(*) | +----------+ | 8 | +----------+ 1 row in set (0.66 sec)

Ausführen mehrteiliger Anweisungen mit Schreibweiterleitung in Aurora My SQL

Eine DML Anweisung kann aus mehreren Teilen bestehen, z. B. aus einer INSERT ... SELECT Anweisung oder einer DELETE ... WHERE Anweisung. In diesem Fall wird die gesamte Anweisung an den primären Cluster weitergeleitet und dort ausgeführt.

Transaktionen mit Schreibweiterleitung in Aurora My SQL

Ob die Transaktion an den primären Cluster weitergeleitet wird, ist vom Zugriffsmodus der Transaktion abhängig. Sie können den Zugriffsmodus für die Transaktion durch Verwendung der Anweisungen SET TRANSACTION oder START TRANSACTION angeben. Sie können den Transaktionszugriffsmodus auch angeben, indem Sie den Wert der Sitzungsvariablen transaction_read_only ändern. Sie können diesen Sitzungswert nur ändern, wenn Sie mit einem DB-Cluster verbunden sind, für den die Schreibweiterleitung aktiviert ist.

Wenn eine Transaktion mit langer Laufzeit für einen beträchtlichen Zeitraum keine Anweisung ausgibt, kann sie Leerlaufzeitüberschreitung überschreiten. Dieser Zeitraum hat einen Standardwert von einer Minute. Sie können den Wert auf bis zu einem Tag erhöhen. Eine Transaktion, die die Leerlaufzeitüberschreitung überschreitet, wird vom primären Cluster abgebrochen. Die nächste nachfolgende Anweisung, die Sie übermitteln, empfängt einen Zeitüberschreitungsfehler. In diesem Fall rollt Aurora die Transaktion zurück.

Diese Art von Fehler kann in anderen Fällen auftreten, wenn die Schreibweiterleitung nicht mehr verfügbar ist. Beispielsweise bricht Aurora alle Transaktionen ab, die Schreibweiterleitung verwenden, wenn Sie den primären Cluster neu starten oder die Konfigurationseinstellung für die Schreibweiterleitung deaktivieren.

Konfigurationsparameter für die Schreibweiterleitung in Aurora My SQL

Die Aurora-Cluster-Parametergruppen enthalten Einstellungen für die Schreibweiterleitung. Da es sich um Cluster-Parameter handelt, haben alle DB-Instances in allen Clustern die gleichen Werte für diese Variablen. Details zu diesen Parametern sind in der folgenden Tabelle zusammengefasst, mit Nutzungshinweisen unterhalb der Tabelle.

Name Scope Typ Standardwert Zulässige Werte
aurora_fwd_master_idle_timeout(Aurora Meine SQL Version 2) Global Ganzzahl ohne Vorzeichen 60 1 – 86.400
aurora_fwd_master_max_connections_pct(Aurora Meine SQL Version 2) Global Lange Ganzzahl ohne Vorzeichen 10 0 – 90
aurora_fwd_writer_idle_timeout(Aurora Meine SQL Version 3) Global Ganzzahl ohne Vorzeichen 60 1 – 86.400
aurora_fwd_writer_max_connections_pct(Aurora Meine SQL Version 3) Global Lange Ganzzahl ohne Vorzeichen 10 0 – 90
aurora_replica_read_consistency Sitzung Enum '' (null) EVENTUAL, SESSION, GLOBAL

Um eingehende Schreibanforderungen aus sekundären Clustern zu steuern, verwenden Sie die folgenden Einstellungen auf dem primären Cluster:

  • aurora_fwd_master_idle_timeout, aurora_fwd_writer_idle_timeout: Die Anzahl der Sekunden, die der primäre Cluster auf Aktivität für eine Verbindung wartet, die aus einem sekundären Cluster weitergeleitet wird, bevor er sie schließt. Wenn die Sitzung über diesen Zeitraum hinaus im Leerlauf ist, bricht Aurora die Sitzung ab.

  • aurora_fwd_master_max_connections_pct, aurora_fwd_writer_max_connections_pct: Die obere Grenze für Datenbankverbindungen, die in einer Writer-DB-Instance für die Verarbeitung von Abfragen verwendet werden können, die von Lesern weitergeleitet werden. Sie wird als Prozentsatz der Einstellung max_connections für die Writer-DB-Instance im primären Cluster ausgedrückt. Wenn beispielsweise max_connections 800 ist und aurora_fwd_master_max_connections_pct oder aurora_fwd_writer_max_connections_pct 10 ist, lässt der Writer maximal 80 weitergeleitete Sitzungen gleichzeitig zu. Diese Verbindungen stammen aus demselben, von der Einstellung max_connections verwalteten Verbindungspool.

    Diese Einstellung gilt nur für den primären Cluster, wenn für mindestens einen sekundären Cluster die Schreibweiterleitung aktiviert ist. Wenn Sie den Wert verringern, sind vorhandene Verbindungen nicht betroffen. Aurora berücksichtigt den neuen Wert der Einstellung, wenn versucht wird, eine neue Verbindung aus einem sekundären Cluster zu erstellen. Der Standardwert ist 10, was 10 % des Werts für max_connections entspricht. Wenn Sie die Abfrageweiterleitung für einen der sekundären Cluster aktivieren, muss diese Einstellung einen Wert ungleich Null haben, damit Schreiboperationen aus sekundären Clustern erfolgreich ausgeführt werden können. Wenn der Wert null ist, empfangen die Schreiboperationen den Fehlercode ER_CON_COUNT_ERROR mit der Meldung Not enough connections on writer to handle your request.

Der Parameter aurora_replica_read_consistency ist ein Parameter auf Sitzungsebene, der die Schreibweiterleitung ermöglicht. Sie benutzen ihn in jeder Sitzung. Sie können EVENTUAL, SESSION oder GLOBAL als Lesekonsistenzstufe angeben. Weitere Informationen über Konsistenzebenen finden Sie unter Isolation und Konsistenz für die Schreibweiterleitung in Aurora My SQL. Für diesen Parameter gelten die folgenden Regeln:

  • Dies ist ein Parameter auf Sitzungsebene. Der Standardwert ist '' (leer).

  • Die Schreibweiterleitung ist in einer Sitzung nur verfügbar, wenn aurora_replica_read_consistency auf EVENTUAL, SESSION oder GLOBAL festgelegt ist. Dieser Parameter ist nur in Reader-Instances sekundärer Cluster relevant, für die Schreibweiterleitung aktiviert ist und die sich in einer Aurora Global Database befinden.

  • Sie können diese Variable (wenn leer) oder nicht eingestellt (wenn sie bereits festgelegt ist) nicht innerhalb einer Multistatement-Transaktion setzen. Sie können sie jedoch während einer solchen Transaktion von einem gültigen Wert (EVENTUAL, SESSION oder GLOBAL) in einen anderen gültigen Wert (EVENTUAL, SESSION oder GLOBAL) ändern.

  • Die Variable darf nicht SET sein, wenn die Schreibweiterleitung auf dem sekundären Cluster nicht aktiviert ist.

  • Das Festlegen der Sitzungsvariablen auf einem primären Cluster hat keine Auswirkungen. Wenn Sie versuchen, diese Variable in einem primären Cluster zu ändern, wird eine Fehlermeldung angezeigt.

CloudWatch Amazon-Metriken für die Weiterleitung von Schreibvorgängen in Aurora My SQL

Die folgenden CloudWatch Amazon-Metriken und Aurora SQL My-Statusvariablen gelten für den primären Cluster, wenn Sie die Schreibweiterleitung auf einem oder mehreren sekundären Clustern verwenden. Diese Metriken werden alle auf der Writer-DB-Instance im primären Cluster gemessen.

CloudWatch Metrik Aurora Meine SQL Statusvariable Einheit Beschreibung

AuroraDMLRejectedMasterFull

Anzahl

Die Anzahl der weitergeleiteten Abfragen, die abgelehnt wurden, weil die Sitzung auf der Writer-DB-Instance voll ist.

Für Aurora My SQL Version 2.

AuroraDMLRejectedWriterFull

Anzahl

Die Anzahl der weitergeleiteten Abfragen, die abgelehnt wurden, weil die Sitzung auf der Writer-DB-Instance voll ist.

Für Aurora My SQL Version 3.

ForwardingMasterDMLLatency

Millisekunden

Durchschnittliche Verarbeitungszeit für jede weitergeleitete DML Anweisung auf der Writer-DB-Instance.

Nicht enthalten ist die Zeit, die der sekundäre Cluster benötigt, um die Schreibanforderung weiterzuleiten, oder die Zeit, um Änderungen zurück an den sekundären Cluster zu replizieren.

Für Aurora My SQL Version 2.

ForwardingMasterDMLThroughput

Anzahl pro Sekunde

Anzahl der weitergeleiteten DML Anweisungen, die jede Sekunde von dieser Writer-DB-Instance verarbeitet werden.

Für Aurora My SQL Version 2.

ForwardingMasterOpenSessions

Aurora_fwd_master_open_sessions Anzahl

Anzahl der weitergeleiteten Sitzungen auf der Writer-DB-Instance.

Für Aurora My SQL Version 2.

Aurora_fwd_master_dml_stmt_count Anzahl

Gesamtzahl der DML Anweisungen, die an diese Writer-DB-Instance weitergeleitet wurden.

Für Aurora My SQL Version 2.

Aurora_fwd_master_dml_stmt_duration Mikrosekunden

Gesamtdauer der an diese Writer-DB-Instance weitergeleiteten DML Anweisungen.

Für Aurora My SQL Version 2.

Aurora_fwd_master_select_stmt_count Anzahl

Gesamtzahl der SELECT-Anweisungen, die an diese Writer-DB-Instance weitergeleitet werden.

Für Aurora My SQL Version 2.

Aurora_fwd_master_select_stmt_duration Mikrosekunden

Gesamtdauer der SELECT-Anweisungen, die an diese Writer-DB-Instance weitergeleitet werden.

Für Aurora My SQL Version 2.

ForwardingWriterDMLLatency

Millisekunden

Durchschnittliche Verarbeitungszeit für jede weitergeleitete DML Anweisung auf der Writer-DB-Instance.

Nicht enthalten ist die Zeit, die der sekundäre Cluster benötigt, um die Schreibanforderung weiterzuleiten, oder die Zeit, um Änderungen zurück an den sekundären Cluster zu replizieren.

Für Aurora My SQL Version 3.

ForwardingWriterDMLThroughput

Anzahl pro Sekunde

Anzahl der weitergeleiteten DML Anweisungen, die jede Sekunde von dieser Writer-DB-Instance verarbeitet werden.

Für Aurora My SQL Version 3.

ForwardingWriterOpenSessions

Aurora_fwd_writer_open_sessions Anzahl

Anzahl der weitergeleiteten Sitzungen auf der Writer-DB-Instance.

Für Aurora My SQL Version 3.

Aurora_fwd_writer_dml_stmt_count Anzahl

Gesamtzahl der DML Anweisungen, die an diese Writer-DB-Instance weitergeleitet wurden.

Für Aurora My SQL Version 3.

Aurora_fwd_writer_dml_stmt_duration Mikrosekunden Gesamtdauer der an diese Writer-DB-Instance weitergeleiteten DML Anweisungen.

Aurora_fwd_writer_select_stmt_count Anzahl

Gesamtzahl der SELECT-Anweisungen, die an diese Writer-DB-Instance weitergeleitet werden.

Für Aurora My SQL Version 3.

Aurora_fwd_writer_select_stmt_duration Mikrosekunden

Gesamtdauer der SELECT-Anweisungen, die an diese Writer-DB-Instance weitergeleitet werden.

Für Aurora My SQL Version 3.

Die folgenden CloudWatch Metriken und Aurora SQL My-Statusvariablen gelten für jeden sekundären Cluster. Diese Metriken werden auf jeder Reader-DB-Instance in einem sekundären Cluster mit aktivierter Schreibweiterleitung gemessen.

CloudWatch Metrik Aurora Meine SQL Statusvariable Einheit Beschreibung

ForwardingReplicaDMLLatency

Millisekunden Durchschnittliche Antwortzeit von Forward DMLs auf dem Replikat.

ForwardingReplicaDMLThroughput

Anzahl pro Sekunde Anzahl der weitergeleiteten DML Anweisungen, die pro Sekunde verarbeitet wurden.

ForwardingReplicaOpenSessions

Aurora_fwd_replica_open_sessions Anzahl Die Anzahl der Sitzungen, die die Schreibweiterleitung für eine Reader-DB-Instance verwenden.

ForwardingReplicaReadWaitLatency

Millisekunden

Durchschnittliche Wartezeit, die eine SELECT-Anweisung in einer Reader-DB-Instance darauf wartet, zum primären Cluster aufzuholen.

Der Grad, in dem die Reader-DB-Instance vor der Verarbeitung einer Abfrage wartet, ist von der Einstellung aurora_replica_read_consistency abhängig.

ForwardingReplicaReadWaitThroughput

Anzahl pro Sekunde Gesamtzahl der pro Sekunde in allen Sitzungen verarbeiteten SELECT-Anweisungen, die Schreibvorgänge weiterleiten.

ForwardingReplicaSelectLatency

(–) Millisekunden Weitergeleitete SELECT-Latenz, Durchschnitt über alle weitergeleiteten SELECT-Anweisungen innerhalb des Überwachungszeitraums.

ForwardingReplicaSelectThroughput

Anzahl pro Sekunde Weitergeleiteter SELECT-Durchsatz, pro Sekunde, als Durchschnitt innerhalb des Überwachungszeitraums.

Aurora_fwd_replica_dml_stmt_count Anzahl Gesamtzahl der DML Anweisungen, die von dieser Reader-DB-Instance weitergeleitet wurden.

Aurora_fwd_replica_dml_stmt_duration Mikrosekunden Gesamtdauer aller DML Anweisungen, die von dieser Reader-DB-Instance weitergeleitet wurden.

Aurora_fwd_replica_errors_session_limit Anzahl

Anzahl der Sitzungen, die vom primären Cluster aufgrund einer der folgenden Fehlerbedingungen zurückgewiesen wurden:

  • Writer voll

  • Es sind zu viele weitergeleitete Anweisungen in Bearbeitung.

Aurora_fwd_replica_read_wait_count Anzahl Gesamtzahl der read-after-write Wartezeiten auf dieser Reader-DB-Instance.

Aurora_fwd_replica_read_wait_duration Mikrosekunden Gesamtdauer der Wartezeiten aufgrund der Lesekonsistenzeinstellung auf dieser Reader-DB-Instance.

Aurora_fwd_replica_select_stmt_count Anzahl Gesamtzahl der SELECT-Anweisungen, die aus dieser Reader-DB-Instance weitergeleitet werden.

Aurora_fwd_replica_select_stmt_duration Mikrosekunden Gesamtdauer der SELECT-Anweisungen, die aus dieser Reader-DB-Instance weitergeleitet werden.