View a markdown version of this page

Richtlinien zur Konfiguration - Amazon Relational Database Service

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.

Richtlinien zur Konfiguration

In diesem Abschnitt werden die in RDS Proxy verfügbaren Einstellungen beschrieben und bewährte Methoden für die Ausrichtung der Konfiguration im gesamten Anwendungsstapel beschrieben. Dies sind kombinierte Richtlinien für die Verwendung von RDS Proxy mit Amazon RDS und Amazon Aurora. RDS-specific und Aurora-specific Hinweise werden gegebenenfalls genannt.

Sofern nicht anders angegeben, beziehen sich die Begriffe „Datenbank“ oder „Ziel“ auf einen Aurora-Cluster, einen Amazon Multi-AZ RDS-DB-Cluster oder eine Amazon RDS-Instance.

Einstellungen für den RDS-Proxy

MaxConnectionsPercent

Mindestwert Maximaler Wert Standardwert
kleiner als (1, MaxIdleConnectionsPercent) 100 100

Weitere Informationen finden Sie unter MaxConnectionsPercent.

Diese Einstellung begrenzt die Anzahl der Verbindungen, die RDS Proxy mit der Zieldatenbank herstellen kann, als Prozentsatz der maximalen Anzahl von Verbindungen, die von der Datenbank zugelassen werden. Der Proxy öffnet Back-End-Verbindungen nach Bedarf, sodass die tatsächliche Anzahl von Verbindungen zu einem bestimmten Zeitpunkt unter dem konfigurierten Maximum liegen kann.

Da es sich bei der MaxConnectionsPercent Einstellung um einen Prozentsatz des Datenbankverbindungslimits handelt, folgt die Größe des Verbindungspools des Proxys automatisch der Datenbankkonfiguration. Das bedeutet, dass Sie Ihre Proxys nicht neu konfigurieren müssen, wenn Sie die Größe Ihrer Datenbankinstanzen ändern oder Konfigurationsänderungen vornehmen. Das bedeutet auch, dass Sie sich der Szenarien bewusst sein müssen, in denen sich die Datenbankeinstellungen ändern könnten, sei es implizit oder explizit:

Bewährte Methoden:

  • Die Standardeinstellung von 100 Prozent eignet sich für Datenbanken, die ihren gesamten Datenverkehr über den Proxy empfangen und keinen Spielraum für Administratorzugriff oder andere Clients benötigen.

  • Reduzieren Sie diese Einstellung, wenn die Datenbank auch Datenverkehr direkt von Anwendungen empfängt (unter Umgehung des Proxys) und Sie nicht möchten, dass der Proxy alle Verbindungen aufnimmt, oder wenn Sie eine bestimmte Anzahl von Verbindungen für andere Zwecke wie den direkten Zugriff durch Datenbankadministratoren reservieren möchten.

  • Wenn Sie RDS Proxy mit Aurora Global Database-Clustern verwenden und Write Forwarding aktiviert ist, reduzieren Sie den MaxConnectionsPercent Wert Ihres Proxys um das Kontingent, das für die Schreibweiterleitung zugewiesen ist. Einzelheiten finden Sie unter den Konfigurationsparametern für die Schreibweiterleitung in Aurora MySQL und Aurora PostgreSQL im Amazon Aurora Aurora-Benutzerhandbuch. Diese Empfehlung gilt unabhängig davon, ob der Proxy einen Cluster in der primären oder einer sekundären Region der globalen Datenbank bedient. Sekundäre Cluster können zur primären Rolle heraufgestuft werden. Es empfiehlt sich daher, die Proxyeinstellungen in der gesamten globalen Topologie konsistent zu halten. Sie können asymmetrische Einstellungen für Proxys verwenden, die primäre und sekundäre Regionen bedienen. Sie müssen diese Einstellungen jedoch nach jedem globalen Failover oder Switchover anpassen.

  • Wenn das Ziel mehrere Proxys bedient, darf der Gesamtwert aller MaxConnectionsPercent dieser Proxys 100 nicht überschreiten, damit die Datenbank nicht überlastet wird. Wir empfehlen die Verwendung eines einzigen Proxys pro Ziel, um die Konfiguration und Verwaltung zu vereinfachen. Insbesondere müssen Sie aus Redundanzgründen nicht mehrere Proxys pro Datenbank verwenden. Weitere Informationen finden Sie unter Verwenden mehrerer Proxys mit einem Ziel.

