Drosselungsdiagnose - Amazon DynamoDB

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.

Drosselungsdiagnose

Wenn Ihre Anwendung gedrosselt wird, stellt DynamoDB detaillierte Ausnahmeinformationen und gezielte CloudWatch-Metriken bereit, um Sie bei der Diagnose dieser Ereignisse zu unterstützen.

In diesem Abschnitt wird ein systematischer Ansatz zum Verständnis von Drosselungsereignissen in Ihren DynamoDB-Anwendungen vorgestellt. Er erläutert, wie Drosselungsausnahmen interpretiert und mit CloudWatch-Metriken in Verbindung gesetzt werden können, um genauere Einblicke zu erhalten. So können Sie ermitteln, welche Änderungen die Drosselung in Ihren DynamoDB-Anwendungen reduzieren würden.

Übersicht über Drosselungsausnahmen

Wenn DynamoDB eine Anfrage drosselt, gibt es spezifische Ausnahmen mit detaillierten Diagnoseinformationen zurück. In Java gehören dazu beispielsweise ProvisionedThroughputExceededException, RequestLimitExceeded oder ThrottlingException.

Jede Ausnahme umfasst ThrottlingReasons, eine Reihe einzelner ThrottlingReason mit zwei Schlüsselfeldern, mit deren Hilfe Sie Drosselungen identifizieren und verstehen können:

  • ein Grund – ein verkettetes Feld mit dem Format <ResourceType><OperationType><LimitType>

  • ein Amazon-Ressourcenname (ARN) – der Amazon-Ressourcenname (ARN) der betroffenen Tabelle oder des betroffenen Indexes

Das Feld mit dem Grund folgt einem konsistenten Muster, das Ihnen hilft, das Ereignis genau zu verstehen:

  • ResourceType (was wird gedrosselt): Table oder Index

  • OperationType (welche Art von Vorgang): Read oder Write

  • LimitType (warum ist die Drosselung erfolgt):

    • KeyRangeThroughputExceeded: Dies tritt auf, wenn eine bestimmte Partition, die Ihrer Tabelle oder Ihrem Index zugrunde liegt, Lese- oder Schreibkapazität verbraucht hat, die die internen Durchsatzlimits pro Partition überschreitet.

    • ProvisionedThroughputExceeded: Dies passiert bei einer bereitgestellten Tabelle oder einem bereitgestellten globalen sekundären Index, wenn die Lese- oder Schreibverbrauchsrate die bereitgestellte Menge überschritten hat.

    • AccountLimitExceeded: Dies passiert bei einer On-Demand-Tabelle oder einem On-Demand-Index, wenn die Lese- oder Schreibverbrauchsrate die auf Kontoebene festgelegte maximale Verbrauchsrate für eine Tabelle und ihre Indizes überschritten hat. Sie können eine Erhöhung dieses Kontingents anfordern.

    • MaxOnDemandThroughputExceeded: Dies passiert bei einer On-Demand-Tabelle oder einem On-Demand-Index, wenn die Lese- oder Schreibverbrauchsrate die vom Nutzer konfigurierte maximale Verbrauchsrate für die Tabelle und den Index überschritten hat. Sie können diesen Wert selbst auf einen beliebigen Wert bis zum Kontolimit erhöhen oder auf -1 setzen, um anzugeben, dass kein vom Nutzer festgelegtes Limit vorhanden ist.

Der Ressourcenname (ARN) gibt genau an, welche Tabelle oder welcher Index gedrosselt wird:

  • Für Tabellen: arn:aws:dynamodb:[region]:[account-id]:table/[table-name]

  • Für Indizes: arn:aws:dynamodb:[region]:[account-id]:table/[table-name]/index/[index-name]

Beispiele für vollständige Drosselungsgründe:

  • TableReadProvisionedThroughputExceeded

  • IndexWriteAccountLimitExceeded

Damit können Sie genau ermitteln, welche Ressource gedrosselt wurde, durch welche Art von Vorgang die Drosselung verursacht wurde und warum die Drosselung erfolgt ist.

Beispielausnahmen

Beispiel 1: Überschreitung der bereitgestellten Kapazität eines GSI

{ "ThrottlingReasons": [ { "reason": "IndexWriteProvisionedThroughputExceeded", "resource": "arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders/index/OrderDateIndex" } ], "awsErrorDetails": { "errorCode": "ProvisionedThroughputExceeded", "errorMessage": "The level of configured provisioned throughput for the index was exceeded", "serviceName": "DynamoDB", "sdkHttpResponse": { "statusText": "Bad Request", "statusCode": 400 } } }

