

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.

# Transaktions-Timeout in Amazon Aurora MySQL
<a name="AuroraMySQL.TransactionTimeout"></a>

Der `aurora_transaction_timeout` Parameter legt die maximale Dauer für eine Transaktion fest. Dieser Parameter kann verhindern, dass Transaktionen mit langer Laufzeit (aktiv oder inaktiv) die [ InnoDB-Bereinigung blockieren](https://dev.mysql.com/doc/refman/8.4/en/glossary.html#glos_purge), was zu Leistungsproblemen führen kann. Dieser Parameter ist in Aurora MySQL Version 8.4.8 und höher verfügbar.

**Topics**
+ [Einzelheiten des Parameters](#AuroraMySQL.TransactionTimeout.parameter-details)
+ [Timeout-Verhalten](#AuroraMySQL.TransactionTimeout.behavior)
+ [Beispiele](#AuroraMySQL.TransactionTimeout.examples)
+ [Wichtige Hinweise](#AuroraMySQL.TransactionTimeout.key-notes)
+ [Fehler auf dem Client](#AuroraMySQL.TransactionTimeout.client-error)
+ [Fehler-log](#AuroraMySQL.TransactionTimeout.error-log)
+ [Überwachung von Timeouts bei Transaktionen](#AuroraMySQL.TransactionTimeout.monitoring)
+ [Interaktion mit anderen Timeouts](#AuroraMySQL.TransactionTimeout.interaction)

## Einzelheiten des Parameters
<a name="AuroraMySQL.TransactionTimeout.parameter-details"></a>

Der `aurora_transaction_timeout` Parameter beendet jede InnoDB-Transaktion, die länger als die angegebene Dauer dauert, einschließlich schreibgeschützter Transaktionen. Sie geben den Wert in Sekunden an. Ein Wert von Null (Standardeinstellung) deaktiviert den Timeout.

In der folgenden Tabelle sind die Parameterdetails zusammengefasst.


| Eigenschaft | Wert | 
| --- | --- | 
| Name | aurora\_transaction\_timeout | 
| Scope | Sitzung, global | 
| Standard | 0 (deaktiviert) | 
| Einheit | Sekunden | 
| Dynamisch | Ja, gilt nur für neue InnoDB-Transaktionen | 

Sie können den `aurora_transaction_timeout` Parameter auf Cluster-, Instanz- oder Sitzungsebene festlegen. Weitere Informationen zum Arbeiten mit Parametergruppen finden Sie unter[Parametergruppen für Amazon Aurora](USER_WorkingWithParamGroups.md).

## Timeout-Verhalten
<a name="AuroraMySQL.TransactionTimeout.behavior"></a>

Der `aurora_transaction_timeout` Parameter gilt für InnoDB-Transaktionen, die DML-Anweisungen ausführen, einschließlich schreibgeschützter Transaktionen. Alle [ impliziten Commit-Anweisungen ](https://dev.mysql.com/doc/refman/8.4/en/implicit-commit.html) außer `CREATE TABLE .. AS SELECT` (CTAS) und `LOAD DATA` sind vom Timeout ausgeschlossen. Der Timeout-Wert wird erfasst, wenn die erste InnoDB-Anweisung ausgeführt wird. Der Wert bleibt für die gesamte Lebensdauer dieser Transaktion fest.

Wenn das Timeout abläuft, hängt das Ergebnis vom Transaktionsstatus ab:
+ Wenn die Transaktion eine aktive Abfrage enthält, wird die Abfrage unterbrochen und die Transaktion wird rückgängig gemacht. Die Verbindung bleibt nutzbar.
+ Wenn keine aktive Abfrage vorhanden ist (d. h. die Transaktion ist inaktiv), wird die Verbindung beendet.

## Beispiele
<a name="AuroraMySQL.TransactionTimeout.examples"></a>

Die folgenden Beispiele zeigen, wann der Timer für verschiedene Transaktionsszenarien startet.

### Explizite Transaktion
<a name="AuroraMySQL.TransactionTimeout.examples.explicit"></a>

```
BEGIN;                    -- Does NOT start InnoDB transaction. No timer.
SELECT * FROM t1;         -- Starts InnoDB transaction. Timer starts HERE (at statement 2).
```

Der Timer beginnt bei Anweisung 2 (der ersten InnoDB-Anweisung).

### autocommit=0
<a name="AuroraMySQL.TransactionTimeout.examples.autocommit"></a>

```
SET SESSION autocommit=0;  -- No transaction yet
SELECT * FROM t1;          -- Starts InnoDB transaction. Timer starts HERE.
INSERT INTO t1 ...;        -- Same transaction, timer still running from step 2.
```

Der Timer beginnt bei Anweisung 2 (die erste InnoDB-Anweisung nach Autocommit ist deaktiviert).

### Gespeicherte Prozeduren
<a name="AuroraMySQL.TransactionTimeout.examples.stored-procs"></a>

Eine gespeicherte Prozedur wird im Transaktionskontext des Aufrufers ausgeführt. Wenn der Aufrufer bereits eine aktive InnoDB-Transaktion hat, wurde der Timer bereits vor dem Prozeduraufruf gestartet. Wenn die Prozedur als erstes InnoDB berührt, beginnt der Timer bei der ersten InnoDB-Anweisung innerhalb der Prozedur.

```
BEGIN;
CALL my_proc();  -- If my_proc() does SELECT/INSERT, timer starts at that first InnoDB statement inside the proc
```

## Wichtige Hinweise
<a name="AuroraMySQL.TransactionTimeout.key-notes"></a>
+ **Timeout wird beim Transaktionsstart erfasst ** — Der Timeout-Wert wird erfasst, wenn die erste InnoDB-Anweisung ausgeführt wird. Änderungen `aurora_transaction_timeout` während einer Transaktion werden bei der nächsten Transaktion wirksam, nicht bei der aktuellen. Es wird keine Warnung ausgegeben.
+ **XA PREPARED-Transaktionen sind ausgeschlossen ** — Vorbereitete Transaktionen unterliegen nicht`aurora_transaction_timeout`.
+ **Bei Schreibweiterleitungssitzungen kommt es nicht zu einem Transaktions-Timeout ** — Wenn die Schreibweiterleitung aktiviert ist, unterliegt jede Anweisung oder Transaktion, die eine weitergeleitete Anweisung enthält, diesen Bedingungen nicht. `aurora_transaction_timeout` Bei nachfolgenden Transaktionen in derselben Sitzung, die keine weitergeleiteten Anweisungen enthalten, kommt es wie gewohnt zu einem Timeout. Um das Leerlaufzeitlimit für weitergeleitete Transaktionen zu kontrollieren, können Sie den `aurora_fwd_writer_idle_timeout` Parameter verwenden. Weitere Informationen finden Sie unter [Konfigurationsparameter für die Schreibweiterleitung in Aurora MySQL](aurora-global-database-write-forwarding-ams.md#aurora-global-database-write-forwarding-params-ams).
+ **Seien Sie vorsichtig bei hohen Timeout-Werten ** — Wenn eine Transaktion mit langer Laufzeit zurückgesetzt wird, kann das Rollback um ein Vielfaches länger dauern als die ursprünglichen Datenänderungsvorgänge. Das Beenden des Datenbankprozesses hilft nicht, da das Rollback beim Serverstart neu gestartet wird. Wählen Sie einen Timeout-Wert, der Ihren Workload-Bedarf gegen die Rollback-Kosten abwägt. Weitere Informationen finden Sie in der MySQL-Dokumentation unter [ Optimieren des ](https://dev.mysql.com/doc/refman/8.4/en/optimizing-innodb-transaction-management.html) InnoDB-Transaktionsmanagements.

## Fehler auf dem Client
<a name="AuroraMySQL.TransactionTimeout.client-error"></a>

Wenn eine Transaktion mit einer aktiven Abfrage das Timeout überschreitet, erhält der Client die folgende Fehlermeldung:

```
ERROR 63952 (40001): Transaction exceeded maximum allowed duration of <N> seconds and was rolled back. See aurora_transaction_timeout for configuring this behavior.
```

Wenn eine inaktive Transaktion den Timeout überschreitet, erhält die nachfolgende Abfrage denselben Fehler wie bei der MySQL-Fehlermeldung „Server ist weg“. Weitere Informationen finden Sie unter [ MySQL server has gone away ](https://dev.mysql.com/doc/refman/8.4/en/gone-away.html) in der MySQL-Dokumentation.

## Fehler-log
<a name="AuroraMySQL.TransactionTimeout.error-log"></a>

Eine Informationsmeldung wird in das Datenbank-Fehlerprotokoll geschrieben, wenn ein Transaktions-Timeout auftritt:

```
[Note] Transaction breached timeout threshold and will be rolled back, if still in progress. If idle, the connection will be aborted. Check response for confirmation. connection_id: 4821, trx_id: 28193, user: app_user, timeout: 5 seconds, duration: 7 seconds
```

**Anmerkung**  
Diese Protokollnachricht dient nur zu Diagnosezwecken. Verlassen Sie sich auf die Antwort des Kunden als definitiven Indikator für eine Transaktion, bei der das Zeitlimit überschritten wurde.

## Überwachung von Timeouts bei Transaktionen
<a name="AuroraMySQL.TransactionTimeout.monitoring"></a>

Verwenden Sie die `Aurora_transaction_timeouts` Statusvariable, um zu verfolgen, bei wie vielen Transaktionen seit dem Neustart der DB-Instance ein Timeout aufgetreten ist.

```
SHOW GLOBAL STATUS LIKE 'Aurora_transaction_timeouts';
```

Wenn diese Option aktiviert `performance_schema` ist, wird der Timeout-Fehler (`ER_AURORA_TRANSACTION_TIMEOUT_ERROR`) auch in Tabellen `performance_schema.events_errors_summary_global_by_error` und verwandten Tabellen nachverfolgt. Beachten Sie, dass nur aktive Transaktions-Timeouts diesen Zähler erhöhen; inaktive Transaktions-Timeouts beenden die Verbindung, ohne dass der Fehler ausgelöst wird. `ER_AURORA_TRANSACTION_TIMEOUT_ERROR`

## Interaktion mit anderen Timeouts
<a name="AuroraMySQL.TransactionTimeout.interaction"></a>

Das `aurora_transaction_timeout` funktioniert parallel zu den vorhandenen Timeout-Parametern. Wenn eine Transaktion länger als konfiguriert geöffnet bleibt`aurora_transaction_timeout`, wird sie unabhängig von anderen Timeout-Einstellungen beendet. Ob andere Timeouts die Transaktion ebenfalls rückgängig machen, hängt von ihrer eigenen Implementierung ab. Einzelheiten zu diesen Parametern finden Sie in der MySQL-Dokumentation.