Unabhängig davon, ob Sie die MaxConnectionsPercent Standardeinstellung oder einen benutzerdefinierten Wert verwenden, sollten Sie zwischen der Anzahl der zulässigen Verbindungen und der zu Spitzenzeiten zu erwartenden maximalen Anzahl von Client-Verbindungen einen Spielraum von mindestens 30% einhalten. Beispiel:

  • Wenn Sie glauben, dass der Proxy bis zu 50% des für die Datenbank konfigurierten Verbindungslimits benötigt, verwenden Sie eine MaxConnectionsPercent Einstellung von mindestens1.3 * 50% = 65%.

  • Wenn Sie die MaxConnectionsPercent Standardeinstellung 100 verwenden, stellen Sie sicher, dass das Datenbanklimit selbst genügend Spielraum bietet.

Dieser zusätzliche Spielraum verbessert das Kundenerlebnis bei unerwarteten Arbeitslastspitzen und hilft RDS Proxy dabei, Verbindungen innerhalb seiner internen Infrastruktur für das Wärmemanagement und andere Zwecke neu zu verteilen.

Sie können einen Wert von MaxConnectionsPercent bis zu 1 festlegen, wir empfehlen jedoch je nach Instance-Typ die folgenden Mindestwerte:

  • db.t3.small: 100

  • db.t3.medium: 55

  • db.t3.large: 35

  • db.r3.large oder höher: 20

MaxIdleConnectionsPercent

Mindestwert Maximalwert Standardwert (SQL Server) Standardwert (andere Engines)
(Null) MaxConnectionsPercent 5% von MaxConnectionsPercent 50% von MaxConnectionsPercent

Weitere Informationen finden Sie unter MaxIdleConnectionsPercent.

Diese Einstellung begrenzt die Anzahl der inaktiven Datenbankverbindungen, die RDS Proxy im Verbindungspool unterhält, als Prozentsatz der maximalen Anzahl von Verbindungen, die von der Datenbank zugelassen werden. Eine Datenbankverbindung (Back-End) gilt als inaktiv, wenn fünf Minuten lang keine Aktivität auf der Verbindung stattgefunden hat. Diese Einstellung gilt für Verbindungen zwischen dem Proxy und der Back-End-Datenbank.

Beachten Sie Folgendes:

  • Diese Einstellung begrenzt die Anzahl der inaktiven Verbindungen im Pool, zwingt den Proxy jedoch nicht, eine bestimmte Anzahl inaktiver Verbindungen beizubehalten. Wenn die Client-Aktivität sehr gering ist, kann die tatsächliche Anzahl der Back-End-Datenbankverbindungen niedriger als MaxIdleConnectionsPercent sein.

  • Verbindungen gelten als inaktiv, wenn sie im Verbindungspool des Proxys wiederverwendet werden können. Gepinnte Verbindungen können nicht von anderen Clients wiederverwendet werden und gelten daher nicht als inaktiv, wenn es um die Durchsetzung MaxIdleConnectionsPercent geht. Weitere Hinweise zum Fixieren finden Sie unter. Vermeiden von Pinning beim RDS-Proxy

  • Die Anzahl der inaktiven Verbindungen, die anhand von Datenbankmetadaten gemeldet werden, ist in der Regel höher als die Anzahl der inaktiven Verbindungen, die anhand von RDS-Proxy-Metriken aufgezeichnet wurden. Dies kann auf direkte Client-Verbindungen zurückzuführen sein, die den Proxy umgehen, sowie auf interne Verbindungen, die von Amazon RDS und Aurora Automation verwendet werden.