In diesem Beispiel erhält die Anwendung eine ProvisionedThroughputExceededException mit dem Grund IndexWriteProvisionedThroughputExceeded. Schreibvorgänge in den OrderDateIndex werden gedrosselt, weil der Schreibverbrauch die konfigurierte bereitgestellte Schreibkapazität des GSI überschritten hat.

Beispiel 2: Überschreitung des maximalen On-Demand-Durchsatzes

{ "ThrottlingReasons": [ { "reason": "TableReadMaxOnDemandThroughputExceeded", "resource": "arn:aws:dynamodb:us-east-1:123456789012:table/UserSessions" } ], "awsErrorDetails": { "errorMessage": "Throughput exceeds the maximum OnDemandThroughput configured on table or index", "errorCode": "ThrottlingException", "serviceName": "DynamoDB", "sdkHttpResponse": { "statusText": "Bad Request", "statusCode": 400 } } }

In diesem Beispiel werden Lesevorgänge aus der UserSessions-Tabelle gedrosselt, weil sie den für die Tabelle konfigurierten maximalen On-Demand-Durchsatz überschreiten.

Diagnose-Framework für DynamoDB-Drosselungen

Wenn in Ihrer Anwendung eine Drosselung auftritt, gehen Sie wie folgt vor, um das Problem zu diagnostizieren und zu beheben.

Schritt 1 – Analysieren der ThrottlingReason-Details

  1. Überprüfen Sie das Feld „reason“, um den spezifischen Grund für die Drosselung zu ermitteln. Zu den Angaben gehören die Art der gedrosselten Ressource (Tabelle oder Index), die Art des Vorgangs, der das Drosselungsereignis verursacht hat (Lesen oder Schreiben), und die Art des Limits, das überschritten wurde (Partition, bereitgestellter Durchsatz, Kontolimit).

  2. Überprüfen Sie das Feld resourceArn, um herauszufinden, welche Ressource (Tabelle oder GSI) gedrosselt wird.

  3. Mithilfe dieser kombinierten Informationen können Sie den vollständigen Kontext des Drosselungsproblems bestimmen.

    Nehmen Sie zum Beispiel dieses Szenario, in dem Sie die folgende Ausnahme ProvisionedThroughputExceededException mit dem Drosselungsgrund TableWriteKeyRangeThroughputExceeded erhalten. Der betroffene resourceARN ist arn:aws:dynamodb:us-west-2:123456789012:table/CustomerOrders.

    Diese Kombination informiert Sie darüber, dass Schreibvorgänge in Ihre CustomerOrders-Tabelle gedrosselt werden. Die Drosselung erfolgt auf Partitionsebene (nicht auf Tabellenebene, was als TableWriteProvisionedThroughputExceeded angezeigt werden würde). Die Ursache des Problems besteht darin, dass die maximale Durchsatzkapazität für einen bestimmten Schlüsselwert oder -bereich einer Partition überschritten wurde. Dies deutet auf ein Problem mit einer Hot-Partition hin.

    Wenn Sie diesen Zusammenhang zwischen den Ausnahmeelementen verstehen, können Sie geeignete Abhilfemaßnahmen ergreifen. In diesem Fall muss das Problem mit der Hot-Partition behoben werden, anstatt die bereitgestellte Gesamtkapazität der Tabelle zu erhöhen.

Schritt 2 – Identifizieren und Analysieren der zugehörigen CloudWatch-Metriken

  1. Metriken bestimmen: Jeder Drosselungsgrund in DynamoDB hängt direkt mit einer spezifischen CloudWatch-Metrik zusammen. Diese können Sie überwachen, um Drosselungsereignisse zu verfolgen und zu analysieren. Den Namen der entsprechenden CloudWatch-Metrik können Sie systematisch aus dem Drosselungsgrund ableiten.

  2. Ordnen Sie den Drosselungsgrund anhand dieser Referenztabelle den entsprechenden CloudWatch-Metriken zu:

    Vollständige Drosselungsgründe und Verweis auf CloudWatch-Metriken
    Kategorie Drosselungsgrund Primäre CloudWatch-Metriken
    Überschreitung der bereitgestellten Kapazität TableReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents
    TableWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents
    IndexReadProvisionedThroughputExceeded ReadProvisionedThroughputThrottleEvents (GSI)
    IndexWriteProvisionedThroughputExceeded WriteProvisionedThroughputThrottleEvents (GSI)
    Überschreitung der Partitionslimits TableReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents
    TableWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents
    IndexReadKeyRangeThroughputExceeded ReadKeyRangeThroughputThrottleEvents (GSI)
    IndexWriteKeyRangeThroughputExceeded WriteKeyRangeThroughputThrottleEvents (GSI)
    Überschreitung des maximalen On-Demand-Durchsatzes TableReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents
    TableWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents
    IndexReadMaxOnDemandThroughputExceeded ReadMaxOnDemandThroughputThrottleEvents (GSI)
    IndexWriteMaxOnDemandThroughputExceeded WriteMaxOnDemandThroughputThrottleEvents (GSI)
    Überschreitung der Kontolimits TableReadAccountLimitExceeded ReadAccountLimitThrottleEvents
    TableWriteAccountLimitExceeded WriteAccountLimitThrottleEvents
    IndexReadAccountLimitExceeded ReadAccountLimitThrottleEvents (GSIs)
    IndexWriteAccountLimitExceeded WriteAccountLimitThrottleEvents (GSIs)

    Wenn Sie beispielsweise IndexWriteProvisionedThroughputExceeded erhalten haben, sollten Sie mindestens die CloudWatch-Metrik WriteProvisionedThroughputThrottleEvents für den spezifischen Index überwachen, der im ResourceArn benannt wurde.

  3. Überwachen Sie diese Metriken in CloudWatch, um die Häufigkeit und den Zeitpunkt der Drosselung zu bestimmen, zwischen Lese- und Schreibdrosselung zu unterscheiden, Zeitmuster zu erkennen, in denen die Drosselung zunimmt, und Ihre Kapazitätsauslastungstrends zu verfolgen.

    DynamoDB veröffentlicht detaillierte Metriken für jede Tabelle und jeden globalen sekundären Index. Die Metriken (ReadThrottleEvents, WriteThrottleEvents undThrottledRequests) fassen alle Drosselungsereignisse in Ihrer Tabelle und ihren Indizes zusammen.

