Heatmap-Muster für Indexschlüssel

Diese Seite zeigt Beispiele für Muster, die in einer Heatmap von Key Visualizer angezeigt werden können. Diese Muster können Ihnen bei der Behebung bestimmter Leistungsprobleme helfen.

Gleichmäßig verteilte Nutzung

Heatmap, die gleichmäßig verteilte Lese- und Schreibvorgänge zeigt

Wenn eine Heatmap eine fein strukturierte Mischung aus dunklen und hellen Farben aufweist, dann sind Schreib-/Löschvorgänge für Indexschlüssel gleichmäßig über die Datenbank verteilt. Diese Heatmap stellt wahrscheinlich ein effektives Nutzungsmuster für den Datastore-Modus dar.

Indexe auf sequenzielle Schlüssel

Eine Heatmap mit einer einzelnen hellen diagonalen Linie kann auf einen Index hinweisen, der sich auf einen Schlüssel bezieht, der sich streng monoton erhöht oder verringert, z. B. einen Zeitstempel. Indexe auf sequenziellen Schlüsseln werden nicht empfohlen und können Hotspots verursachen. Beim Hotspoting kann es sein, dass Sie entsprechende erhöhte Latenzen beobachten.

Hier einige Beispiele für häufige Hotspots im Index:

Hotspots aufgrund eines zunehmenden Zeitstempels

Heatmap mit Hotspots aufgrund eines steigenden Zeitstempels

In diesem Beispiel kann eine Heatmap mit einer einzelnen hellen diagonalen Linie auf eine Datenbank hinweisen, die strikt steigende oder abnehmende Indexschreib-/Löschvorgänge für eine Zeitstempeleigenschaft verwendet.

Hotspots aufgrund zunehmender Property-Namen

Heatmap mit Hotspots aufgrund einer wachsenden Property

In diesem Beispiel kann eine Heatmap mit einer einzelnen hellen diagonalen Linie auf eine Datenbank hinweisen, die streng zunehmende oder abnehmende Indexschreib-/Löschvorgänge für ein inkrementelles Attribut wie automatisch generierte Rechnungsnummern verwendet.

Verwenden Sie das Key Visualizer-Tool, um das Hotspot-Problem zu identifizieren, und ermitteln Sie die Indexschlüsselstruktur, um herauszufinden, welcher Index das Problem verursacht. Befreien Sie diese Indexe dann mithilfe von Best Practices von der Indexierung.

Indexschlüsselstruktur

Bevor Sie sich mit der Struktur der Indexschlüssel im Key Visualizer vertraut machen, sollten Sie sich mit Indexen im Datastore-Modus vertraut machen.

Der folgende Code zeigt ein Beispiel für das Format eines Indexschlüssels, das angezeigt wird, wenn Sie den Mauszeiger auf den betroffenen Schlüsselbereich in der Heatmap bewegen.

NAMESPACE: NS KIND: Users 
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),`UserList`,1)
VALUES: (16500000000000001,'Alice')
ENTITY:KEY(PROJECT('PROJECT_ID'),NAMESPACE(''),`UserList`,1,`User`,5000000000000001)

Wobei:

  • NAMESPACE: Namespace des Elements.
  • ART: Art der Entität, die die Entitäten kategorisiert.
  • PROPERTIES: Properties, die sich auf die Entität beziehen. Die Sortiereigenschaft __key__ wird nur für Indexdefinitionen angezeigt, die die Standardsortierung ändern.
  • ANCESTOR: Optionaler Ancestor-Pfad zur Entität innerhalb der Datenbankhierarchie.
  • VALUES: Wert der einzelnen Property.
  • ENTITY: ID der Entität, die bei einem Vorgang aktualisiert wurde.

Ermitteln Sie anhand des Werts PROPERTIES die Eigenschaften, um den betroffenen Index zu finden.

So finden Sie den Index:

  1. Rufen Sie in der Google Cloud Console die Seite Indexe im Datastore-Modus auf.

    Indexe im Datastore-Modus

    Sie können den Indextyp anhand des Felds PROPERTIES ermitteln. Weitere Informationen finden Sie unter Beispiele für Indexschlüssel.

  2. Klicken Sie auf Filter, wählen Sie Felder aus und geben Sie den Namen des Felds ein.

    Verwenden Sie den Operator ODER, um bei zusammengesetzten Indexen weitere Properties hinzuzufügen.

Nachdem Sie den Index gefunden haben, der Probleme verursacht, können Sie die folgenden Lösungen verwenden:

  • Integrierter Index: Das Attribut wird ausgeschlossen, sodass der Index keine Indexeinträge für dieses Attribut enthält. Weitere Informationen finden Sie unter Ausgeschlossene Properties.
  • Zusammengesetzter Index: Ändern Sie entweder den Index in der Datei index.yaml so, dass das Feld, dessen Wert monoton steigt oder fällt, nicht als erstes Feld für die Indexierung ausgewählt wird, oder löschen Sie den Index. Weitere Informationen finden Sie unter index.yaml.

Beispiele für Indexschlüsseleinträge in der Heatmap

Typ Beschreibung Beispiel
Integrierter Indexeintrag Indexeintrag für den Index der einzelnen Property für die Property Timestamp in absteigender Reihenfolge für den Namespace NS. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Nutzer, 5000000000000001)
Integrierter Indexeintrag Indexeintrag für den Index der einzelnen Property im Standard-Namespace. NAMESPACE: ' '
KIND: Users
PROPERTIES: (Timestamp: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'), NAMESPACE('NS'),Nutzer, 5000000000000001)
Eintrag eines zusammengesetzten Index Indexeintrag für den zusammengesetzten Index für die Property Timestamp und die Property Name in absteigender Reihenfolge ohne aktivierten Vorfahren. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: DESC)
ANCESTOR: NONE
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),Nutzer,5000000000000001)
Zusammengesetzter Indexeintrag mit übergeordnetem Element Indexeintrag für den zusammengesetzten Index für die Property Timestamp in absteigender Reihenfolge und die Property Name in absteigender Reihenfolge mit aktiviertem Vorfahr. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: DESC, Name: ASC)
ANCESTOR: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001
VALUES: (16500000000000001, 'Alice')
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)
Eintrag in einem zusammengesetzten Index mit __key__ Indexeintrag für den zusammengesetzten Index für das Attribut Timestamp in aufsteigender Reihenfolge und das Attribut __key__ in absteigender Reihenfolge ohne aktivierten Vorfahren. Sie können __key__ als letztes Attribut in einer Indexdefinition verwenden, um die Standardsortierung der Ergebnisse zu ändern. NAMESPACE: NS
KIND: Users
PROPERTIES: (Timestamp: ASC, __key__ DESC)
ANCESTOR: NONE
VALUES: (16500000000000001)
ENTITY: KEY(PROJECT('PROJECT_ID'),NAMESPACE('NS'),UserList,1,User,5000000000000001)

Nächste Schritte