Anmerkung

Die auf der Proxyebene beobachtete und erzwungene Verbindungsleerlaufzeit kann sich von der Leerlaufzeit unterscheiden, die von Datenbanktools wie der MySQL-Prozessliste oder den Aktivitätsstatistiktabellen in PostgreSQL gemeldet wird. Der RDS-Proxy pingt gelegentlich Back-End-Verbindungen an, wodurch die Leerlaufzeiten der Datenbank zurückgesetzt werden, obwohl die Verbindung in Bezug auf die Client-Aktivität inaktiv bleibt.

Bewährte Methoden:

Die Standardeinstellung 50 ist für die meisten Workloads geeignet und wird empfohlen. Eine Änderung der Einstellung hat folgende Auswirkungen:

  • Beim Hochfahren beobachtet die Datenbank eine größere Anzahl inaktiver VerbindungenMaxIdleConnectionsPercent, was den Ressourcenverbrauch der Datenbank außerhalb der Spitzenzeiten erhöhen kann. Andererseits kommt es bei Verbindungsspitzen, die über den Proxy verarbeitet werden, zu einer geringeren Latenz beim Ausleihen, da im Pool mehr Verbindungen sofort verfügbar sind.

  • Wenn Sie die Geschwindigkeit senkenMaxIdleConnectionsPercent, schließt der Proxy inaktive Verbindungen aggressiver, wodurch möglicherweise die durch diese Verbindungen verursachten Konflikte und der Ressourcenverbrauch reduziert werden. Bei Verbindungsspitzen, die den Proxy passieren, kann es jedoch zu längeren Ausleihzeiten kommen. Da im Pool weniger Verbindungen verfügbar sind, muss der Proxy bei einem Anstieg zusätzliche Zeit damit verbringen, neue Back-End-Verbindungen zu öffnen.

Der Ressourcenverbrauch durch inaktive Verbindungen ist bei Datenbanken, die bereitgestellte Instanztypen verwenden, möglicherweise kein wesentliches Problem, aber Aurora-Datenbanken, die den Instanztyp Serverless v2 verwenden, ziehen es möglicherweise vor, den Ressourcenverbrauch im Leerlauf zu optimieren, um die Kosten zu senken.

IdleClientTimeout

Mindestwert Maximaler Wert Standardwert
1 Minute 8 Stunden 30 Minuten

Weitere Informationen finden Sie unter IdleClientTimeout.

Diese Einstellung bestimmt, wie lange eine Client-Verbindung inaktiv bleiben kann, bevor der Proxy sie schließt. Beachten Sie, dass der RDS-Proxy eine maximale Verbindungslebensdauer von 24 Stunden erzwingt, unabhängig davon, ob sich die Verbindung im Leerlauf befindet. Wenn Sie beispielsweise 30 Minuten (Standard) konfigurieren IdleClientTimeout und die Datenbank jede Minute pingen, überschreitet die Verbindung nie das Leerlauf-Timeout, sie bleibt aber nicht unbegrenzt geöffnet. RDS Proxy schließt die Verbindung nach 24 Stunden, auch wenn sie nicht als inaktiv eingestuft wird.

Die IdleClientTimeout Einstellung gilt für die Verbindung zwischen einem Client (Anwendungen oder interaktive Benutzer) und dem RDS-Proxy. Informationen zum Leerlaufverhalten von Back-End-Verbindungen zwischen dem RDS-Proxy und der Datenbank finden Sie unterMaxIdleConnectionsPercent.