Schritt 3 – Identifizieren der gedrosselten Schlüssel und hohen Zugriffsraten mithilfe von CloudWatch Contributor Insights (für partitionsbezogene Drosselung)

Wenn Sie in Schritt 1 partitionsbezogene Probleme festgestellt haben (z. B. Fehler vom Typ KeyRangeThroughputExceeded), können Sie mithilfe von CloudWatch Contributor Insights for DynamoDB diagnostizieren, welche spezifischen Schlüssel Ihren Datenverkehr antreiben und von Drosselungsereignissen in Ihrer Tabelle oder Ihrem Index betroffen sind.

  1. Aktivieren Sie CloudWatch Contributor Insights für die gedrosselte Tabelle bzw. den gedrosselten Index basierend auf dem ResourceARN.

    Sie können den Modus Gedrosselte Schlüssel wählen, um sich ausschließlich auf die am stärksten gedrosselten Schlüssel zu konzentrieren. Dieser Modus eignet sich ideal für die kontinuierliche Überwachung, da er nur Ereignisse verarbeitet, bei denen eine Drosselung erfolgt. Alternativ hilft Ihnen der Modus für Schlüssel mit Zugriffen und Drosselungen dabei, nach Mustern in den am häufigsten aufgerufenen Schlüsseln zu suchen.

  2. Analysieren Sie die Berichte, um problematische Muster zu identifizieren. Suchen Sie nach Schlüsseln mit unverhältnismäßig hohen Zugriffs- oder Drosselungsraten und setzen Sie Drosselung und Datenverkehrsmuster miteinander in Verbindung. Sie können integrierte Dashboards erstellen, die Contributor-Insights-Diagramme und DynamoDB-CloudWatch-Metriken kombinieren.

Ausführliche Informationen zum Aktivieren und Verwenden von CloudWatch Contributor Insights finden Sie unter Verwenden von CloudWatch Contributor Insights for DynamoDB.

Schritt 4 – Ermitteln der passenden Lösung

Nachdem Sie die konkrete Ursache der Drosselung bestimmt haben, implementieren Sie die empfohlene Lösung für Ihren spezifischen Kontext. Die geeignete Lösung hängt von mehreren Faktoren ab. Dazu gehören das Drosselungsszenario, der Kapazitätsmodus der Tabelle, Entscheidungen zum Tabellen- und Schlüsseldesign, Zugriffsmuster und Abfrageeffizienz, die Konfiguration des globalen sekundären Indexes sowie die allgemeine Systemarchitektur und die Integrationspunkte.

Detaillierte Lösungen für Ihre spezifischen Drosselungsszenarien finden Sie im Abschnitt Lösungsleitfaden für Drosselungen in DynamoDB. Diese Ressource bietet gezielte Abhilfemaßnahmen, die auf Ihren speziellen Drosselungsgrund und die Konfiguration des Kapazitätsmodus zugeschnitten sind.

Schritt 5 – Überwachen des Fortschritts

  1. Behalten Sie die CloudWatch-Metriken für Ihr Drosselungsszenario im Blick.

  2. Prüfen Sie, ob Ihre Abhilfemaßnahmen wirksam sind und ein Rückgang der Drosselungsereignisse zu beobachten ist.