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.
Vermeiden Sie das Anheften eines RDS-Proxys
Multiplexing ist effizienter, wenn Datenbankanforderungen nicht auf Statusinformationen aus früheren Anforderungen angewiesen sind. In diesem Fall kann RDS Proxy eine Verbindung zum Abschluss jeder Transaktion wiederverwenden. Beispiele für solche Zustandsinformationen sind die meisten Variablen und Konfigurationsparameter, die Sie durch SET
-oder SELECT
-Anweisungen ändern können. SQL-Transaktionen auf einer Clientverbindung können standardmäßig zwischen zugrunde liegenden Datenbankverbindungen Multiplexing durchführen.
Ihre Verbindungen zum Proxy können einen Status eingeben, der als Pinning (Fixieren) bezeichnet wird. Wenn eine Verbindung angeheftet wird, verwendet jede spätere Transaktion dieselbe zugrunde liegende Datenbankverbindung, bis die Sitzung beendet ist. Andere Clientverbindungen können diese Datenbankverbindung auch erst dann wieder verwenden, wenn die Sitzung beendet ist. Die Sitzung wird beendet, wenn die Clientverbindung unterbrochen wird.
RDS Proxy heftet automatisch eine Clientverbindung an eine bestimmte DB-Verbindung an, wenn eine Sitzungsstatusänderung erkannt wird, die für andere Sitzungen nicht geeignet ist. Das Fixieren verringert die Effektivität der Wiederverwendung der Verbindung. Wenn alle oder fast alle Verbindungen fixiert sind, können Sie Ihren Anwendungscode oder Ihre Workload ändern, um dafür zu sorgen, dass Fixierungen weniger erforderlich sind.
Ihre Anwendung ändert beispielsweise eine Sitzungsvariable oder einen Konfigurationsparameter. In diesem Fall können sich spätere Anweisungen darauf verlassen, dass die neue Variable oder der neue Parameter wirksam ist. Wenn also RDS Proxy Anforderungen verarbeitet, um Sitzungsvariablen oder Konfigurationseinstellungen zu ändern, wird diese Sitzung an die DB-Verbindung fixiert. Auf diese Weise bleibt der Sitzungsstatus für alle späteren Transaktionen in derselben Sitzung gültig.
Bei Datenbank-Engines gilt diese Regel nicht für alle Parameter, die Sie festlegen können. RDS Proxy verfolgt bestimmte Anweisungen und Variablen. Daher fixiert RDS Proxy die Sitzung nicht, wenn Sie sie ändern. In diesem Fall verwendet RDS Proxy nur die Verbindung für andere Sitzungen erneut, die dieselben Werte für diese Einstellungen haben. Einzelheiten darüber, welche Daten RDS-Proxy für eine Datenbank-Engine verfolgt, finden Sie im Folgenden:
Welche Daten RDS-Proxy für Datenbanken von RDS für SQL Server verfolgt
RDS Proxy verfolgt die folgenden SQL Server-Anweisungen:
USE
SET ANSI_NULLS
SET ANSI_PADDING
SET ANSI_WARNINGS
SET ARITHABORT
SET CONCAT_NULL_YIELDS_NULL
SET CURSOR_CLOSE_ON_COMMIT
SET DATEFIRST
SET DATEFORMAT
SET LANGUAGE
SET LOCK_TIMEOUT
SET NUMERIC_ROUNDABORT
SET QUOTED_IDENTIFIER
SET TEXTSIZE
SET TRANSACTION ISOLATION LEVEL
Welche Daten RDS-Proxy für Datenbanken von RDS für MariaDB und RDS für MySQL verfolgt
RDS Proxy verfolgt die folgenden MariaDB- und MySQL-Anweisungen:
DROP DATABASE
DROP SCHEMA
USE
RDS Proxy verfolgt die folgenden MySQL- und MariaDB-Variablen:
AUTOCOMMIT
AUTO_INCREMENT_INCREMENT
CHARACTER SET (or CHAR SET)
CHARACTER_SET_CLIENT
CHARACTER_SET_DATABASE
CHARACTER_SET_FILESYSTEM
CHARACTER_SET_CONNECTION
CHARACTER_SET_RESULTS
CHARACTER_SET_SERVER
COLLATION_CONNECTION
COLLATION_DATABASE
COLLATION_SERVER
INTERACTIVE_TIMEOUT
NAMES
NET_WRITE_TIMEOUT
QUERY_CACHE_TYPE
SESSION_TRACK_SCHEMA
SQL_MODE
TIME_ZONE
TRANSACTION_ISOLATION (or TX_ISOLATION)
TRANSACTION_READ_ONLY (or TX_READ_ONLY)
WAIT_TIMEOUT
Anmerkung
RDS Proxy verfolgt Änderungen an den TRANSACTION_READ_ONLY
Variablen TRANSACTION_ISOLATION
und, wenn Sie sie im Sitzungsbereich festlegen. Wenn Sie sie jedoch für den nächsten Transaktionsbereich festlegen, verbindet der RDS-Proxy die Verbindungen. Dieses Verhalten gilt unabhängig davon, ob Sie eine SET
Anweisung oder eine SET
TRANSACTION
Anweisung verwenden, um diese Werte zu konfigurieren.
Minimieren des Fixierens
Die Leistungsoptimierung für RDS Proxy beinhaltet den Versuch, die Wiederverwendung von Verbindungen auf Transaktionsebene (Multiplexing) zu maximieren, indem das Fixieren minimiert wird.
Sie können das Fixieren wie folgt minimieren:
-
Vermeiden Sie unnötige Datenbankanforderungen, die Anheften (Pinning) verursachen könnten.
-
Legen Sie Variablen und Konfigurationseinstellungen konsistent über alle Verbindungen hinweg fest. Auf diese Weise verwenden spätere Sitzungen häufiger Verbindungen, die über diese speziellen Einstellungen verfügen.
Wenn für PostgreSQL jedoch eine Variable festgelegt wird, wird die Sitzung durch Pinning fixiert.
-
Wenden Sie bei einer MySQL-Engine-Familiendatenbank einen Sitzungs-Pinning-Filter auf den Proxy an. Sie können bestimmte Arten von Operationen vom Fixieren der Sitzung ausnehmen, wenn Sie wissen, dass dies den korrekten Betrieb Ihrer Anwendung nicht beeinträchtigt.
-
Sehen Sie sich anhand der CloudWatch Amazon-Metrik
DatabaseConnectionsCurrentlySessionPinned
an, wie häufig das Anheften erfolgt. Hinweise zu diesen und anderen CloudWatch-Metriken finden Sie unter Überwachung von RDS-Proxy-Metriken mit Amazon CloudWatch. -
Wenn Sie
SET
-Anweisungen verwenden, um eine identische Initialisierung für jede Clientverbindung durchzuführen, können Sie dies tun, während Sie das Multiplexing auf Transaktionsebene beibehalten. In diesem Fall verschieben Sie die Anweisungen, die den ursprünglichen Sitzungsstatus einrichten, in die Initialisierungsabfrage, die von einem Proxy verwendet wird. Diese Eigenschaft ist eine Zeichenfolge, die eine oder mehrere SQL-Anweisungen enthält, die durch Semikola getrennt sind.Beispielsweise können Sie eine Initialisierungsabfrage für einen Proxy definieren, der bestimmte Konfigurationsparameter festlegt. RDS Proxy wendet dann diese Einstellungen an, wenn eine neue Verbindung für diesen Proxy eingerichtet wird. Sie können die entsprechenden
SET
-Anweisungen aus Ihrem Anwendungscode entfernen, damit sie das Multiplexing auf Transaktionsebene nicht beeinträchtigen.Metriken zur Häufigkeit des Pinnings für einen Proxy finden Sie unter Überwachung von RDS-Proxy-Metriken mit Amazon CloudWatch.
Bedingungen, die für alle Engine-Familien zum Pinning führen
Der Proxy fixiert die Sitzung an der aktuellen Verbindung in den folgenden Situationen an, in denen Multiplexing unerwartetes Verhalten verursachen kann:
Jede Anweisung mit einer Textgröße über 16 KB bewirkt, dass der Proxy die Sitzung fixiert.
Bedingungen, die das Fixieren für RDS für Microsoft SQL Server verursachen
Bei RDS für SQL Server verursachen die folgenden Interaktionen eine Fixierung:
Verwendung mehrerer aktiver Ergebnissätze (MARS). Weitere Informationen zu MARS finden Sie in der SQL-Server
-Dokumentation. Verwendung der Kommunikation mit verteiltem Transaktionskoordinator (DTC).
Erstellen von temporären Tabellen, Transaktionen, Cursor oder vorbereiteten Anweisungen.
Verwenden der folgenden
SET
-Anweisungen:SET ANSI_DEFAULTS
SET ANSI_NULL_DFLT
SET ARITHIGNORE
SET DEADLOCK_PRIORITY
SET FIPS_FLAGGER
SET FMTONLY
SET FORCEPLAN
SET IDENTITY_INSERT
SET NOCOUNT
SET NOEXEC
SET OFFSETS
SET PARSEONLY
SET QUERY_GOVERNOR_COST_LIMIT
SET REMOTE_PROC_TRANSACTIONS
SET ROWCOUNT
SET SHOWPLAN_ALL
,SHOWPLAN_TEXT
undSHOWPLAN_XML
SET STATISTICS
SET XACT_ABORT
Bedingungen, die das Fixieren für RDS für MariaDB und RDS für MySQL verursachen
Für MariaDB und MySQL führen die folgenden Interaktionen auch zum Pinning:
-
Die expliziten MySQL-Anweisungen
LOCK TABLE
,LOCK TABLES
oderFLUSH TABLES WITH READ LOCK
bewirken, dass der Proxy ein Pinning der Sitzung vornimmt. -
Durch Erstellen benannter Sperren mit
GET_LOCK
wird bewirkt, dass der Proxy ein Pinning der Sitzung vornimmt. -
Durch das Setzen einer Benutzer- oder Systemvariablen (mit einigen Ausnahmen) wird die Sitzung an den Proxy gebunden. Wenn dadurch die Wiederverwendung von Verbindungen erheblich eingeschränkt wird, können Sie
SET
Vorgänge so konfigurieren, dass das Anheften vermieden wird. Passen Sie dazu die Eigenschaft Sitzungsanheftungsfilter an. Weitere Informationen erhalten Sie unter Einen Proxy für Amazon RDS — erstellen und Ändern eines RDS Proxy. -
Beim Erstellen einer temporären Tabelle fixiert der Proxy die Sitzung. Auf diese Weise wird der Inhalt der temporären Tabelle während der gesamten Sitzung beibehalten, unabhängig von den Transaktionsgrenzen.
-
Das Aufrufen der
FOUND_ROWS
FunktionenROW_COUNT
und führt manchmal zu einer Fixierung. -
Vorbereitete Anweisungen bewirken, dass der Proxy die Sitzung fixiert. Diese Regel bestimmt, ob die vorbereitete Anweisung SQL-Text oder das Binärprotokoll verwendet.
-
RDS Proxy pingt keine Verbindungen an, wenn Sie SET LOCAL verwenden.
-
Das Aufrufen von gespeicherten Prozeduren und gespeicherten Funktionen verursacht kein Pinning. RDS Proxy erkennt keine Änderungen des Sitzungsstatus, die aus solchen Aufrufen resultieren. Stellen Sie sicher, dass Ihre Anwendung den Sitzungsstatus in gespeicherten Routinen nicht ändert, wenn Sie darauf angewiesen sind, dass dieser Sitzungsstatus transaktionsübergreifend bestehen bleibt. Beispielsweise ist RDS Proxy derzeit nicht mit einer gespeicherten Prozedur kompatibel, die eine temporäre Tabelle erstellt, die für alle Transaktionen beibehalten wird.
Wenn Sie über eingehende Kenntnisse über das Verhalten Ihrer Anwendung verfügen, können Sie das Pinning-Verhalten für bestimmte Anwendungsanweisungen überspringen. Dazu wählen Sie beim Erstellen des Proxys die Option Sitzungs-Pinning-Filter. Derzeit können Sie das Sitzungs-Pinning für das Festlegen von Sitzungsvariablen und Konfigurationseinstellungen deaktivieren.
Bedingungen, die das Fixieren für RDS für PostgreSQL verursachen
Für PostgreSQL verursachen die folgenden Interaktionen eine Fixierung:
-
SET
Befehle verwenden. -
Verwendung von
EXECUTE
BefehlenPREPARE
DISCARD
DEALLOCATE
,, oder zur Verwaltung vorbereiteter Anweisungen. -
Erstellen temporärer Sequenzen, Tabellen oder Ansichten.
-
Cursor deklarieren.
-
Der Sitzungsstatus wird verworfen.
-
Abhören auf einem Benachrichtigungskanal.
-
Laden eines Bibliotheksmoduls wie
auto_explain
. -
Manipulieren von Sequenzen mit Funktionen wie
nextval
undsetval
. -
Interaktion mit Sperren mithilfe von Funktionen wie
pg_advisory_lock
undpg_try_advisory_lock
.Anmerkung
RDS Proxy legt keine Sicherheitssperren auf Transaktionsebene fest
pg_advisory_xact_lock
, insbesondere nicht aufpg_advisory_xact_lock_shared
pg_try_advisory_xact_lock
, undpg_try_advisory_xact_lock_shared
. -
Einstellung eines Parameters oder Zurücksetzen eines Parameters auf seine Standardwerte. Insbesondere die Verwendung von
set_config
BefehlenSET
und zum Zuweisen von Standardwerten zu Sitzungsvariablen. -
Das Aufrufen von gespeicherten Prozeduren und gespeicherten Funktionen verursacht kein Pinning. RDS Proxy erkennt keine Änderungen des Sitzungsstatus, die aus solchen Aufrufen resultieren. Stellen Sie sicher, dass Ihre Anwendung den Sitzungsstatus in gespeicherten Routinen nicht ändert, wenn Sie darauf angewiesen sind, dass dieser Sitzungsstatus transaktionsübergreifend beibehalten wird. Beispielsweise ist RDS Proxy derzeit nicht mit einer gespeicherten Prozedur kompatibel, die eine temporäre Tabelle erstellt, die für alle Transaktionen beibehalten wird.