Bewährte Methoden:

  • Das Leerlauf-Timeout muss lang genug sein, um normale Pausen der SQL-Aktivität innerhalb einer Clientverbindung oder Transaktion auszugleichen. Es darf nicht so lang sein, dass ein Client Ressourcen behalten kann, die er vernünftigerweise nicht mehr benötigt, die aber möglicherweise von anderen Clients benötigt werden. Dies ist besonders wichtig, wenn Sie das Verbindungs-Pinning beobachten, da eine Verbindung, die von einem Client gepinnt wurde, nicht von anderen Clients wiederverwendet werden kann.

  • Damit der RDS-Proxy das Timeout korrekt erzwingt, muss die Client-Verbindung wirklich inaktiv sein, ohne dass Abfragen (auch einfache Integritätsprüfungen wieSELECT 1;) oder Protokoll-Pings (wie COM_PING in MySQL) gesendet werden. Wenn Sie beobachten, dass Verbindungen trotz Überschreitung des Timeouts nicht geschlossen werden, überprüfen Sie die Verbindungslogik Ihrer Anwendungstreiber. Application-level Es ist besonders wahrscheinlich, dass Verbindungspools ihre eigenen Verfügbarkeitsprüfungen durchführen und dadurch Störungen verursachen. IdleClientTimeout

ConnectionBorrowTimeout

Mindestwert Maximaler Wert Standardwert
(Null) 5 Minuten 2 Minuten

Weitere Informationen finden Sie unter ConnectionBorrowTimeout.

Wenn ein Client eine Verbindung mit dem RDS-Proxy herstellt, muss der Proxy entweder eine bestehende verfügbare Verbindung aus dem Pool ausleihen oder eine neue Datenbankverbindung öffnen. Diese Einstellung definiert, wie lange der RDS-Proxy darauf wartet, dass eine Verbindung ausgeliehen oder geöffnet wird, bevor ein Fehler zurückgegeben wird.

Beachten Sie Folgendes:

  • Ein Wert ConnectionBorrowTimeout von Null führt zu Timeoutfehlern, wenn der Verbindungspool noch keine verfügbare Verbindung enthält. Dies gilt auch dann, wenn der Pool die maximale Kapazität unterschreitet und eine neue Back-End-Verbindung geöffnet werden könnte.

  • Selbst bei einem MaxIdleConnectionsPercent Wert von gleich kann die tatsächliche Anzahl der Verbindungen im Pool unter dem konfigurierten Maximum liegen. MaxConnectionsPercent Mit anderen Worten, MaxIdleConnectionsPercent begrenzt die Anzahl inaktiver Verbindungen, erzwingt aber nicht, dass Verbindungen geöffnet bleiben.

Es ist normal, dass ein Verbindungspool die maximale Kapazität unterschreitet. In diesem Fall kann die ConnectionBorrowTimeout Einstellung Null verhindern, dass der Pool wächst, da der Pool nicht warten darf, bis eine neue Verbindung geöffnet wird. Daher sollten Sie für alle Workloads ConnectionBorrowTimeout Werte ungleich Null verwenden, es sei denn, das zuvor beschriebene Verhalten wird bevorzugt.

Anmerkung

Diese Einstellung gilt auch, wenn die Datenbank nicht bereit ist, Verbindungen anzunehmen, z. B. bei Offline-Wartungsvorgängen und Failovers. Die Logik zur Durchsetzung von ConnectionBorrowTimeout ist dieselbe, unabhängig davon, ob die Datenbank aktiv oder inaktiv ist.

Initialisierungsabfragen und Pinning-Filter

RDS Proxy unterstützt zusätzliche Funktionen, mit denen das Verbindungs-Pinning reduziert und somit die Effizienz des Multiplexings verbessert werden kann.

Eine Initialisierungsabfrage besteht aus einer oder mehreren Anweisungen, die jedes Mal ausgeführt werden, wenn der Proxy eine neue Back-End-Datenbankverbindung einrichtet. Wenn Ihre Clients identische Anweisungen zum Einrichten von Sitzungsparametern verwenden, können Sie diese Anweisungen in die Initialisierungsabfrage des Proxys verschieben. Dies trägt dazu bei, die Wahrscheinlichkeit eines Pinns zu verringern, und es verbessert auch die Effizienz: Eine bestimmte Back-End-Datenbankverbindung führt ihre Initialisierungsabfrage einmal während der Einrichtung aus, sie kann jedoch später von vielen Clients wiederverwendet werden. Beachten Sie, dass durch das Einfügen von SQL-Anweisungen in die Initialisierungsabfrage diese nicht aus dem Client-Verkehr herausgefiltert werden. Sie müssen diese Anweisungen dennoch aus dem Anwendungscode entfernen, damit sie das Multiplexing nicht beeinträchtigen.

