Serialisierung und Warteschlangensteuerung für gleichzeitige implizite Transaktionen

Eine implizite Transaktion ist eine einzelne SQL-Anweisung, die nicht in einer BEGIN-Anweisung enthalten ist.

Fehlschlagen der Serialisierung einer impliziten Transaktion

Das System antwortet wie folgt auf eine implizite Transaktion, durch die die Serialisierung fehlschlägt:
  • Das System wartet auf den Abschluss der Transaktion, die den Serialisierungskonflikt verursacht hat.
  • Nach dem Beenden dieser Transaktion durch Commit oder Abbruch übergibt das System die wartenden Anforderungen erneut.

Überschreiten des Anzahllimits impliziter Transaktionen

Wenn das System ein Limit von 63 gleichzeitigen Lese-/Schreibtransaktionen erreicht und wenn eine implizite Transaktion ausgegeben wird, die versucht, Daten zu modifizieren, speichert das System die Transaktion und stellt sie in die Warteschlange, bis die Anzahl gleichzeitiger Lese-/Schreibtransaktionen unter das Limit fällt.

Standardzeitlimit modifizieren

Das System speichert implizite Transaktionen und stellt sie bis zu 360 Minuten lang (Standardeinstellung) in die Warteschlange. Wenn eine implizite Transaktion länger als 360 Minuten (oder sechs Stunden) wartet, schlägt die Transaktion fehl und gibt die FehlermeldungERROR: Too many concurrent transactions. Sie können diese Standard-Timeout-Einstellung auf zwei Arten ändern:
  • Setzen Sie den folgenden Befehl ab, um den Wert für die aktuelle Sitzung festzulegen:
    SET serialization_queue_timeout = <number of minutes>
  • Legen Sie die Variable serialization_queue_timeout in postgresql.conf fest, um die Einstellung global einzurichten.