Sitzungs-Pinning-Filter sind eine Konfigurationseigenschaft, die verhindert, dass der Proxy bestimmte Sitzungsstatus festlegt. Die einzige derzeit verfügbare Filteroption weist den Proxy anEXCLUDE_VARIABLE_SETS, bei der Entscheidung, ob eine Sitzung angeheftet werden soll, alle SET Anweisungen zu ignorieren. Die SET Anweisungen werden weiterhin an die Datenbank weitergegeben und können den Sitzungsstatus beeinflussen. Das bedeutet, dass diese Option nur in den folgenden Situationen sicher ist:

  1. Bei den SET Anweisungen handelt es sich um No-Ops, z. B. das Setzen einer Systemvariablen auf einen Wert, der mit dem Serverstandard identisch ist.

  2. Die SET Anweisungen und die nachfolgenden Abfragen sind Teil derselben Transaktion, und jede Transaktion richtet ihren eigenen Status völlig unabhängig ein, sodass sie nicht von Variablen beeinflusst wird, die von anderen Transaktionen gesetzt wurden.

Anmerkung

Der EXCLUDE_VARIABLE_SETS Pinning-Filter ist eine Alles-oder-Nichts-Einstellung, und Sie können nicht selektiv auswählen, welche SET Anweisungen ignoriert werden sollen. Verwenden Sie diesen Filter nicht als pauschale Lösung für das Fixieren, es sei denn, Ihr Anwendungsfall fällt unter eine der in der vorherigen Liste erläuterten Kategorien.

Um optimale Ergebnisse zu erzielen, entfernen Sie nach Möglichkeit unnötige Anweisungen aus dem Anwendungscode und verwenden Sie Filter nur, wenn Anwendungsänderungen nicht möglich sind. Auf diese Weise wird eine weniger laute und vorhersehbarere Client-Server-Umgebung erreicht, anstatt Anweisungen, die gar nicht benötigt werden, besonders zu behandeln.

Wichtig

Weder Initialisierungsabfragen noch Pinning-Filter veranlassen den RDS-Proxy, den Client-Server-Abfrageverkehr zu ändern. Von den Clients eingehende Anweisungen werden unabhängig von der Konfiguration der Init-Abfrage oder des Pinning-Filters weiterhin an die Datenbank weitergegeben.

Weitere Informationen finden Sie unter:

Für PostgreSQL-Verbindungen können Sie auch unterstützte Verbindungsparameter in die Startnachricht einfügen, die zwischen dem Client-Treiber und dem Proxy ausgetauscht wird. Dadurch wird das Senden separater SET Befehle vermieden, wodurch sowohl Roundtrips als auch das durch explizite Anweisungen verursachte Verbindungs-Pinning vermieden werden. SET Weitere Informationen finden Sie unter Überlegungen zum Herstellen einer Verbindung zu PostgreSQL.

Abstimmung der Anwendungs-, Proxy- und Datenbankkonfiguration

Wie im vorherigen Abschnitt beschrieben, unterstützt RDS Proxy eine Reihe von Parametern, mit denen Sie das Proxyverhalten an Ihre Anwendungsanforderungen anpassen können. Die Auswahl der richtigen Konfigurationswerte ist jedoch eine Aufgabe, die sich über alle Ebenen des Stacks erstreckt: die Anwendung, den Proxy und die Datenbank selbst. Die Einstellungen all dieser Komponenten müssen auf die folgenden Ziele ausgerichtet sein:

  1. Sorgen Sie für das erwartete Maß an Leistung und Skalierbarkeit bei normalem Betrieb.

  2. Sorgen Sie für Klarheit und einfache Problembehebung bei Problemen mit der Arbeitslast.

  3. Unterstützen Sie den Stack dabei, unerwartete Ereignisse (wie hohe Arbeitslast) mit minimalen Auswirkungen auf die Anwendung zu bewältigen.

Versuchen Sie bei der Auswahl und Optimierung von Einstellungen in einer mehrschichtigen Umgebung, die Konfigurationswerte so aufeinander abzustimmen, dass die Grenzwerte und Timeouts auf einer niedrigeren Ebene den entsprechenden Grenzwerten und Timeouts auf einer höheren Ebene entsprechen oder diese überschreiten. Mit anderen Worten: Behandeln Sie die Einstellungen einer Ebene wie eine Hülle, die in die nächste Konfigurationshülle weiter unten im Stapel passt.

Gehen Sie beispielsweise davon aus, dass sich Ihre Anwendung auf der obersten Ebene befindet, der Proxy auf der mittleren Ebene und die Datenbank auf der unteren Ebene. Wenn die Timeouts und Grenzwerte auf Proxyebene niedriger sind als die Grenzwerte auf Anwendungsebene, haben Proxylimits Vorrang vor Anwendungslimits. Die Anwendung kann ihre Einstellungen nicht anwenden und es treten Verhaltensweisen auf, die nicht durch ihre eigene Konfiguration erklärt werden können.

Betrachten Sie die IdleClientTimeout Proxyeinstellung als Beispiel. Wenn Ihre Anwendungstreiber oder Client-Pools ihre eigenen Leerlauf-Timeouts erzwingen, ist das Leerlauf-Timeout des Proxys zusätzlich zu den Anwendungseinstellungen ein Sicherheitsnetz. Das bedeutet, dass der Wert mindestens allen Leerlaufzeitüberschreitungen auf Anwendungsebene entsprechen IdleClientTimeout muss, um Verwirrung zu vermeiden:

  • Wenn das Zeitlimit für den Leerlauf der Anwendung niedriger ist als das Proxy-Timeout, erwarten Sie, dass die Anwendung ihre Verbindungen wie konfiguriert schließt. Wenn die Anwendung inaktive Verbindungen nicht rechtzeitig schließt, fungiert der Proxy als Backstop.

  • Wenn das Timeout im Leerlauf der Anwendung länger als das Proxy-Timeout ist, kann es zu Verbindungsabbrüchen der Anwendung kommen, die als verfrüht angesehen werden. Dies kann auf der Anwendungsseite zu Verwirrung führen.

Dieselbe Logik gilt für andere Einstellungen wie Verbindungslimits: Die Einstellungen jeder Ebene sollten innerhalb der durch die Konfiguration der nächsten Ebene definierten Envelope passen.

Um optimale Ergebnisse zu erzielen, sollten die Konfigurationseinstellungen einen gewissen Abstand zwischen einer Ebene und der nächsten vorsehen. Sie können beispielsweise das Proxy-Timeout um einige Sekunden länger als das Anwendungs-Timeout festlegen, um sporadische Fehler aufgrund von Zeitverschiebungen zu client/server vermeiden, oder falls der Client zusätzliche Zeit benötigt, um die Verbindung ordnungsgemäß zu schließen.

Mit anderen Worten, richten Sie Ihre Einstellungen wie folgt aus:

client timeout < proxy timeout < database timeout

Anstatt das zu tun:

client timeout = proxy timeout = database timeout

Und vermeide das:

client timeout > proxy timeout > database timeout

Datenbankkonfiguration

Verbindungsgrenzen

RDS Proxy verwendet MaxConnectionsPercent diese Einstellung, um die maximale Größe seines Verbindungspools zu bestimmen, was bedeutet, dass die Größe des Verbindungspools des Proxys relativ zum Verbindungslimit der Datenbank ist. Wenn Sie das Verbindungslimit der Datenbank ändern, folgt die Poolgröße des Proxys automatisch. Wenn Sie möchten, dass die Datenbank einen Teil des Verbindungslimits für Nicht-Proxybenutzer reserviert, sollten Sie dazu die MaxConnectionsPercent Einstellung im Proxy verringern, anstatt das Datenbanklimit zu erhöhen.

Der RDS-Proxy macht eine korrekte Konfiguration der Datenbankverbindungslimits nicht überflüssig. Eine einzelne Proxyverbindung ist nicht von Natur aus leichter als eine einzelne direkte Client-Verbindung. Erhöhen Sie daher die Datenbanklimits nicht, nur weil Sie einen Proxy verwenden. Ein Proxy reduziert nicht den Arbeitsaufwand, den die Datenbank zur Bearbeitung von Abfragen ausführen muss, aber er hilft der Datenbank, dieselbe Arbeitslast mit weniger Verbindungen zu bewältigen.

Timeouts im Leerlauf

Datenbanken können ihre eigenen Leerlauf-Timeouts erzwingen, indem sie beispielsweise die interactive_timeout Einstellungen wait_timeout und in MySQL oder die idle_in_transaction_session_timeout Einstellungen transaction_timeout und in PostgreSQL verwenden. Es ist unwahrscheinlich, dass die Standardwerte für diese Einstellungen die Proxykonfiguration beeinträchtigen. Wenn Sie jedoch benutzerdefinierte Timeouts auf Datenbankebene verwenden, stellen Sie sicher, dass diese mindestens so lang sind wie die entsprechenden Proxy-Timeouts, da sonst Verbindungsfehler aufgrund vorzeitiger Timeouts auftreten.

Dieselbe Logik gilt für Datenbankumgebungen, die Verbindungskiller verwenden. Dabei handelt es sich um Skripten oder Prozesse, die den Sitzungsstatus überwachen und Verbindungen anhand bestimmter Kriterien aktiv beenden. Wenn Ihre Umgebung solche Techniken verwendet, stellen Sie sicher, dass die Logik des Verbindungsabbruchs mit den Proxyeinstellungen übereinstimmt.

Datenbanken, die ihre gesamte Arbeitslast über den Proxy abwickeln, können in der Regel von der Proxykonfiguration für Leerlaufzeitüberschreitungen abhängen und die Einstellungen auf Datenbankebene auf ihren Standardwerten belassen.

Konfiguration der Anwendung

Sitzungsstatus verwalten

Viele Datenbanktreiber, Anwendungsframeworks und ORM-Tools (Object-Relational Mapping) verwenden Sitzungsvariablen oder SET Anweisungen, um Verbindungen einzurichten, bevor Abfragedatenverkehr gesendet wird. Die Verwendung von Verbindungs- und Transaktionsinitialisierungsanweisungen ist möglicherweise nicht offensichtlich, wenn man nur den Anwendungscode betrachtet, und es kann mehrere Abstraktionsebenen zwischen der Datenbank selbst und den SQL-Anweisungen und der Anwendungslogik geben. Sie können die erweiterte Protokollierungsfunktion von RDS Proxy verwenden, um die Gründe für das Verbindungs-Pinning aufzuzeichnen, und Datenbankabfrageprotokolle können weitere Informationen zu allen Anweisungen liefern, die über Ihre Datenbankverbindungen gesendet wurden.

Bedenken Sie die folgenden bewährten Methoden:

  1. Legen Sie Verbindungsparameter nur fest, wenn sie sich von den Datenbankstandardwerten unterscheiden und die Clientsitzung von diesen Standardwerten abweichen muss. Das Entfernen unnötiger Initialisierungsanweisungen hilft nicht nur beim Multiplexing, sondern reduziert auch die Anzahl der Client-Server-Roundtrips für jede neue Datenbankverbindung.

  2. Legen Sie Variablen und Konfigurationseinstellungen konsistent über alle Verbindungen hinweg fest.

  3. Vermeiden Sie eine Sitzungskonfiguration, die auch zur Laufzeit der Abfrage angewendet werden kann. Wenn beispielsweise verschiedene Clients Daten in unterschiedlichen Zeitzonen sehen müssen, sollten Sie erwägen, Funktionen zur Zeitzonenkonvertierung auf Abfrageebene zu verwenden, anstatt die Zeitzone auf Sitzungsebene festzulegen.

  4. Verschieben Sie nach Möglichkeit die Anweisungen zur Sitzungskonfiguration mithilfe der Funktion zur Initialisierungsabfrage auf die Proxyebene. Weitere Details finden Sie unter Initialisierungsabfragen und Pinning-Filter.

Überprüfung der Lebendigkeit

Wenn Ihre Anwendung Verbindungspooling oder erweiterte Treiber verwendet, suchen Sie nach Konfigurationen, die sich auf Verfügbarkeitsprüfungen beziehen, z. B. Protokoll-Pings, Anweisungen zur Integritätsprüfung oder Keep-Alive-Abfragen. Der RDS-Proxy behandelt alle Client-Anfragen gleich. Auch wenn eine SELECT 1; Abfrage oder COM_PING Anforderung aus Sicht der Anwendung ein No-Op ist, verhindert er, dass der Proxy Timeouts bei inaktiven Clients erzwingt und die Größe des Verbindungspools entsprechend verwaltet. MaxIdleConnectionsPercent

Anmerkung

RDS Proxy erzwingt eine maximale Verbindungslebensdauer von 24 Stunden, unabhängig von der Aktivität auf der Verbindung.

In den meisten Fällen kann es sinnvoll sein, die clientseitigen Verfügbarkeitsprüfungen zu deaktivieren, um das Protokollrauschen zu reduzieren und RDS Proxy bei der Verwaltung inaktiver Verbindungen zu unterstützen. Es gibt Ausnahmefälle, in denen Sie diese Integritätsprüfungen trotzdem durchführen möchten:

  • Sie möchten bewusst verhindern, dass bei bestimmten Verbindungen auf der Proxyebene ein Timeout auftritt.

  • Sie möchten dem Anwendungstreiber oder Pool ermöglichen, proaktiv zu erkennen, wenn eine Verbindung vom Proxy unterbrochen wird. Beispielsweise können angeheftete Back-End-Verbindungen aufgrund eines Datenbankneustarts geschlossen werden und Client-Verbindungen könnten die maximale Lebensdauer von 24 Stunden überschreiten.

Erwägen Sie, die Verfügbarkeitsprüfungen auf der Anwendungsseite zu deaktivieren, oder führen Sie sie nur für die spezifischen Verbindungen durch, bei denen Sie verhindern möchten, dass es zu einem Timeout kommt.

Nachverfolgung des Sitzungsstatus

Einige MySQL-Datenbanktreiber, wie der MariaDB-Treiber, verwenden session_track_* Variablen, um die Verfolgung des Sitzungsstatus zu ermöglichen. Wenn diese Funktion aktiviert ist, nimmt der Server bei jeder Änderung des Sitzungsstatus, die der Server verfolgen kann, die Informationen zur Statusänderung in seine Antwortpakete auf. Dadurch kann der Treiber vom Server über den Sitzungsstatus informiert werden.

Diese Art der Sitzungsstatusverfolgung kann sinnvoll sein, wenn der Client direkt mit dem Server interagiert und seine eigenen Sitzungsverwaltungsfunktionen implementiert, z. B. die Sitzungsmigration in Umgebungen mit mehreren Servern. RDS Proxy implementiert seine eigenen Zustandsverfolgungsmechanismen und verwendet nicht die durch session_track_* Variablen aktivierten Informationen. Das Setzen dieser Variablen führt jedoch zu Session-Pinning.

Wenn Ihr Datenbanktreiber diese Variablen festlegt, können Sie nach Möglichkeiten suchen, die Tracking-Funktionalität im Treiber zu deaktivieren, zu einem anderen Treiber zu wechseln oder Sitzungs-Pinning-Filter zu verwenden, um die Anweisungen zu ignorieren, sofern dies sicher ist. Weitere Details finden Sie unter Initialisierungsabfragen und Pinning-Filter.